Browse Source

Formating according to Modules:JavaScript Libraries

Eager Beaver 5 years ago
parent
commit
d022c05157
3 changed files with 226 additions and 4 deletions
  1. 3 3
      views/smokingHabits.html
  2. 1 1
      views/smokingHabits.view.xml
  3. 222 0
      web/tecant/generateTable.js

+ 3 - 3
views/smokingHabits.html

@@ -32,10 +32,10 @@ window.onload = init();
 //var generateTable=require("tecant/generateTable.js");
 
 function init(){
-    LABKEY.requiresScript("/tecant/scripts/tecant/generateTable.js", function() {
+    //LABKEY.requiresScript("/tecant/scripts/tecant/generateTable.js", function() {
             // Called back when all the scripts are loaded onto the page
-            document.getElementById('formStatus').value+="\n Adding scripts";
-        });
+    //        document.getElementById('formStatus').value+="\n Adding scripts";
+    //    });
 	generateTable("existingCondition","smokingHabitsDiv",true);
 }
 

+ 1 - 1
views/smokingHabits.view.xml

@@ -1,5 +1,5 @@
 <view xmlns="http://labkey.org/data/xml/view" title="Smoking Habits and Alcohol consumption">
 	<dependencies>
-			<dependency path="/tecant/scripts/tecant/generateTable.js"/>
+			<dependency path="tecant/generateTable.js"/>
 	</dependencies>
 </view>

+ 222 - 0
web/tecant/generateTable.js

