crfPortal.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. function print(config,msg){
  2. config.document.getElementById(config.debugId).value+="\n"+msg;
  3. }
  4. function drawForm(par){
  5. populateSourceTable(par); //populateSourceTableData
  6. let tableId="entryTable";
  7. generateTable(par,"formDiv",tableId);
  8. generateRow(par,tableId,"User");//generateTableRow
  9. }
  10. function generateQConfig(listName){
  11. let qConfig=new Object();
  12. qConfig.containerPath="TECANT/Data";
  13. qConfig.schemaName="lists";
  14. qConfig.queryName=listName;
  15. return qConfig;
  16. }
  17. function sourceVar(crfEntryName,elementId,sourceName){
  18. let f=new Object();
  19. f.masterSelectVarName=crfEntryName;
  20. f.selectId=elementId;
  21. f.inputType="innerHTML";
  22. f.sourceSelectVarName=sourceName;
  23. return f;
  24. }
  25. function getField(config, data, varName){
  26. let debug=false;
  27. if (debug) print(config, "getField");
  28. let fields=data.metaData.fields;
  29. for (f in fields){
  30. if (debug) print(config,"Checking "+f+": name "+fields[f].name+"/"+varName);
  31. if (fields[f].name!=varName) continue;
  32. return fields[f];
  33. }
  34. return null;
  35. }
  36. function generateHead(config, headDivName,divName,title){
  37. print(config,"generateHead");
  38. let tb=config.document.createElement('table');
  39. tb.className='t2';
  40. let row=tb.insertRow();
  41. let cell=config.document.createElement('th');
  42. row.appendChild(cell);
  43. cell.setAttribute("colspan","4");
  44. cell.style.fontSize="20px";
  45. cell.style.textAlign="center";
  46. let cellData=config.document.createTextNode(title);
  47. cell.appendChild(cellData);
  48. cell=row.insertCell();
  49. cell.style.fontSize="20px";
  50. let input=config.document.createElement("input");
  51. input.type="button";
  52. input.value="Show";
  53. input.id="toggle"+divName+"VisbilityButton";
  54. input.onclick=function(){toggleVisibility(config,divName,input.id)};
  55. cell.appendChild(input);
  56. config.document.getElementById(headDivName).appendChild(tb);
  57. print(config,"generateHead: Done");
  58. }
  59. function toggleVisibility(config,divName,buttonName){
  60. let x = config.document.getElementById(divName);
  61. if (x.style.display === "none") {
  62. x.style.display = "block";
  63. config.document.getElementById(buttonName).value="Hide";
  64. } else {
  65. x.style.display = "none";
  66. config.document.getElementById(buttonName).value="Show";
  67. }
  68. }
  69. function selectRowsSuccess(config,data){
  70. print(config,"Select rows on "+data.queryName+" got "+data.rows.length+" rows.");
  71. }
  72. function populateSourceTable(par){
  73. let debug=true;
  74. if (debug){
  75. print(par.config,"populateSourceTable: Starting");
  76. }
  77. let config=generateQConfig(par.source.queryName);
  78. config.schemaName=par.source.schemaName;
  79. if (!("source" in par)) return;
  80. if (debug){
  81. print(par.config,"populateSourceTable ["+par.source.queryName+"]");
  82. }
  83. config.success=function(data){populateSourceTableData(data,par)};
  84. //config.success=function(data){selectRowsSuccess(par.config,data)};
  85. config.failure=function(errorTxt){print(par.config,"populateSourceData:fail"+errorTxt.exception)};
  86. LABKEY.Query.selectRows(config);
  87. }
  88. function populateSourceTableData(data,par){
  89. let debug=true;
  90. if (debug){
  91. print(par.config, "populateSourceTableData: nrow: "+data.rows.length);
  92. }
  93. let entry=data.rows[0];
  94. for (let i=0;i < par.source.vars.length;i++){
  95. let srcVarName=par.source.vars[i];
  96. if (debug){
  97. print(par.config, "populateSourceTable ["+srcVarName+"]");
  98. }
  99. let row=par.vars[srcVarName];
  100. let el=par.config.document.getElementById(row.selectId);
  101. if (debug){
  102. print(par.config, "Element: "+el);
  103. }
  104. el.innerHTML=entry[row.sourceSelectVarName];
  105. }
  106. }
  107. function generateTable(par,divName,elementId){
  108. let debug=true;
  109. if (debug)
  110. print(par.config,"generateTable");
  111. let tb=par.config.document.createElement('table');
  112. tb.className="t2";
  113. tb.id=elementId;
  114. par.config.document.getElementById(divName).appendChild(tb);
  115. if (debug)
  116. print(par.config,"generateTable: Done");
  117. }
  118. function generateRow(parameters, tableId, rowId){
  119. let debug=true;
  120. if (debug)
  121. print(parameters.config,"generateRow: Start");
  122. let config=generateQConfig(parameters.masterQuery);
  123. config.success=function(data){generateTableRow(data, parameters, tableId, rowId)};
  124. LABKEY.Query.selectRows(config);
  125. if (debug)
  126. print(parameters.config,"generateRow: End");
  127. return;
  128. }
  129. function generateTableRow(data, parameters, tableId, rowId){
  130. let tb=parameters.config.document.getElementById(tableId);
  131. let row=parameters.vars[rowId];
  132. let field=getField(parameters.config,data,row.masterSelectVarName);
  133. let trow=tb.insertRow();
  134. let cell=parameters.config.document.createElement('th');
  135. trow.appendChild(cell);
  136. let text = parameters.config.document.createTextNode(field.shortCaption);
  137. cell.appendChild(text);
  138. cell=trow.insertCell();
  139. let input = parameters.config.document.createElement("select");
  140. input.id = row.selectId;
  141. input.onchange=function(){row.callback(parameters,rowId)};
  142. cell.appendChild(input);
  143. }
  144. function generateListAndPopulateDaughterSelect(parameters,rowId){;}
  145. function generateList(parameters,rowId){;}