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\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( "
" + "
" + "
" + "Clear" + "
"+ "
Group " + i2b2.MedCo.QT.panels.length + "
" + "
" + "
" + "
" + // "
" + "
" + // "
" + "
" + "Exclude" + "
" + "
" + "
" + "
" + "
")); // // 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;*/ /*}*/