@@ -0,0 +1,222 @@
+function generateTable(listName,divName,unique){
+	//add temp variables
+	LABKEY.Query.selectRows({schemaName: 'lists',queryName: listName, requiredVersion:"8.3", 
+		parameters:{"divName":divName}, success:function(data){populateTable(data,divName,unique)} });
+}
+
+function populateTable(data,divName,unique){
+	//generate and populate table with the first suitable entry
+	document.getElementById('formStatus').value+="\n Query: "+data.queryName;
+	document.getElementById('formStatus').value+="\n divName: "+divName;
+
+	//document.getElementById('formStatus').value+="\n Div: "+resp.params["query.param.divName"];
+
+	var obj=data.metaData.fields;
+	for (f in obj){	
+		document.getElementById('formStatus').value+="\n Data["+f+"]: "+obj[f];
+		for (g in obj[f]){
+			document.getElementById('formStatus').value+="\n Data.metaData.fields["+f+"]["+g+"]: "+obj[f][g];
+		}
+		if ("lookup" in obj[f]){
+			for (h in obj[f]["lookup"]){
+				document.getElementById('formStatus').value+="\n Lookup["+h+"]: "+obj[f]["lookup"][h];
+	
+			}
+		}
+
+	}
+	var crfRef=document.getElementById("crfRefId").innerHTML;
+	var entry=new Object();
+
+	for (i=0;i<data.rows.length;i++){
+		var entry=data.rows[i];
+		if (entry.crfRef!=crfRef) {
+			document.getElementById('formStatus').value+="\n Crfref mismatch: "+crfRef+"/"+entry[crfRef];
+			continue;
+		}	
+		break;
+	}
+	
+
+	var tb=document.createElement('table');
+	tb.className="t2";
+	document.getElementById(divName).appendChild(tb);
+
+	var fields=data.metaData.fields;
+	for (f in fields){
+		if (fields[f].hidden) continue;
+		
+		var vName=fields[f].name;
+
+		if (vName=="crfRef") continue;
+
+		var vType=fields[f].type;
+
+		let row=tb.insertRow();
+		let cell=row.insertCell();
+		let text = document.createTextNode(fields[f].shortCaption);
+		cell.appendChild(text);
+		cell=row.insertCell();
+		var cellClass="input";
+		var cellType="text";
+		if ("lookup" in fields[f]){
+			cellClass="select";
+		}
+		if (vType=="string"){
+			;
+		}
+		if (vType=="date"){
+			cellType="date";
+		}
+		
+		var input = document.createElement(cellClass);
+		input.type = cellType;
+		input.id = vName;
+
+		if (vType=="string" ){
+			if (vName in entry) { input.value=entry[vName];}
+		}
+
+		if (vType=="date"){
+			if (vName in entry) {input.valueAsDate=new Date(entry[vName]);}
+		}
+
+		if ("lookup" in fields[f]){
+			var lookup=fields[f]["lookup"];
+			var config=new Object();
+			document.getElementById('formStatus').value+="\n Query: "+lookup.queryName;
+			config.schemaName=lookup.schemaName;
+			config.queryName=lookup.queryName;
+			var parameters={"elementId":input.id,"keyColumn":lookup.keyColumn,"displayColumn":lookup.displayColumn};
+			if (vName in entry) parameters.selectedKey=entry[vName];
+			config.success=function(data){populateSelect(data,parameters)};
+			LABKEY.Query.selectRows(config);
+		}
+		cell.appendChild(input); 
+	}
+	var row=tb.insertRow();
+	let cell=row.insertCell();
+	cell.setAttribute("colspan","2");
+	var input=document.createElement("input");	
+	input.type="button";
+	input.value="Add";
+	input.onclick=function(){saveData(data.queryName,unique)};
+	cell.appendChild(input);
+		
+}	
+
+function populateSelect(data,parameters){
+	document.getElementById('formStatus').value+="\n Data: "+data;
+	var elementId=parameters.elementId;
+	var keyColumn=parameters.keyColumn;
+	var displayColumn=parameters.displayColumn;
+	document.getElementById('formStatus').value+="\n ElementId: "+elementId;
+	document.getElementById('formStatus').value+="\n keyColumn: "+keyColumn;
+	document.getElementById('formStatus').value+="\n displayColumn: "+displayColumn;
+	
+	if ("selectedKey" in parameters){
+		document.getElementById('formStatus').value+="\n SelectedKey: "+parameters["selectedKey"];
+	}
+
+	var el = document.getElementById(elementId);
+	document.getElementById('formStatus').value+="\n Element: "+el;
+   	for(i = el.options.length; i >= 0; i--) {
+		el.remove(i);
+   	}
+	var opt = document.createElement("option");
+	opt.text = "<Select>";
+	opt.value = -1;
+	el.options[0] = opt;
+
+	for (var i = 0; i < data.rows.length; i++) {
+		var opt = document.createElement("option");
+		opt.text = data.rows[i][displayColumn];
+		opt.value = data.rows[i][keyColumn];
+		document.getElementById('formStatus').value+="\n Adding: "+opt.value+" : "+opt.text;
+	
+		el.options[el.options.length] = opt;
+		if ("selectedKey" in parameters){
+			document.getElementById('formStatus').value+="\n Comparing: " + opt.value  + "/" + 
+				parameters["selectedKey"];
+			
+           		if (opt.value==parameters["selectedKey"]){
+				el.selectedIndex=el.options.length-1;
+				document.getElementById('formStatus').value+="\n Equal; "+el.selectedIndex;
+			}
+	   	}
+	}
+
+}	
+
+function failureSelect(errorInfo,resp,opt){
+	document.getElementById('formStatus').value+="\n Error: ";
+
+}
+
+function saveData(queryName,unique){
+	document.getElementById('formStatus').value+="\n saveData: ";
+	var config=new Object();
+	config.schemaName='lists';//could be made more generic
+	config.queryName=queryName;
+	var crfRef=document.getElementById("crfRefId").innerHTML;
+	config.filterArray=[ LABKEY.Filter.create('crfRef',crfRef)];
+	config.success=function(data){saveDataToList(data,unique)};
+	LABKEY.Query.selectRows(config);
+}
+
+function saveDataToList(data,unique){
+	document.getElementById('formStatus').value+="\n saveDataToList: ";
+	var update=false;
+	if (unique && data.rows.length>0){
+		var entry=data.rows[0]
+		update=true;
+	}
+	else{
+		var entry=new Object();
+		entry.crfRef=document.getElementById("crfRefId").innerHTML;
+	}
+	
+	var config=new Object();
+	config.schemaName=data.schemaName;//could be made more generic
+	config.queryName=data.queryName;
+	//entry.crfRef=document.getElementById("crfRefId").innerHTML;
+	
+	var fields=data.metaData.fields;
+	for (f in fields){
+		if (fields[f].hidden) continue;
+		
+		var vName=fields[f].name;
+
+		if (vName=="crfRef") continue;
+
+		var el=document.getElementById(vName);
+
+		if (!el) continue;
+	
+		var vType=fields[f].type;
+
+		if ("lookup" in fields[f]){
+			entry[vName]=el.options[el.selectedIndex].value;
+			continue;
+		}
+		if (vType=="date"){
+			var date=el.valueAsDate;
+			if (date==="null") continue;
+			date.setUTCHours(12);
+			entry[vName]=date.toString();
+		}	
+		if (vType=="string"){
+			entry[vName]=el.value;
+		}	
+	}
+	config.rows=[entry];
+
+	if (update) 
+		LABKEY.Query.updateRows(config);
+	else 
+		LABKEY.Query.insertRows(config); 
+}
+
+
+exports.generateTable=generateTable;
+exports.saveData=saveData;