diff --git a/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/MedCo_QryTool.js b/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/MedCo_QryTool.js
index ed2502c7e..3afe5d31d 100644
--- a/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/MedCo_QryTool.js
+++ b/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/MedCo_QryTool.js
@@ -1,514 +1,514 @@
i2b2.MedCo.QT = {};
var currId = 0; // used to give a unique id to the panels
function getPanelIndex(panel){
while (panel.className != 'MedCo-QueryPanel'){
if (!panel.parentElement){
return -1
}
panel = panel.parentElement
}
var index = Array.prototype.indexOf.call(panel.parentNode.children, panel);
return index
}
function htmlToElement(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
}
i2b2.MedCo.QT.ctrlr = {};
i2b2.MedCo.QT.ctrlr.init = function(){
// Initialization of the query tool.
var num_panels = 3; // start with 3 panels
i2b2.MedCo.QT.panels = [];
for (var i=0; i < num_panels; i++) {
i2b2.MedCo.QT.ctrlr.appendPanel()
}
};
i2b2.MedCo.QT.ctrlr.clear = function (){
alert("clear!")
// todo empty the panels, reset the timer and ignore a possible query result?
};
i2b2.MedCo.QT.timer = {
// number of milliseconds between two updates
step: 100,
// store the start time (in milliseconds)
startTime: 0,
//store the
timeinterval: null,
start: function () {
// hide the gif and start
- document.getElementById("medcoTimer").style.display = 'inline';
+ document.getElementById("medcoTimer").style.display = 'inline-block';
document.getElementById("MedCo-loadingGif").style.display = 'none';
var context = i2b2.MedCo.QT.timer;
context.clear();
context.startTime = new Date().getTime();
context.timeinterval = setInterval(context.update, context.step);
},
update: function () {
var now = new Date().getTime();
document.querySelector("#medcoTimer").innerHTML = ((now-i2b2.MedCo.QT.timer.startTime)/1000).toFixed(2);
},
stop: function () {
clearInterval(i2b2.MedCo.QT.timer.timeinterval);
i2b2.MedCo.QT.timer.timeinterval = null;
},
clear: function(){
i2b2.MedCo.QT.timer.stop();
document.querySelector("#medcoTimer").innerHTML = 0;
},
wait: function(){
// show the gif
document.getElementById("medcoTimer").style.display = 'none';
document.getElementById("MedCo-loadingGif").style.display = 'inline';
}
};
i2b2.MedCo.QT.query = {
// timeout used to wait until we received all the variant ids
timeout: null,
// You should call this function to run a query so to make sure you received and encrypted all
// the annotation ids you queried
waitThenRun: function(){
// clear any previous timeout (in case the user keeps pressing "run query" we want to send only one query)
clearTimeout(i2b2.MedCo.QT.query.timeout);
// clear the timer in any case
i2b2.MedCo.QT.timer.clear();
// show that we are preparing to send the query
i2b2.MedCo.QT.timer.wait();
// show the we are waiting for the query to be executed
for (var i = 0; i < 3; i++) { // todo generalize
document.getElementById("MedCo-plainResult" + i).innerHTML = "...";
document.getElementById("MedCo-siteName" + i).innerHTML = "-";
}
// wait until you receive all the variants you requested and all of them have been encrypted
if (i2b2.MedCo.ctrlr.pendingVariantsQueries != 0 || !i2b2.MedCo.ctrlr.background.done()) { // todo change names
// try again later to run the query
i2b2.MedCo.QT.query.timeout = setTimeout(i2b2.MedCo.QT.query.waitThenRun, 500);
return
}
// the query can be build and sent
i2b2.MedCo.QT.query.run();
},
// build and send the query
run: function(){
// start the timer
i2b2.MedCo.QT.timer.start();
// callback processor to run the query from definition
this.MedCocallback = new i2b2_scopedCallback();
this.MedCocallback.scope = this;
this.MedCocallback.callback = function(results) {
try{
// alert("full message" + JSON.stringify(results));
if (results.error) {
alert(results.errorMsg);
return;
} else {
// // "results" object contains the following attributes:
// // refXML: xmlDomObject <--- for data processing
// // msgRequest: xml (string)
// // msgResponse: xml (string)
// // error: boolean
// // errorStatus: string [only with error=true]
// // errorMsg: string [only with error=true]
// stop the timer and the gif
i2b2.MedCo.QT.timer.stop();
// extract and show the patient counts
i2b2.MedCo.QT.query.showResponse(results);
}
} catch(e){
alert("Error when extracting the results of the query: " + e.message)
}
};
this.MedCoparams = {};
this.MedCoparams.psm_query_definition = i2b2.MedCo.QT.query.buildQueryDefinition("MedCo_query");
this.MedCoparams.psm_result_output = "\n\n";
i2b2.CRC.ajax.runQueryInstance_fromQueryDefinition("PLUGIN:MedCo", this.MedCoparams, this.MedCocallback);
},
showResponse: function(results){
results = results.refXML.getElementsByTagName('query_result_instance');
// first extract the descriptions
var descriptions = new Array(results.length);
for (var i = 0; i < results.length; i++) {
var desc = i2b2.h.getXNodeVal(results[i], 'description');
try {
descriptions[i] = JSON.parse(desc);
} catch (e) {
alert("Error in parsing the response." + i2b2.h.getXNodeVal(results[i], 'summary'));
return
}
}
// then sort the descriptions on the name of the shrine server
descriptions.sort(function (a, b) {
return Object.keys(a)[0] > Object.keys(b)[0]
});
// todo: try with .then to avoid freezing too long the page
// finally show the count
// todo generalize
for (var i = 0; i < descriptions.length; i++) {
var site_name = Object.keys(descriptions[i])[0];
var enc_patientCount = descriptions[i][site_name]["enc_count_result"];
var patient_count = DecryptStr(enc_patientCount, i2b2.MedCo.SecKey);
document.getElementById("MedCo-plainResult" + i).innerHTML = patient_count;
document.getElementById("MedCo-siteName" + i).innerHTML = site_name;
}
},
// build the xml of the query from i2b2.MedCo.QT.panels
buildQueryDefinition: function(name){
// name: name for the query
// get the time of the query (we concatenate the time to the name of the query)
var d = new Date();
var time = d.getHours().toString() + ":" + d.getMinutes().toString() + ":" + d.getSeconds().toString();
var queryxml = "\n\t" + name + "@" + time + "\n\tANY\n\t0\n\t";
var panels = i2b2.MedCo.QT.panels;
for (var i = 0 ; i < panels.length; i++){ // there are 3 panels
if (panels[i].model.content.length == 0) {continue} // if in the panel there are no parameters the go to the next panel
// open a panel object in which we put all its concepts
queryxml += "\n\t\t" + i + "\n\t\t100\n\t\t0\n\t\tANY\n\t\t1\n\t\t";
// put the all the concepts in the query
for (var j = 0; j < panels[i].model.content.length; j++){
// take one "row" at a time and take encrypted values if sensitive
var item_keys = []
var row = panels[i].model.content[j];
if (row.sensitive){
// the row contains sensitive values
for (var z=0; z\n\t\t\t' + item_keys[z] + '\n\t\t\n';
}
}
queryxml +="\n\t\n"
}
queryxml += "\n\n";
return queryxml
},
}
i2b2.MedCo.QT.ctrlr.appendPanel = function(){
// Each element (row) visualized on a panel is bound either to a concept (which can
// be either sensitive or non-sensitive) or to a list of variant ids (always sensitive).
// create a new panel, add it to the list of panels and bind to it model, view and controller
var panel = {}
panel.view = {}
panel.ctrlr = {}
panel.model = {}
i2b2.MedCo.QT.panels.push(panel);
// ------ initialize the model of the panel ------
panel.model = {
// indicates whether the panel is excluded or not
"exclude": false,
// // indicates the group id of the panel (starting from 0)
// "group": i2b2.MedCo.QT.panels.length-1,
// contains a list of {"sensitive": bool, "values"=[ list of concepts/variant ids bound to i-th row of the panel ]}
"content": [],
// id of the whole html panel
"panelId": 'MedCo-QueryPanel' + currId,
// id of the html panel containing dropped concepts
"conceptPanelId": "MedCo-QueryPanelConcepts" + currId
};
currId++
// ------ initialize the view of the panel ------
document.getElementById("MedCo-QueryPanels").appendChild(htmlToElement(
"
" +
"" +
"
" +
"
" +
//
"
" +
"
" +
//
"
" +
"
" +
"
" +
"
" +
"
" +
"
"));
// // create and add the div for the dropped concepts
i2b2.sdx.Master.AttachType(panel.model.conceptPanelId , 'CONCPT', {dropTarget: true});
i2b2.sdx.Master.setHandlerCustom(panel.model.conceptPanelId, 'CONCPT', 'DropHandler', function (sdxData) {panel.ctrlr.doDrop(sdxData);});
/* Instantiate a ContextMenu for this panel*/
YAHOO.util.Event.onContentReady(panel.model.conceptPanelId, function () {
var conceptContextMenu = new YAHOO.widget.ContextMenu(
panel.model.conceptPanelId+"ContextMenu",
{
trigger: document.getElementById(panel.model.conceptPanelId).childNodes,
itemdata: ["Delete"],
lazyload: true
}
);
// whenever the content of the panel changes, update the trigger property
$(panel.model.conceptPanelId).on("DOMSubtreeModified",function(){
conceptContextMenu.cfg.setProperty("trigger", document.getElementById(panel.model.conceptPanelId).childNodes);
});
function onContextMenuClick(p_sType, p_aArgs) {
//p_aArgs[1]: MenuItem instance that was the target of the "click" event.
var oItem = p_aArgs[1], // The MenuItem that was clicked
oTarget = this.contextEventTarget,
oLI;
if (oItem) {
// todo: also verify the class (sdxDefaultCONCPT)?
oLI = oTarget.nodeName.toUpperCase() == "DIV" ?
oTarget : YAHOO.util.Dom.getAncestorByClassName(oTarget, "sdxDefaultCONCPT");
switch (oItem.index) {
case 0: // Delete
// remove the concept from the view and from the model
var panel_view = document.getElementById(panel.model.conceptPanelId)
var index = Array.from(panel_view.children).indexOf(oLI)
panel.model.content.splice(index, 1)
panel_view.removeChild(oLI)
break;
// add here other cases if there are more menu items
}
}
}
// "render" event handler for the ewe context menu
function onContextMenuRender(p_sType, p_aArgs) {
// Add a "click" event handler to the ewe context menu
this.subscribe("click", onContextMenuClick);
}
conceptContextMenu.subscribe("render", onContextMenuRender);
// a bit rude bug fix... (hide menu when clicking on the panel)
document.getElementById(panel.model.conceptPanelId).onclick = function () {conceptContextMenu.hide.call(conceptContextMenu)}
});
panel.view.appendConcept = function (concept, output){
var conceptDiv =
"" +
((panel.model.exclude) ? "
NOT" : "") +
"
" +
concept +
((output)? (" (
)") : "") +
"
";
// var panel.model.conceptPanelId = panel.view.getElementsByClassName('MedCo-QueryPanelConcepts')[0].id;
var conceptPanel = document.getElementById(panel.model.conceptPanelId)
conceptPanel.innerHTML += conceptDiv;
return conceptPanel.lastChild
};
// ------ initialize the controller ------
panel.ctrlr.doDrop = function (sdxData) {
var concept = sdxData[0]; // only interested in first record
// CHECK: some useful functions:
// alert(i2b2.h.getXNodeVal(sdxData.origData.xmlOrig, "level"))
// alert(Object.getOwnPropertyNames(sdxData.origData));
// optimization to prevent requerying the hive for new results if the input dataset has not changed
// i2b2.ExampTabs.model.dirtyResultsData = true;
// check whether to show a popup or directly append the concept
switch(concept.sdxInfo.sdxDisplayName) {
case "Gene Name":
i2b2.MedCo.popups.ByGene.ctrlr.show(i2b2.MedCo.QT.panels.indexOf(panel));
return;
case "Protein Position":
i2b2.MedCo.popups.ByProteinPosition.ctrlr.show(i2b2.MedCo.QT.panels.indexOf(panel));
return;
case "Variant Name":
i2b2.MedCo.popups.ByVariantName.ctrlr.show(i2b2.MedCo.QT.panels.indexOf(panel));
return;
}
var keyval = concept.sdxInfo.sdxKeyValue;
var sensitive = !keyval.includes("nonsensitive") && !keyval.includes("non-sensitive");
var conceptModel = sensitive ? concept.origData.basecode.split(":")[1] : (concept.origData.key).replace(/ NOT
var not = document.createElement("span")
not.className = "itemExclude"
not.title = "This item is being excluded"
not.innerHTML = "NOT"
conceptsDiv[i].insertBefore(not, conceptsDiv[i].firstChild);
}
}
else {
// remove the "NOT" in front of the concepts in the div
for (var i = 0; i < conceptsDiv.length; i++) {
conceptsDiv[i].removeChild(conceptsDiv[i].getElementsByClassName("itemExclude")[0])
}
}
};
panel.ctrlr.delete = function(){
var index = i2b2.MedCo.QT.panels.indexOf(panel)
if (index == -1){
alert("Impossible to delete the panel, panel inexistent.")
return
}
// delete the panel from the model
i2b2.MedCo.QT.panels.splice(index, 1)
// delete the panel from the view
var panels_container = document.getElementById("MedCo-QueryPanels")
var panels = panels_container.childElements()
panels_container.removeChild(panels[index]);
// update the group number in the header of the panels
panels = panels_container.childElements()
for (var i = 0; i < panels.length; i++) {
// i2b2.MedCo.QT.panels[i].group = (i + 1);
var header = panels[i].getElementsByClassName("groupId")[0]
header.innerHTML = 'Group ' + (i+1);
}
if (i2b2.MedCo.QT.panels.length != panels.length){
alert("Something went wrong: model and view are inconsistent.")
}
}
};
i2b2.MedCo.QT.ctrlr.deletePanel = function(HTMLelem){
// HTMLelem: (clicked) html element
// first get the index of the panel
var index = getPanelIndex(HTMLelem);
if (index < 0){
alert("Panel not found")
return
}
// then call the delete function on it
i2b2.MedCo.QT.panels[index].ctrlr.delete()
};
i2b2.MedCo.QT.ctrlr.excludePanel = function(HTMLelem){
// HTMLelem: (clicked) html element
// first get the index of the panel
var index = getPanelIndex(HTMLelem)
if (index < 0){
alert("Panel not found")
return
}
// then call the exclude function on it
i2b2.MedCo.QT.panels[index].ctrlr.exclude(HTMLelem)
};
\ No newline at end of file
diff --git a/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/assets/vwMedcoQryTool.css b/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/assets/vwMedcoQryTool.css
index 403638208..52ccfd257 100755
--- a/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/assets/vwMedcoQryTool.css
+++ b/shrine-webclient/src/main/html/js-i2b2/cells/plugins/MedCo/assets/vwMedcoQryTool.css
@@ -1,553 +1,554 @@
/*.medcoQryToolTitle{*/
/*text-align: center;*/
/*margin: auto;*/
/*padding: 10px;*/
/*}*/
/*div.medcoQryToolPanels {*/
/*height: 200px;*/
/*width: 100%;*/
/*}*/
/*div.medcoQryToolPanel {*/
/*font-size: 12px;*/
/*box-sizing: border-box;*/
/*padding: 3px;*/
/*!*background-color: #CBD8EF;*!*/
/*background-color: white;*/
/*float: left;*/
/*width: 33%;*/
/*height: 100%;*/
/*!*margin: 2px;*!*/
/*border: 2px solid #3c4c5c;*/
/*overflow: scroll;*/
/*}*/
/* New GUI (copy of the crc query tool) */
/* Panel section */
#MedCo-QueryPanels {
height: 200px; /*calc(100% - 305px);*/
white-space: nowrap;
/*width: 100%;*/
/*perspective-origin: 399px 147.078px;*/
/*transform-origin: 399px 147.078px;*/
font: normal normal 400 normal 12px / 16px arial, helvetica;
overflow-x: auto;
overflow-y: hidden;
}
.MedCo-QueryPanel {
vertical-align:top;
display:inline-block;
/*white-space: normal;*/
/*float: left;*/
height: calc(100% - 2px);
/*white-space: nowrap;*/
width: calc(33.33% - 2px); /* consider also the margin */
/*perspective-origin: 82px 125.078px;*/
/*transform-origin: 82px 125.078px;*/
font: normal normal 400 normal 12px / 16px arial, helvetica;
margin: 1px;
padding: 0px 0px 2px;
}
.MedCo-QueryPanelHeader {
/*background-position: 0% 50%;*/
/*color: rgb(255, 255, 255);*/
/*float: left;*/
height: 13px;
text-align: center;
text-decoration: none solid rgb(255, 255, 255);
/*white-space: nowrap;*/
/*width: 162px;*/
/*column-rule-color: rgb(255, 255, 255);*/
/*perspective-origin: 82px 7.5px;*/
/*transform-origin: 82px 7.5px;*/
/*caret-color: rgb(255, 255, 255);*/
background: rgb(102, 119, 170) none repeat scroll 0% 50% / auto padding-box border-box;
border: 1px solid rgb(102, 119, 136);
font: normal normal 700 normal 11px / 12px arial, helvetica;
/*outline: rgb(255, 255, 255) none 0px;*/
overflow: hidden;
}
.MedCo-QueryPanelHeader div.delete {
color: rgb(255, 255, 255);
float: right;
/*height: 11px;*/
/*width: 11px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(255, 255, 255);*/
/*white-space: nowrap;*/
/*column-rule-color: rgb(255, 255, 255);*/
/*perspective-origin: 5.5px 5.5px;*/
/*transform-origin: 5.5px 5.5px;*/
/*caret-color: rgb(255, 255, 255);*/
/*border: 0px none rgb(255, 255, 255);*/
/*font: normal normal 700 normal 11px / 12px arial, helvetica;*/
/*margin: 1px;*/
/*outline: rgb(255, 255, 255) none 0px;*/
}
.MedCo-QueryPanelHeader div.delete a {
/*text-align: center;*/
/*white-space: nowrap;*/
/*font: normal normal 700 normal 11px / 12px arial, helvetica;*/
color: rgb(0, 0, 238);
cursor: pointer;
/*height: 11px;*/
/*width: 11px;*/
/*height: 11px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(0, 0, 238);*/
/*white-space: nowrap;*/
/*width: 11px;*/
/*column-rule-color: rgb(0, 0, 238);*/
/*perspective-origin: 5.5px 5.5px;*/
/*transform-origin: 5.5px 5.5px;*/
/*caret-color: rgb(0, 0, 238);*/
/*border: 0px solid rgb(0, 0, 238);*/
/*font: normal normal 700 normal 11px / 12px arial, helvetica;*/
/*outline: rgb(0, 0, 238) none 0px;*/
}
.MedCo-QueryPanelHeader div.delete a img {
margin: 1px 2px 1px 0px;
/*height: 11px;*/
/*width: 11px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(0, 0, 238);*/
/*white-space: nowrap;*/
/*column-rule-color: rgb(0, 0, 238);*/
/*perspective-origin: 5.5px 5.5px;*/
/*transform-origin: 5.5px 5.5px;*/
/*caret-color: rgb(0, 0, 238);*/
/*border: 0px solid rgb(0, 0, 238);*/
/*font: normal normal 700 normal 11px / 12px arial, helvetica;*/
/*outline: rgb(0, 0, 238) none 0px;*/
}/*#IMG_6, #IMG_39, #IMG_69*/
.MedCo-QueryPanelHeader div.groupId {
color: rgb(255, 255, 255);
/*height: 12px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(255, 255, 255);*/
/*white-space: nowrap;*/
/*width: 162px;*/
/*column-rule-color: rgb(255, 255, 255);*/
/*perspective-origin: 81px 6px;*/
/*transform-origin: 81px 6px;*/
/*caret-color: rgb(255, 255, 255);*/
/*border: 0px none rgb(255, 255, 255);*/
/*font: normal normal 700 normal 11px / 12px arial, helvetica;*/
/*outline: rgb(255, 255, 255) none 0px;*/
}
.MedCo-QueryPanelOptions {
/*float: left;*/
height: 18px;
/*white-space: nowrap;*/
/*width: 164px;*/
/*perspective-origin: 82px 9px;*/
/*transform-origin: 82px 9px;*/
/*font: normal normal 400 normal 12px / 16px arial, helvetica;*/
margin: 0px 0px -1px;
}
.MedCo-QueryPanelOptions div{
height: 100%;
font: normal normal 400 normal 12px / 16px arial, helvetica;
float: left;
background: rgb(203, 216, 239) none repeat scroll 0% 50% / auto padding-box border-box;
border: 1px solid rgb(102, 119, 136);
box-sizing: border-box;
text-align: center;
}
.MedCo-QueryPanelOptions div.date {
width: 25%;
}
/*#A_9 {*/
/*color: rgb(0, 0, 0);*/
/*display: block;*/
/*height: 16px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(0, 0, 0);*/
/*white-space: nowrap;*/
/*width: 38px;*/
/*column-rule-color: rgb(0, 0, 0);*/
/*perspective-origin: 19px 8px;*/
/*transform-origin: 19px 8px;*/
/*caret-color: rgb(0, 0, 0);*/
/*border: 0px none rgb(0, 0, 0);*/
/*font: normal normal 400 normal 11px / 16px arial, helvetica;*/
/*outline: rgb(0, 0, 0) none 0px;*/
/*}*/
.MedCo-QueryPanelOptions div.occur {
width: 50%;
}
/*#A_11 {*/
/*color: rgb(0, 0, 0);*/
/*display: block;*/
/*height: 16px;*/
/*text-align: center;*/
/*text-decoration: none solid rgb(0, 0, 0);*/
/*white-space: nowrap;*/
/*width: 76px;*/
/*column-rule-color: rgb(0, 0, 0);*/
/*perspective-origin: 38px 8px;*/
/*transform-origin: 38px 8px;*/
/*caret-color: rgb(0, 0, 0);*/
/*border: 0px none rgb(0, 0, 0);*/
/*font: normal normal 400 normal 11px / 16px arial, helvetica;*/
/*outline: rgb(0, 0, 0) none 0px;*/
/*}*/
/*#SPAN_12 {*/
/*cursor: pointer;*/
/*text-align: center;*/
/*white-space: nowrap;*/
/*font: normal normal 400 normal 11px / 16px arial, helvetica;*/
/*}*/
.MedCo-QueryPanelOptions div.exclude{
width: 25%;
}
.MedCo-QueryPanelOptions div.exclude a {
cursor: pointer;
color: rgb(0, 0, 0);
display: block;
text-decoration: none solid rgb(0, 0, 0); /* modify this to underline (onclick) */
font: normal normal 400 normal 11px / 16px arial, helvetica;
}
.MedCo-QueryPanelConcepts {
/*clear: both;*/
/*float: left;*/
height: calc(100% - 31px); /* - (header + options width)*/
/*white-space: nowrap;*/
width: 100%;
/*perspective-origin: 82px 101.5px;*/
/*transform-origin: 82px 101.5px;*/
background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box;
border: 1px solid rgb(102, 119, 136);
font: normal normal 400 normal 12px / 16px arial, helvetica;
/*overflow: auto;*/
padding: 3px;
box-sizing: border-box;
}
.MedCo-QueryPanelConcepts .sdxDefaultCONCPT{
cursor: pointer;
}
/* Button section */
div.MedCo-Commands {
height: 25px;
padding: 0px 10px;
overflow:hidden;
}
/* run and clear buttons */
div.MedCo-Commands div.MedCo-Button {
/* position:relative; */
/* xdisplay:none; */
background:#6677AA;
border:1px solid #667788;
/* color:#FFFFFF; */
font-weight:bold;
/* font-family:arial,helvetica; */
font-size:11px;
height:16px;
width: 72px;
/* line-height:16px; */
text-align:center;
/* color:#FFF; */
cursor:pointer;
float: left;
margin: 3px 5px 0px 0px;
/* xz-index:5; */
overflow:hidden;
}
div.MedCo-Commands div.MedCo-Button a{
color:#FFF;
display:block;
text-decoration:none;
}
div.MedCo-Commands div.MedCo-Button a:hover {
background-color:#7687bf;
}
/* timer */
div.MedCo-Commands div.timer{
/* position:relative; */
/* xdisplay:none; */
/* height:25px; */
line-height:25px;
text-align:right;
float: left;
margin-left: 10px;
/* xz-index:5; */
overflow:hidden;
}
div.MedCo-Commands div.timer #medcoTimer{
display: inline-block;
text-align: center;
width: 50px;
font-weight:normal;
}
/* Add group*/
.new-group {
color: rgb(0, 0, 238);
cursor: pointer;
height: 18px;
float: right;
margin-top: 3px;
/* text-decoration: none solid rgb(0, 0, 238); */
/* white-space: nowrap; */
/* width: 72px; */
/* column-rule-color: rgb(0, 0, 238); */
/* perspective-origin: 36px 9px; */
/* transform-origin: 36px 9px; */
/* caret-color: rgb(0, 0, 238); */
/* border: 0px solid rgb(0, 0, 238); */
/* font: normal normal 400 normal 12px / 16px arial, helvetica; */
/* outline: rgb(0, 0, 238) none 0px; */
}
DIV#MedCo-TABS DIV.resetButton,
DIV#MedCo-TABS DIV.runButton {
position:relative;
xdisplay:none;
background:#6677AA;
border:1px solid #667788;
color:#FFFFFF;
font-weight:bold;
font-family:arial,helvetica;
font-size:11px;
height:16px;
line-height:16px;
text-align:center;
color:#FFF;
cursor:pointer;
float: left;
margin:0px 5px 0px 0px;
width:72px;
xz-index:5;
overflow:hidden;
}
DIV#MedCo-TABS table.timer{
position:relative;
xdisplay:none;
height:16px;
line-height:16px;
text-align:right;
float: right;
margin:0px 5px 0px 0px;
xz-index:5;
overflow:hidden;
padding-right: 10px;
}
td#medcoTimer{
text-align: center;
width: 50px;
font-weight:normal;
}
/* Result section */
#MedCo-QueryResults{
height: 250px;
width: 100%;
}
.MedCo-result{
font-weight:bold;
width: 0%;
margin: auto;
}
DIV#MedCo-TABS table.MedCo-resultTable{
width: 500px;
margin-left: auto;
margin-right: auto;
}
/*"Number of patient"*/
DIV#MedCo-TABS table.MedCo-resultTable tr:first-child td{
background-color: #B0C4DE;
color: black;
text-align: center;
vertical-align: middle;
}
/*count*/
DIV#MedCo-TABS table.MedCo-resultTable tr:last-child td{
background-color: #B0C4DE;
color: darkblue;
text-align: center;
vertical-align: middle;
font-size: 30px;
height: 40px;
padding: 0;
width: 150px;
}
/*loading query gif*/
img#MedCo-loadingGif {
width: 15px;
height: 15px;
+ padding: 0px 7px;
display: none;
text-align: center;
vertical-align: middle;
margin-left: auto;
margin-right: auto;
}
/* Popups */
.hd {
color: #FFFFFF !important;
background: transparent !important;
/*background-image: url(i2b2/top_hive.gif) !important;*/
background-repeat: repeat-x !important;
font-size:14px !important;
font-weight:bold !important;
cursor: move !important;
}
.bd {
background: #EFEFFF !important;
background:#FFF;
border:solid #63758C;
border-width:1px 0;
overflow:auto;
height:100%;
}
.MedCo_popupParametersSelection{
height: 50px;
}
.MedCo_popupParametersSelection .parameterRow{
height: 20px;
width: 100%;
}
.MedCo_popupParametersSelection .parameterRow div{
float: left;
height: 100%;
line-height: 20px;
vertical-align: middle;
}
.MedCo_popupParametersSelection .parameterRow div:first-child{
/* the first div of the parameterRow contains the name of the parameter */
width: 110px;
font-weight: bold;
}
.zygosityListPopup label{
height: 100%;
cursor: pointer;
}
.zygosityListPopup label input {
margin: 0px 3px 0px 20px;
padding: 0px;
vertical-align: middle;
}
.zygosityListPopup label:first-child input{
margin-left: 0px;
}
/*reset and run Buttons*/
DIV#MedCo-TABS DIV.MedCo-Buttons {
padding-left:20px;
margin-bottom:10px;
overflow:hidden;
}
/*.hd {*/
/*color: #FFFFFF !important;*/
/*background: transparent !important;*/
/*!*background-image: url(i2b2/top_hive.gif) !important;*!*/
/*background-repeat: repeat-x !important;*/
/*font-size:14px !important;*/
/*font-weight:bold !important;*/
/*cursor: move !important;*/
/*}*/
/*.bd {*/
/*background: #EFEFFF !important;*/
/*background:#FFF;*/
/*border:solid #63758C;*/
/*border-width:1px 0;*/
/*overflow:auto;*/
/*height:100%;*/
/*}*/
/*.MedCo_popupTable{*/
/*border-spacing: 0px 15px;*/
/*}*/
/*.MedCo_popupTable th{*/
/*width: auto;*/
/*}*/
/*.MedCo_popupTable tr td {*/
/*width: 400px;*/
/*}*/
/*.MedCo_popupTable tr td *{*/
/*width: 100%;*/
/*}*/
/*#zygosityListProteinPositionPopup,*/
/*#zygosityListAnnotationNamePopup,*/
/*#zygosityListGenePopup,*/
/*#zygosityListVariantNamePopup{*/
/*margin: auto;*/
/*width: auto;*/
/*vertical-align: middle;*/
/*float: left;*/
/*border: 2px solid #d5d5d5;*/
/*}*/
/*#zygosityListProteinPositionPopup label,*/
/*#zygosityListAnnotationNamePopup label,*/
/*#zygosityListGenePopup label,*/
/*#zygosityListVariantNamePopup label{*/
/*margin-left: 10px;*/
/*margin-right: 7px;*/
/*width: auto;*/
/*float: left;*/
/*}*/
/*#zygosityListProteinPositionPopup input,*/
/*#zygosityListAnnotationNamePopup input,*/
/*#zygosityListGenePopup input,*/
/*#zygosityListVariantNamePopup input{*/
/*width: auto;*/
/*vertical-align: middle;*/
/*}*/