From dc54db814ddf93e5750217f246bc04c3a414aab2 Mon Sep 17 00:00:00 2001 From: dennyverbeeck Date: Tue, 22 Nov 2016 14:48:21 +0100 Subject: [PATCH 001/136] Fix for ui autocomplete --- grails-app/views/RWG/_extSearchField.gsp | 2 +- grails-app/views/RWG/_extTagSearchField.gsp | 2 +- grails-app/views/uploadData/_extDiseaseSearchField.gsp | 2 +- grails-app/views/uploadData/_extSearchField.gsp | 2 +- web-app/js/datasetExplorer/omicsFilter.js | 2 +- web-app/js/rwgsearch.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/grails-app/views/RWG/_extSearchField.gsp b/grails-app/views/RWG/_extSearchField.gsp index a2926503d..f36e93cac 100644 --- a/grails-app/views/RWG/_extSearchField.gsp +++ b/grails-app/views/RWG/_extSearchField.gsp @@ -12,7 +12,7 @@ jQuery(document).ready(function() { jQuery("#" + escapedFieldName).val(id); return false; } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { return jQuery('
  • ') .data("item.autocomplete", item ) .append('' + item.category + '> ' + item.label + ' ' + item.synonyms + '') diff --git a/grails-app/views/RWG/_extTagSearchField.gsp b/grails-app/views/RWG/_extTagSearchField.gsp index a4079dd61..990f00c72 100644 --- a/grails-app/views/RWG/_extTagSearchField.gsp +++ b/grails-app/views/RWG/_extTagSearchField.gsp @@ -21,7 +21,7 @@ jQuery(document).ready(function() { newTag.hide().fadeIn('slow'); return false; } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { return jQuery('
  • ') .data("item.autocomplete", item ) .append('' + item.category + '> ' + item.label + ' ' + item.synonyms + '') diff --git a/grails-app/views/uploadData/_extDiseaseSearchField.gsp b/grails-app/views/uploadData/_extDiseaseSearchField.gsp index 1d1c94d97..21a19796d 100644 --- a/grails-app/views/uploadData/_extDiseaseSearchField.gsp +++ b/grails-app/views/uploadData/_extDiseaseSearchField.gsp @@ -67,7 +67,7 @@ jQuery(document).ready(function() { addObservationTag(diseaseName, sourceAndCode, escapedFieldName); } } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { return jQuery('
  • ') .data("item.autocomplete", item ) .append('' + item.category + '> ' + item.keyword + '') diff --git a/grails-app/views/uploadData/_extSearchField.gsp b/grails-app/views/uploadData/_extSearchField.gsp index f335ca0c9..0c78065ac 100644 --- a/grails-app/views/uploadData/_extSearchField.gsp +++ b/grails-app/views/uploadData/_extSearchField.gsp @@ -21,7 +21,7 @@ jQuery(document).ready(function() { updateStudyTable(studyId); return false; } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { return jQuery('
  • ') .data("item.autocomplete", item ) .append('' + item.category + '> ' + item.keyword + '') diff --git a/web-app/js/datasetExplorer/omicsFilter.js b/web-app/js/datasetExplorer/omicsFilter.js index a67072deb..c0d656d56 100644 --- a/web-app/js/datasetExplorer/omicsFilter.js +++ b/web-app/js/datasetExplorer/omicsFilter.js @@ -157,7 +157,7 @@ function addOmicsFilterAutocomplete() { response: function(event, ui) { omicsAutoCompleteList = ui.content.map(function(item) {return item.label;}); } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { var resulta = '' + item.label + ''; if (item.synonyms != null) { resulta += (item.synonyms + ''); diff --git a/web-app/js/rwgsearch.js b/web-app/js/rwgsearch.js index e806ad093..ae0f1e489 100644 --- a/web-app/js/rwgsearch.js +++ b/web-app/js/rwgsearch.js @@ -96,7 +96,7 @@ function addSearchAutoComplete() { var category = jQuery("#search-categories").val(); return false; } - }).data("uiAutocomplete")._renderItem = function( ul, item ) { + }).data("ui-autocomplete")._renderItem = function( ul, item ) { var resulta = '' + item.category + '> ' + item.label + ' '; if (item.synonyms != null) { resulta += (item.synonyms + ''); From 04e906ff834cb54a8a56c4a1d38ba2bb84aaf82d Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Mon, 12 Dec 2016 19:21:58 +0000 Subject: [PATCH 002/136] version release 16.2 --- grails-app/conf/BuildConfig.groovy | 38 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index b92c2f3ab..344c26295 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -58,7 +58,7 @@ grails.project.dependency.resolution = { runtime 'org.javassist:javassist:3.16.1-GA' - compile 'org.transmartproject:transmart-core-api:16.2-SNAPSHOT' + compile 'org.transmartproject:transmart-core-api:16.2' compile 'antlr:antlr:2.7.7' compile 'net.sf.opencsv:opencsv:2.3' @@ -134,30 +134,30 @@ grails.project.dependency.resolution = { compile ":codenarc:0.21" if (!dm) { - runtime ':smart-r:1.1-STABLE-SNAPSHOT' - compile ':rdc-rmodules:16.2-SNAPSHOT' - runtime ':transmart-core:16.2-SNAPSHOT' - compile ':transmart-gwas:16.2-SNAPSHOT' + runtime ':smart-r:16.2-STABLE' + compile ':rdc-rmodules:16.2' + runtime ':transmart-core:16.2' + compile ':transmart-gwas:16.2' //// already included in transmart-gwas - //compile ':transmart-legacy-db:16.2-SNAPSHOT' + //compile ':transmart-legacy-db:16.2' //// already included in transmart-gwas - //compile ':folder-management:16.2-SNAPSHOT' + //compile ':folder-management:16.2' //// already included in transmart-gwas, folder-management - //compile ':search-domain:16.2-SNAPSHOT' + //compile ':search-domain:16.2' //// already included in search-domain, transmart-gwas, // folder-management - //compile ':biomart-domain:16.2-SNAPSHOT' + //compile ':biomart-domain:16.2' //// already included in biomart-domain - //compile ':transmart-java:16.2-SNAPSHOT' - runtime ':dalliance-plugin:16.2-SNAPSHOT' - runtime ':transmart-mydas:16.2-SNAPSHOT' - runtime ':transmart-rest-api:16.2-SNAPSHOT' - runtime ':blend4j-plugin:16.2-SNAPSHOT' - runtime ':transmart-metacore-plugin:16.2-SNAPSHOT' - runtime ':transmart-xnat-importer:16.2-SNAPSHOT' - runtime ':xnat-viewer:16.2-SNAPSHOT' - - test ':transmart-core-db-tests:16.2-SNAPSHOT' + //compile ':transmart-java:16.2' + runtime ':dalliance-plugin:16.2' + runtime ':transmart-mydas:16.2' + runtime ':transmart-rest-api:16.2' + runtime ':blend4j-plugin:16.2' + runtime ':transmart-metacore-plugin:16.2' + runtime ':transmart-xnat-importer:16.2' + runtime ':xnat-viewer:16.2' + + test ':transmart-core-db-tests:16.2' } else { dm.internalDependencies delegate } From b66ea481f421e96edd24223eaa8ce49d18c580ac Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Tue, 13 Dec 2016 11:27:11 +0000 Subject: [PATCH 003/136] application version 16.2 --- application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application.properties b/application.properties index 716d01e84..75d77d03f 100644 --- a/application.properties +++ b/application.properties @@ -3,4 +3,4 @@ app.grails.version=2.3.11 app.name=transmart app.servlet.version=2.5 -app.version=tranSMART 16.2 CI +app.version=tranSMART 16.2 From ed40d7716892989db71b8734bab3cdf4a534eea7 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Wed, 14 Dec 2016 14:38:07 +0000 Subject: [PATCH 004/136] updated browse delete study/program with children messages --- web-app/js/rwgsearch.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web-app/js/rwgsearch.js b/web-app/js/rwgsearch.js index 935993e02..6cd529614 100644 --- a/web-app/js/rwgsearch.js +++ b/web-app/js/rwgsearch.js @@ -856,7 +856,7 @@ jQuery(document).ready(function() { var id = jQuery(this).attr('name'); var parent = jQuery(this).data('parent'); - if (confirm("Are you sure you want to delete this folder and the files and folders beneath it?")) { + if (confirm("Are you sure you want to delete this folder and the files and folders below it?")) { jQuery.ajax({ url:deleteFolderURL, data: {id: id}, @@ -905,7 +905,7 @@ jQuery(document).ready(function() { if (confirm("Are you sure you want to delete this study?")) { findChildByParent(id, function (hasChildren) { if (hasChildren) { - if (!confirm("This study contain beneath some elements it. Are you sure?")) { + if (!confirm("This study contains some elements below it. Are you sure?")) { return; } } @@ -933,7 +933,7 @@ jQuery(document).ready(function() { if (confirm("Are you sure you want to delete this program?")) { findChildByParent(id, function (hasChildren) { if (hasChildren) { - if (!confirm("This program contain beneath some elements it. Are you sure?")) { + if (!confirm("This program contains some elements below it. Are you sure?")) { return; } } @@ -1388,4 +1388,4 @@ function findChildByParent(parent, callFunc){ callFunc(hasChildred); } }); -} \ No newline at end of file +} From 39c15bb25d26495c898b818802e5f72ce437b6d2 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Wed, 14 Dec 2016 14:38:54 +0000 Subject: [PATCH 005/136] include GWAS-plink plugin --- grails-app/conf/BuildConfig.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 344c26295..c28cb86f0 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -138,6 +138,7 @@ grails.project.dependency.resolution = { compile ':rdc-rmodules:16.2' runtime ':transmart-core:16.2' compile ':transmart-gwas:16.2' + compile ':transmart-gwas-plink:16.2' //// already included in transmart-gwas //compile ':transmart-legacy-db:16.2' //// already included in transmart-gwas @@ -172,6 +173,7 @@ dm?.with { configureInternalPlugin 'runtime', 'transmart-core' configureInternalPlugin 'test', 'transmart-core-db-tests' configureInternalPlugin 'compile', 'transmart-gwas' + configureInternalPlugin 'compile', 'transmart-gwas-plink' configureInternalPlugin 'compile', 'transmart-java' configureInternalPlugin 'compile', 'biomart-domain' configureInternalPlugin 'compile', 'search-domain' From 9b481cc770cc7e089b649500f6e9aac2116d8c04 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Wed, 14 Dec 2016 15:11:34 +0000 Subject: [PATCH 006/136] simple version number --- application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application.properties b/application.properties index 75d77d03f..a313c2cc7 100644 --- a/application.properties +++ b/application.properties @@ -3,4 +3,4 @@ app.grails.version=2.3.11 app.name=transmart app.servlet.version=2.5 -app.version=tranSMART 16.2 +app.version=16.2 From fbf6ab3aef1c93c1f38e3fb3511bb5284c97c7c5 Mon Sep 17 00:00:00 2001 From: Ruslan Forostianov Date: Thu, 15 Dec 2016 21:22:35 +0100 Subject: [PATCH 007/136] Escape collision of jq versions on the qurypanel. JQuery -> $j --- web-app/js/datasetExplorer/querypanels.js | 186 +++++++++++----------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/web-app/js/datasetExplorer/querypanels.js b/web-app/js/datasetExplorer/querypanels.js index 0d812d87b..ed27f1cb9 100644 --- a/web-app/js/datasetExplorer/querypanels.js +++ b/web-app/js/datasetExplorer/querypanels.js @@ -5,7 +5,7 @@ */ function prepareQueryPanels() { - var table = jQuery("#queryTable tr:last-of-type td") + var table = $j("#queryTable tr:last-of-type td") window.queryPanelNumber = 0 for (var i = 0; i < table.size(); i++) { @@ -13,7 +13,7 @@ function prepareQueryPanels() { appendQueryPanelInto(i + 1) } - jQuery("#queryPanel").click(function () { + $j("#queryPanel").click(function () { resetSelected() }) } @@ -26,12 +26,12 @@ function prepareQueryPanels() { */ function appendQueryPanelInto(subset) { - var clone = jQuery("#panelModel").clone().removeAttr('id').each(function () { - jQuery(this).html(this.innerHTML.replace(/\$n/g, window.queryPanelNumber++)).find("input[id^='panelInclude']").attr("checked", "checked") + var clone = $j("#panelModel").clone().removeAttr('id').each(function () { + $j(this).html(this.innerHTML.replace(/\$n/g, window.queryPanelNumber++)).find("input[id^='panelInclude']").attr("checked", "checked") }).attr('subset', subset) // Subsets are inflated by 1 - jQuery(jQuery("#queryTable tr:last-of-type td")[subset - 1]).append(clone) + $j($j("#queryTable tr:last-of-type td")[subset - 1]).append(clone) setupQueryPanelClone(clone) removeUselessPanels() } @@ -48,9 +48,9 @@ function appendItemFromConceptInto(destination, concept, invert) { var _panel = null if (typeof destination == "number") - _panel = jQuery(jQuery("#queryTable tr:last-of-type td")[destination - 1]).find('div[id^=panelBoxList]').last() + _panel = $j($j("#queryTable tr:last-of-type td")[destination - 1]).find('div[id^=panelBoxList]').last() else - _panel = jQuery(destination) + _panel = $j(destination) var _invert = typeof invert !== 'undefined' ? invert : false; if (_invert) @@ -72,10 +72,10 @@ function setupQueryPanelClone(clone) { clone.find(".panelRadio").buttonset() clone.find(".panelDate").button().click(function() { - if (jQuery(this).attr('checked') == 'checked') - jQuery(this).closest(".panelBox").addClass("withDates") + if ($j(this).attr('checked') == 'checked') + $j(this).closest(".panelBox").addClass("withDates") else - jQuery(this).closest(".panelBox").removeClass("withDates") + $j(this).closest(".panelBox").removeClass("withDates") adjustPanelSize() }) @@ -92,11 +92,11 @@ function setupQueryPanelClone(clone) { var dtrg = new Ext.dd.DropTarget(exto, { ddGroup : 'makeQuery' }) dtrg.notifyEnter = function (source, e, data) { - jQuery("#" + e.target.id).parent().find(".holder").addClass('overed') + $j("#" + e.target.id).parent().find(".holder").addClass('overed') } dtrg.notifyOut = function (source, e, data) { - jQuery(".panelBoxListPlaceholder .holder").removeClass('overed') + $j(".panelBoxListPlaceholder .holder").removeClass('overed') } dtrg.notifyDrop = function (source, e, data) { @@ -138,8 +138,8 @@ function setupQueryPanelClone(clone) { */ function clearQueryPanels() { - jQuery(".panelModel").each(function (){ - clearQueryPanel(jQuery(this)) + $j(".panelModel").each(function (){ + clearQueryPanel($j(this)) }) } @@ -160,10 +160,10 @@ function clearQueryPanel(clone) */ function removeUselessPanels() { - jQuery("#queryTable tr:last-of-type td").each(function() { - jQuery("div[id^='panelBoxList']:not(:last)", this).each(function() { - if (jQuery(this).html().trim() == '') - jQuery(this).closest(".panelModel").remove() + $j("#queryTable tr:last-of-type td").each(function() { + $j("div[id^='panelBoxList']:not(:last)", this).each(function() { + if ($j(this).html().trim() == '') + $j(this).closest(".panelModel").remove() }) }) @@ -176,13 +176,13 @@ function removeUselessPanels() */ function adjustPanelSize() { - jQuery(".panelBox").each(function() { + $j(".panelBox").each(function() { - var _itemNumber = jQuery(".panelBoxListItem", jQuery(this)).size() - var _totalHeight = (_itemNumber + 0.5) * jQuery(".panelBoxListItem:first").outerHeight() + var _itemNumber = $j(".panelBoxListItem", $j(this)).size() + var _totalHeight = (_itemNumber + 0.5) * $j(".panelBoxListItem:first").outerHeight() - _totalHeight += parseInt(jQuery(".panelBoxList", jQuery(this)).css('padding-top')) - jQuery(this).css('height', _totalHeight) + _totalHeight += parseInt($j(".panelBoxList", $j(this)).css('padding-top')) + $j(this).css('height', _totalHeight) }) } @@ -199,13 +199,13 @@ function refillQueryPanels(subsets) { clearQueryPanels() // Looping through subsets - jQuery.each(subsets, function (subset, query) { + $j.each(subsets, function (subset, query) { - jQuery(query).find("panel").each(function () { + $j(query).find("panel").each(function () { //This is dangerous, but time efficient - var _panel = jQuery(this) - var _panelDOM = jQuery(".panelModel", jQuery("#queryTable tr:last-of-type td")[parseInt(subset) - 1]).last() + var _panel = $j(this) + var _panelDOM = $j(".panelModel", $j("#queryTable tr:last-of-type td")[parseInt(subset) - 1]).last() _panelDOM.find(".panelBoxListPlaceholder").hide() @@ -235,7 +235,7 @@ function refillQueryPanels(subsets) { */ function getConceptFromQueryItem(item) { - var _item = jQuery(item) + var _item = $j(item) var _concept = {} _concept["conceptid"] = _item.find("item_key").text() @@ -311,7 +311,7 @@ function getConceptFromQueryItem(item) { } }) - jQuery.each(_concept, function(key, value) { + $j.each(_concept, function(key, value) { if (_concept[key] == undefined) _concept[key] = "" }) @@ -325,7 +325,7 @@ function getConceptFromQueryItem(item) { */ function getPanelItemFromConcept(concept) { - var _item = jQuery("
    ") + var _item = $j("
    ") var _valueText = getSetValueText( concept["setvaluemode"], concept["setvalueoperator"], @@ -335,16 +335,16 @@ function getPanelItemFromConcept(concept) { concept["setvalueunits"]).trim() // We try to infer the type when possible to match the icon - jQuery.get(pageInfo.basePath + "/concepts/getResource", { concept_key: concept["conceptid"] }, function() {}, 'json') + $j.get(pageInfo.basePath + "/concepts/getResource", { concept_key: concept["conceptid"] }, function() {}, 'json') .success(function (data) { - jQuery("span:first", _item).addClass(getClassForNodeResource(data)) + $j("span:first", _item).addClass(getClassForNodeResource(data)) }) _item - .append(jQuery("").addClass("x-tree-node-icon")) - .append(jQuery("").addClass("concept-text").html(concept.conceptname + _valueText)) + .append($j("").addClass("x-tree-node-icon")) + .append($j("").addClass("concept-text").html(concept.conceptname + _valueText)) - jQuery.each(concept, function(key, value) { + $j.each(concept, function(key, value) { _item.attr(key, value) }) @@ -375,7 +375,7 @@ function getClassForNodeResource(node) { if (_OKToUseValue) _iconClass = "valueicon"; - jQuery.each(_visualAttributes, function (index, value) { + $j.each(_visualAttributes, function (index, value) { if (!_OKToUseValue && (value.toUpperCase() == "LEAF" || value.toUpperCase() == "MULTIPLE")) _iconClass = "alphaicon"; if (value.toUpperCase() == "HIGH_DIMENSIONAL") @@ -401,9 +401,9 @@ function getClassForNodeResource(node) { function getSubsetQuery (subset) { var _query = '' - jQuery(".panelModel[subset='" + subset + "']").each(function () { - if (jQuery(this).find(".panelBoxList").html().trim() != '') - _query += getQueryPanel(jQuery(this)).html() + $j(".panelModel[subset='" + subset + "']").each(function () { + if ($j(this).find(".panelBoxList").html().trim() != '') + _query += getQueryPanel($j(this)).html() }) return _query; @@ -416,17 +416,17 @@ function getSubsetQuery (subset) { */ function getQuery(subset) { - var _query = jQuery("") + var _query = $j("") _query.attr('xmlns:ns4', 'http://www.i2b2.org/xsd/cell/crc/psm/1.1/') _query - .append(jQuery("").html("0")) + .append($j("").html("0")) .append(getQueryPanels(subset)) - if (jQuery('#queryEncounter_' + subset).attr('checked') == 'checked') - _query.append(jQuery('').html('SAMEVISIT')) + if ($j('#queryEncounter_' + subset).attr('checked') == 'checked') + _query.append($j('').html('SAMEVISIT')) else - _query.append(jQuery('').html('ANY')) + _query.append($j('').html('ANY')) return _query } @@ -438,12 +438,12 @@ function getQuery(subset) { */ function getQueryPanels(subset) { - var _panels = jQuery() + var _panels = $j() - jQuery(".panelModel[subset='" + subset + "']").each(function () { + $j(".panelModel[subset='" + subset + "']").each(function () { - if (jQuery(this).find(".panelBoxList").html().trim() != '') - _panels = _panels.add(getQueryPanel(jQuery(this))) + if ($j(this).find(".panelBoxList").html().trim() != '') + _panels = _panels.add(getQueryPanel($j(this))) }) @@ -458,7 +458,7 @@ function getQueryPanels(subset) { */ function getQueryPanel(panel) { - var _panel = jQuery("") + var _panel = $j("") var _number = panel.find("div[id^='panelBoxList']").attr('id') var _invert = panel.find("input[name^=panelRadio]:checked").val() var _occurrence = 1 @@ -466,9 +466,9 @@ function getQueryPanel(panel) { _number = _number ? _number.substring(_number.indexOf('_') + 1) : new Date().getTime() _invert = _invert != undefined ? _invert : 0 _panel - .append(jQuery("").html(_number)) - .append(jQuery("").html(_invert)) - .append(jQuery("").html(_occurrence)) + .append($j("").html(_number)) + .append($j("").html(_invert)) + .append($j("").html(_occurrence)) .append(getQueryPanelItems(panel)) if (panel.find(".panelDate").attr('checked') == 'checked') { @@ -480,15 +480,15 @@ function getQueryPanel(panel) { _offset = 'T00:00:00.000' + _offset.slice(0, 3) + ':' +_offset.slice(3) if (_from != '') - _panel.append(jQuery("").html(_from + _offset)) + _panel.append($j("").html(_from + _offset)) if (_to != '') - _panel.append(jQuery("").html(_to + _offset)) + _panel.append($j("").html(_to + _offset)) } - if (jQuery('#queryEncounter_' + panel.attr('subset')).attr('checked') == 'checked') - _panel.append(jQuery('').html('SAMEVISIT')) + if ($j('#queryEncounter_' + panel.attr('subset')).attr('checked') == 'checked') + _panel.append($j('').html('SAMEVISIT')) else - _panel.append(jQuery('').html('ANY')) + _panel.append($j('').html('ANY')) return _panel } @@ -501,11 +501,11 @@ function getQueryPanel(panel) { function getQueryPanelItems(panel) { - var _items = jQuery() + var _items = $j() - jQuery(".panelBoxListItem", panel).each(function () { + $j(".panelBoxListItem", panel).each(function () { - _items = _items.add(getQueryPanelItem(jQuery(this))) + _items = _items.add(getQueryPanelItem($j(this))) }) @@ -519,8 +519,8 @@ function getQueryPanelItems(panel) { */ function getQueryPanelItem(item) { - var _item = jQuery("") - var _constrainValue = jQuery('') + var _item = $j("") + var _constrainValue = $j('') var _value = '' switch (item.attr('setvaluemode').toLowerCase()) { @@ -531,63 +531,63 @@ function getQueryPanelItem(item) { _value += ' AND ' + item.attr('setvaluehighvalue') _constrainValue - .append(jQuery("").html(item.attr('setvalueoperator'))) - .append(jQuery("").html(_value)) - .append(jQuery("").html(item.attr('setvalueunits'))) - .append(jQuery("").html("NUMBER")) + .append($j("").html(item.attr('setvalueoperator'))) + .append($j("").html(_value)) + .append($j("").html(item.attr('setvalueunits'))) + .append($j("").html("NUMBER")) break; case 'highlow' : _constrainValue - .append(jQuery("").html("EQ")) - .append(jQuery("").html(item.attr('setvaluehighlowselect').substring(0, 1).toUpperCase())) - .append(jQuery("").html(item.attr('setvalueunits'))) - .append(jQuery("").html("FLAG")) + .append($j("").html("EQ")) + .append($j("").html(item.attr('setvaluehighlowselect').substring(0, 1).toUpperCase())) + .append($j("").html(item.attr('setvalueunits'))) + .append($j("").html("FLAG")) break; case 'text' : _constrainValue - .append(jQuery("").html('LIKE[' + item.attr('setvalueoperator') + ']')) - .append(jQuery("").html('')) - .append(jQuery("").html("TEXT")) + .append($j("").html('LIKE[' + item.attr('setvalueoperator') + ']')) + .append($j("").html('')) + .append($j("").html("TEXT")) break; case 'list' : _constrainValue - .append(jQuery("").html("IN")) - .append(jQuery("").html(item.attr('***'))) - .append(jQuery("").html("TEXT")) + .append($j("").html("IN")) + .append($j("").html(item.attr('***'))) + .append($j("").html("TEXT")) break; case 'omics_value' : - _constrainValue = jQuery("") + _constrainValue = $j("") _constrainValue - .append(jQuery("").html(item.attr('omicsoperator'))) - .append(jQuery("").html(item.attr('omicsvalue'))) - .append(jQuery("").html(item.attr('omicsvaluetype'))) - .append(jQuery("").html(item.attr('omicsproperty'))) - .append(jQuery("").html(item.attr('omicsselector'))) - .append(jQuery("").html(item.attr('omicsprojection'))) + .append($j("").html(item.attr('omicsoperator'))) + .append($j("").html(item.attr('omicsvalue'))) + .append($j("").html(item.attr('omicsvaluetype'))) + .append($j("").html(item.attr('omicsproperty'))) + .append($j("").html(item.attr('omicsselector'))) + .append($j("").html(item.attr('omicsprojection'))) } _item - .append(jQuery("").html(item.attr('conceptname').legacyI2B2Escape())) - .append(jQuery("").html(item.attr('conceptid').legacyI2B2Escape())) - .append(jQuery("").html(item.attr('concepttooltip').legacyI2B2Escape())) - .append(jQuery("").html(item.attr('conceptlevel'))) - .append(jQuery("").html("ENC")) + .append($j("").html(item.attr('conceptname').legacyI2B2Escape())) + .append($j("").html(item.attr('conceptid').legacyI2B2Escape())) + .append($j("").html(item.attr('concepttooltip').legacyI2B2Escape())) + .append($j("").html(item.attr('conceptlevel'))) + .append($j("").html("ENC")) if (item.attr('ismodifier')) { - var _constrainModifier = jQuery('') + var _constrainModifier = $j('') _constrainModifier - .append(jQuery("").html(item.attr('conceptname'))) - .append(jQuery("").html(item.attr('applied_path'))) - .append(jQuery("").html(item.attr('conceptid'))) + .append($j("").html(item.attr('conceptname'))) + .append($j("").html(item.attr('applied_path'))) + .append($j("").html(item.attr('conceptid'))) if (_constrainValue.html().length) _constrainModifier.append(_constrainValue) @@ -611,7 +611,7 @@ function getSubsetQuerySummary(subset) { _panels.each(function() { - var _e = jQuery(this) + var _e = $j(this) var _item = "" if (_summary.trim() != '') From 872abace4127f23af8d22787e53ad7fb3906b3f9 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Thu, 22 Dec 2016 10:58:25 +0000 Subject: [PATCH 008/136] Fix TRANSREL-153: ignore empty string variable values --- .../transmart/asynchronous/job/AsyncJobController.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy b/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy index dd2e41fa6..bff682bff 100644 --- a/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy +++ b/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy @@ -181,19 +181,19 @@ class AsyncJobController { // for concept paths we have to make sure they start with \\top node // note the string is escaped so we are adding a double backslash at the start - if (params.independentVariable != null) { + if (params.independentVariable != null && params.independentVariable != "") { concept_key = params.independentVariable.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) } - if (params.dependentVariable != null) { + if (params.dependentVariable != null && params.dependentVariable != "") { concept_key = params.dependentVariable.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) } - if (params.variablesConceptPaths != null) { + if (params.variablesConceptPaths != null && params.variablesConceptPaths != "") { concept_key = params.variablesConceptPaths.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) From d8533e67ce1f7c3e6a493a882481b5b650f2a4c7 Mon Sep 17 00:00:00 2001 From: Sascha Herzinger Date: Mon, 2 Jan 2017 08:54:59 +0100 Subject: [PATCH 009/136] updated SmartR version --- grails-app/conf/BuildConfig.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index f301f5850..b030ed7cd 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -135,7 +135,7 @@ grails.project.dependency.resolution = { compile ":codenarc:0.21" if (!dm) { - runtime ':smart-r:1.0-STABLE-SNAPSHOT' + runtime ':smart-r:16.2-SNAPSHOT' compile ':rdc-rmodules:16.2-SNAPSHOT' runtime ':transmart-core:16.2-SNAPSHOT' compile ':transmart-gwas:16.2-SNAPSHOT' From 48fe62ac5b51ba747ae15dabe66efa0049a57ba8 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Tue, 3 Jan 2017 15:50:15 +0000 Subject: [PATCH 010/136] use standard email contact for uploadData --- grails-app/views/uploadData/uploadData.gsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grails-app/views/uploadData/uploadData.gsp b/grails-app/views/uploadData/uploadData.gsp index d533a3a8a..1c0fdbf10 100644 --- a/grails-app/views/uploadData/uploadData.gsp +++ b/grails-app/views/uploadData/uploadData.gsp @@ -80,7 +80,7 @@ var buildVer = 'Build Version: -
    - Email administrator + Email administrator  
    If you are unable to locate the relevant study, email the administrator by clicking the button above.
    @@ -200,7 +200,7 @@ var buildVer = 'Build Version: - Upload Data
    - Email administrator + Email administrator  
    If you are unable to locate the relevant autocomplete fields, email the administrator by clicking the button above.
    From 03c0a770da84049149cc25f074a641d90c8497c9 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Tue, 3 Jan 2017 15:56:13 +0000 Subject: [PATCH 011/136] unique name for activateTab in datasetExplorer --- web-app/js/datasetExplorer/datasetExplorer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web-app/js/datasetExplorer/datasetExplorer.js b/web-app/js/datasetExplorer/datasetExplorer.js index 31dda7e46..8daeb5534 100644 --- a/web-app/js/datasetExplorer/datasetExplorer.js +++ b/web-app/js/datasetExplorer/datasetExplorer.js @@ -406,7 +406,7 @@ Ext.onReady(function () { activate: function (p) { if (isSubsetQueriesChanged(p.subsetQueries) || !Ext.get('analysisGridPanel')) { runAllQueries(getSummaryGridData, p); - activateTab(); + activateTabResults(); onWindowResize(); } else { getSummaryGridData(); @@ -437,7 +437,7 @@ Ext.onReady(function () { if (isSubsetQueriesChanged(p.subsetQueries) || !Ext.get('analysis_title')) { p.body.mask("Loading...", 'x-mask-loading'); runAllQueries(getSummaryStatistics, p); - activateTab(); + activateTabResults(); onWindowResize(); } }, @@ -532,7 +532,7 @@ Ext.onReady(function () { * @private */ var _activateAdvancedWorkflow = function () { - activateTab(); + activateTabResults(); GLOBAL.Analysis="dataAssociation"; renderCohortSummary(); onWindowResize(); @@ -2870,7 +2870,7 @@ function getExportButtonSecurityComplete(result) { } } -function activateTab(tab) { +function activateTabResults(tab) { resultsTabPanel.tools.help.dom.style.display = "none"; } From b134ab865b91bbad596e80e19ad4eee1257aac2d Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Tue, 3 Jan 2017 17:27:16 +0000 Subject: [PATCH 012/136] browserDetect script in case of future version issues --- web-app/js/browserDetect.js | 139 ++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 web-app/js/browserDetect.js diff --git a/web-app/js/browserDetect.js b/web-app/js/browserDetect.js new file mode 100644 index 000000000..e3cceb95a --- /dev/null +++ b/web-app/js/browserDetect.js @@ -0,0 +1,139 @@ +/************************************************************************* + * tranSMART - translational medicine data mart + * + * Copyright 2008-2012 Janssen Research & Development, LLC. + * + * This product includes software developed at Janssen Research & Development, LLC. + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License + * as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later version, along with the following terms: + * 1. You may convey a work based on this program in accordance with section 5, provided that you retain the above notices. + * 2. You may convey verbatim copies of this program code as you receive it, in any medium, provided that you retain the above notices. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * + ******************************************************************/ + + +var BrowserDetect = { + // Code to detect whether IE 6 or IE 7 are being used (and thus, + // whether we need to display static heatmap images). Code is + // from http://www.quirksmode.org/js/detect.html + init: function () { + this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; + this.version = this.searchVersion(navigator.userAgent) + || this.searchVersion(navigator.appVersion) + || "an unknown version"; + this.OS = this.searchString(this.dataOS) || "an unknown OS"; + }, + searchString: function (data) { + for (var i=0;i Date: Wed, 4 Jan 2017 10:22:36 +0100 Subject: [PATCH 013/136] Update BuildConfig.groovy --- grails-app/conf/BuildConfig.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index b030ed7cd..f79e5649d 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -135,7 +135,7 @@ grails.project.dependency.resolution = { compile ":codenarc:0.21" if (!dm) { - runtime ':smart-r:16.2-SNAPSHOT' + runtime ':smart-r:1.1-STABLE-SNAPSHOT' compile ':rdc-rmodules:16.2-SNAPSHOT' runtime ':transmart-core:16.2-SNAPSHOT' compile ':transmart-gwas:16.2-SNAPSHOT' From e1645c3116f149247429b43960b9a61c23ab7e4d Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Mon, 23 Jan 2017 13:16:08 +0000 Subject: [PATCH 014/136] rename activateTab to be unique --- web-app/js/datasetExplorer/datasetExplorer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web-app/js/datasetExplorer/datasetExplorer.js b/web-app/js/datasetExplorer/datasetExplorer.js index 31dda7e46..8daeb5534 100644 --- a/web-app/js/datasetExplorer/datasetExplorer.js +++ b/web-app/js/datasetExplorer/datasetExplorer.js @@ -406,7 +406,7 @@ Ext.onReady(function () { activate: function (p) { if (isSubsetQueriesChanged(p.subsetQueries) || !Ext.get('analysisGridPanel')) { runAllQueries(getSummaryGridData, p); - activateTab(); + activateTabResults(); onWindowResize(); } else { getSummaryGridData(); @@ -437,7 +437,7 @@ Ext.onReady(function () { if (isSubsetQueriesChanged(p.subsetQueries) || !Ext.get('analysis_title')) { p.body.mask("Loading...", 'x-mask-loading'); runAllQueries(getSummaryStatistics, p); - activateTab(); + activateTabResults(); onWindowResize(); } }, @@ -532,7 +532,7 @@ Ext.onReady(function () { * @private */ var _activateAdvancedWorkflow = function () { - activateTab(); + activateTabResults(); GLOBAL.Analysis="dataAssociation"; renderCohortSummary(); onWindowResize(); @@ -2870,7 +2870,7 @@ function getExportButtonSecurityComplete(result) { } } -function activateTab(tab) { +function activateTabResults(tab) { resultsTabPanel.tools.help.dom.style.display = "none"; } From 37359c70d305a0bf787d3e520c8347504bb1b2ff Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Mon, 23 Jan 2017 13:18:08 +0000 Subject: [PATCH 015/136] Catch null and empty variable params --- .../transmart/asynchronous/job/AsyncJobController.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy b/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy index dd2e41fa6..bff682bff 100644 --- a/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy +++ b/grails-app/controllers/com/recomdata/transmart/asynchronous/job/AsyncJobController.groovy @@ -181,19 +181,19 @@ class AsyncJobController { // for concept paths we have to make sure they start with \\top node // note the string is escaped so we are adding a double backslash at the start - if (params.independentVariable != null) { + if (params.independentVariable != null && params.independentVariable != "") { concept_key = params.independentVariable.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) } - if (params.dependentVariable != null) { + if (params.dependentVariable != null && params.dependentVariable != "") { concept_key = params.dependentVariable.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) } - if (params.variablesConceptPaths != null) { + if (params.variablesConceptPaths != null && params.variablesConceptPaths != "") { concept_key = params.variablesConceptPaths.split("\\|")[0] concept_table = concept_key.split("\\\\")[1] studyIds += studyIdService.getStudyIdForConceptKey('\\\\' + concept_table + concept_key) From f9b2cb1ab45a25386830a7332d609ef0428c5f5c Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Mon, 23 Jan 2017 13:21:15 +0000 Subject: [PATCH 016/136] browser version detect code in case of need --- web-app/js/browserDetect.js | 139 ++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 web-app/js/browserDetect.js diff --git a/web-app/js/browserDetect.js b/web-app/js/browserDetect.js new file mode 100644 index 000000000..e3cceb95a --- /dev/null +++ b/web-app/js/browserDetect.js @@ -0,0 +1,139 @@ +/************************************************************************* + * tranSMART - translational medicine data mart + * + * Copyright 2008-2012 Janssen Research & Development, LLC. + * + * This product includes software developed at Janssen Research & Development, LLC. + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License + * as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later version, along with the following terms: + * 1. You may convey a work based on this program in accordance with section 5, provided that you retain the above notices. + * 2. You may convey verbatim copies of this program code as you receive it, in any medium, provided that you retain the above notices. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * + ******************************************************************/ + + +var BrowserDetect = { + // Code to detect whether IE 6 or IE 7 are being used (and thus, + // whether we need to display static heatmap images). Code is + // from http://www.quirksmode.org/js/detect.html + init: function () { + this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; + this.version = this.searchVersion(navigator.userAgent) + || this.searchVersion(navigator.appVersion) + || "an unknown version"; + this.OS = this.searchString(this.dataOS) || "an unknown OS"; + }, + searchString: function (data) { + for (var i=0;i Date: Thu, 2 Feb 2017 20:56:47 +0100 Subject: [PATCH 017/136] Fixed restore comparison from workspace, for clinical and highdimensional concepts. --- web-app/js/datasetExplorer/omicsFilter.js | 4 ++- web-app/js/datasetExplorer/querypanels.js | 43 ++++++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/web-app/js/datasetExplorer/omicsFilter.js b/web-app/js/datasetExplorer/omicsFilter.js index 38437cdce..3ccf793a3 100644 --- a/web-app/js/datasetExplorer/omicsFilter.js +++ b/web-app/js/datasetExplorer/omicsFilter.js @@ -92,6 +92,8 @@ function repopulateFilterWindow() { jQuery("#highdimension-filter-selector").val(omicsFilterRepopulateWindow.omicsselector.nodeValue); jQuery("#highdimension-filter-projection").val(omicsFilterRepopulateWindow.omicsprojection.nodeValue); + omicsAutoCompleteList = [omicsFilterRepopulateWindow.omicsselector.nodeValue]; + showConceptDistributionHistogramForOmicsFilterComplete(null); showConceptDistributionHistogramForOmicsFilter(getOmicsFilterParams()); } @@ -104,8 +106,8 @@ function repopulateOmicsFilterRange() { var maxbox = jQuery("#highdimension-amount-max"); var values = omicsFilterRepopulateWindow.omicsvalue.nodeValue.split(":"); minbox.val(values[0]); - minbox.blur(); maxbox.val(values[1]); + minbox.blur(); maxbox.blur(); } } diff --git a/web-app/js/datasetExplorer/querypanels.js b/web-app/js/datasetExplorer/querypanels.js index 0d812d87b..e055159ca 100644 --- a/web-app/js/datasetExplorer/querypanels.js +++ b/web-app/js/datasetExplorer/querypanels.js @@ -213,7 +213,11 @@ function refillQueryPanels(subsets) { if (_inversion) _panelDOM.find("input[id^=panelExclude]").attr("checked", "checked") - _panelDOM.find(".panelRadio").buttonset("refresh") + var panelRadio = _panelDOM.find(".panelRadio"); + if (panelRadio.data("buttonset") == null) { + panelRadio.buttonset(); + } + panelRadio.buttonset("refresh") _panel.find("item").each(function () { _panelDOM.find(".panelBoxList").append(getPanelItemFromConcept(getConceptFromQueryItem(this))) @@ -269,6 +273,17 @@ function getConceptFromQueryItem(item) { _concept["conceptid"] = _item.find("modifier_key").text() }) + _item.find("constrain_by_omics_value").each(function() { + _concept["setvaluemode"] = "omics_value"; + _concept["oktousevalues"] = "H"; + _concept["omicsproperty"] = _item.find("omics_property").text(); + _concept["omicsselector"] = _item.find("omics_selector").text(); + _concept["omicsoperator"] = _item.find("omics_value_operator").text(); + _concept["omicsvalue"] = _item.find("omics_value_constraint").text(); + _concept["omicsprojection"] = _item.find("omics_projection_type").text(); + _concept["omicsvaluetype"] = _item.find("omics_value_type").text(); + }) + _item.find("constrain_by_value").each(function () { switch (_item.find("value_type").text().toLowerCase()) { case 'number' : @@ -326,13 +341,25 @@ function getConceptFromQueryItem(item) { function getPanelItemFromConcept(concept) { var _item = jQuery("
    ") - var _valueText = getSetValueText( - concept["setvaluemode"], - concept["setvalueoperator"], - concept["setvaluehighlowselect"], - concept["setvaluehighvalue"], - concept["setvaluelowvalue"], - concept["setvalueunits"]).trim() + var _valueText = ""; + if (concept["setvaluemode"] == "omics_value") { + var valueparams = {}; + valueparams["operator"] = concept["omicsoperator"]; + valueparams["type"] = concept["omicsvaluetype"]; + valueparams["value"] = concept["omicsvalue"]; + valueparams["selector"] = concept["omicsselector"]; + valueparams["projection_pretty_name"] = concept["omicsprojection"]; + _valueText = getOmicsFilterValueText(valueparams); + } + else { + _valueText = getSetValueText( + concept["setvaluemode"], + concept["setvalueoperator"], + concept["setvaluehighlowselect"], + concept["setvaluehighvalue"], + concept["setvaluelowvalue"], + concept["setvalueunits"]).trim() + } // We try to infer the type when possible to match the icon jQuery.get(pageInfo.basePath + "/concepts/getResource", { concept_key: concept["conceptid"] }, function() {}, 'json') From 2eed6775a39176d07eb185a4a4ea8987d0444137 Mon Sep 17 00:00:00 2001 From: Anthony O Date: Wed, 1 Feb 2017 16:10:07 +0100 Subject: [PATCH 018/136] Fixing an issue linked with SmartR importation of another version of jQuery: after a click on "Advanced Workflow", we could no more use the "Clear" button of "Active Filters", nor click on the result of an auto-completing search in the top left search text box. --- web-app/js/rwgsearch.js | 563 ++++++++++++++++++++-------------------- 1 file changed, 283 insertions(+), 280 deletions(-) diff --git a/web-app/js/rwgsearch.js b/web-app/js/rwgsearch.js index ae0f1e489..200a2b2da 100644 --- a/web-app/js/rwgsearch.js +++ b/web-app/js/rwgsearch.js @@ -15,74 +15,77 @@ var nodesBeforeSelect = new Array(); // will still fire but is stopped immediately); and set this flag back to true at the end of the event so it can be triggered again. var allowOnSelectEvent = true; var uploader; + +var $j = jQuery.noConflict(); + // Method to add the categories for the select box function addSelectCategories() { if (sessionSearchCategory == "") { sessionSearchCategory = "ALL"; } - jQuery("#search-categories").append(jQuery("").attr("value", "ALL").text("All").attr('id', 'allCategory')); + $j("#search-categories").append($j("").attr("value", "ALL").text("All").attr('id', 'allCategory')); - jQuery("#search-categories").change(function() { - jQuery('#search-ac').autocomplete('option', 'source', sourceURL + "?category=" + this.options[this.selectedIndex].value); - jQuery.ajax({ + $j("#search-categories").change(function() { + $j('#search-ac').autocomplete('option', 'source', sourceURL + "?category=" + this.options[this.selectedIndex].value); + $j.ajax({ url:updateSearchCategoryURL, - data: {id: jQuery("#search-categories").val()} + data: {id: $j("#search-categories").val()} }); }); - jQuery.getJSON(getCategoriesURL, function(json) { + $j.getJSON(getCategoriesURL, function(json) { for (var i=0; i").attr("value", category).text(catText)); + $j("#search-categories").append($j("").attr("value", category).text(catText)); } - jQuery("#search-categories").html(jQuery("option", jQuery("#search-categories")).sort(function(a, b) { + $j("#search-categories").html($j("option", $j("#search-categories")).sort(function(a, b) { return a.text == b.text ? 0 : a.text < b.text ? -1 : 1; })); - jQuery("#allCategory").after(jQuery("").attr("value", "text").text("Free Text")); + $j("#allCategory").after($j("").attr("value", "text").text("Free Text")); - jQuery("#search-categories").val(sessionSearchCategory); - jQuery('#search-ac').autocomplete('option', 'source', sourceURL + "?category=" + jQuery('#search-categories').val()); + $j("#search-categories").val(sessionSearchCategory); + $j('#search-ac').autocomplete('option', 'source', sourceURL + "?category=" + $j('#search-categories').val()); }); } function addFilterCategories() { - jQuery.getJSON(getFilterCategoriesURL, function(json) { + $j.getJSON(getFilterCategoriesURL, function(json) { for (var i=0; i
    ").addClass("filtertitle").attr("name", category.category).text(category.displayName); - var contentDiv = jQuery("
    ").addClass("filtercontent").attr("name", category.category).attr("style", "display: none"); + var titleDiv = $j("
    ").addClass("filtertitle").attr("name", category.category).text(category.displayName); + var contentDiv = $j("
    ").addClass("filtercontent").attr("name", category.category).attr("style", "display: none"); for (var j=0; j < choices.length; j++) { var choice = choices[j]; - var newItem = jQuery("
    ").addClass("filteritem").attr("name", category.category).attr("id", choice.uid).text(choice.name); + var newItem = $j("
    ").addClass("filteritem").attr("name", category.category).attr("id", choice.uid).text(choice.name); //If this has been selected, highlight it var idString = '[id="' + category.displayName + "|" + category.category + ";" + choice.name + ";" + choice.uid + '"]'; idString = idString.replace(/,/g, "%44").replace(/&/g, "%26"); //Replace commas and ampersands - var element = jQuery(idString); + var element = $j(idString); if (element.size() > 0) { newItem.addClass("selected"); } contentDiv.append(newItem); } - jQuery("#filter-browser").append(titleDiv); - jQuery("#filter-browser").append(contentDiv); + $j("#filter-browser").append(titleDiv); + $j("#filter-browser").append(contentDiv); } - jQuery("#filter-browser").removeClass("ajaxloading"); + $j("#filter-browser").removeClass("ajaxloading"); }); } //Method to add the autocomplete for the search keywords function addSearchAutoComplete() { - jQuery("#search-ac").autocomplete({ + $j("#search-ac").autocomplete({ position:{my:"left top",at:"left bottom",collision:"none"}, source: sourceURL, minLength:1, @@ -91,9 +94,9 @@ function addSearchAutoComplete() { searchParam={id:ui.item.id,display:ui.item.category,keyword:ui.item.label,category:ui.item.categoryId}; addSearchTerm(searchParam); } - + //If category is ALL, add this as free text as well - var category = jQuery("#search-categories").val(); + var category = $j("#search-categories").val(); return false; } }).data("ui-autocomplete")._renderItem = function( ul, item ) { @@ -105,28 +108,28 @@ function addSearchAutoComplete() { resulta += ''; } - return jQuery('
  • ') + return $j('
  • ') .data("item.autocomplete", item ) .append(resulta) .appendTo(ul); }; // Capture the enter key on the slider and fire off the search event on the autocomplete - jQuery("#search-categories").keypress(function(event) { + $j("#search-categories").keypress(function(event) { if (event.which == 13) { - jQuery("#search-ac").autocomplete('search'); + $j("#search-ac").autocomplete('search'); } }); - jQuery('#search-ac').keypress(function(event) { - var category = jQuery("#search-categories").val(); - var categoryText = jQuery('#search-categories option:selected').text(); + $j('#search-ac').keypress(function(event) { + var category = $j("#search-categories").val(); + var categoryText = $j('#search-categories option:selected').text(); if (event.which == 13 && (category == 'DATANODE' || category == 'text' || category == 'ALL')) { - var val = jQuery('#search-ac').val(); + var val = $j('#search-ac').val(); if (category == 'ALL') {category = 'text'; categoryText = 'Free Text';} searchParam={id:val,display:categoryText,keyword:val,category:category}; addSearchTerm(searchParam); - jQuery('#search-ac').empty(); + $j('#search-ac').empty(); return false; } }); @@ -165,13 +168,13 @@ function addSearchTerm(searchTerm, noUpdate, openInAnalyze,datasetExplorerPath) } // clear the search text box - jQuery("#search-ac").val(""); + $j("#search-ac").val(""); // only refresh results if the tree was not updated (the onSelect also fires these event, so don't want to do 2x) if (!noUpdate) { if(!openInAnalyze){ - jQuery.ajax({ + $j.ajax({ url:resetNodesRwgURL }); showSearchTemplate(); @@ -191,7 +194,7 @@ function showSearchTemplate() { var geneTerms = 0; var globalLogicOperator = "AND"; - if (jQuery('#globaloperator').hasClass("or")) { globalLogicOperator = "OR"; } + if ($j('#globaloperator').hasClass("or")) { globalLogicOperator = "OR"; } // iterate through categories array and move all the "gene" categories together at the top var newCategories = new Array(); @@ -304,9 +307,9 @@ function showSearchResults(openInAnalyze, datasetExplorerPath) { analysisProbeIds = new Array(); // clear stored analysis results - jQuery('body').removeData(); + $j('body').removeData(); - jQuery('#results-div').empty(); + $j('#results-div').empty(); // call method which retrieves facet counts and search results showFacetResults(openInAnalyze, datasetExplorerPath); @@ -322,7 +325,7 @@ function showFacetResults(openInAnalyze, datasetExplorerPath) { openInAnalyze = false; } var globalLogicOperator = "AND"; - if (jQuery('#globaloperator').hasClass("or")) { globalLogicOperator = "OR" } + if ($j('#globaloperator').hasClass("or")) { globalLogicOperator = "OR" } var savedSearchTermsArray; var savedSearchTerms; @@ -383,7 +386,7 @@ function showFacetResults(openInAnalyze, datasetExplorerPath) { facetSearch.push(queryType + "=" + categories[i] + ":" + encodeURIComponent(terms[i]) + "::" + operators[i]); } - jQuery("#results-div").addClass('ajaxloading').empty(); + $j("#results-div").addClass('ajaxloading').empty(); var queryString = facetSearch.join("&"); @@ -400,11 +403,11 @@ function showFacetResults(openInAnalyze, datasetExplorerPath) { if(!openInAnalyze){ if (searchPage == 'RWG') { - jQuery.ajax({ + $j.ajax({ url:facetResultsURL, data: queryString + "&page=RWG", success: function(response) { - jQuery('#results-div').removeClass('ajaxloading').html(response); + $j('#results-div').removeClass('ajaxloading').html(response); checkSearchLog(); updateAnalysisData(null, false); displayResultsNumber(); @@ -418,12 +421,12 @@ function showFacetResults(openInAnalyze, datasetExplorerPath) { //If there are no search terms, pass responsibility on to getCategories - if not, do our custom search if (savedSearchTermsArray.length == 0) { //Need to silently clear the search map here as well - jQuery.ajax({url:clearSearchFilterURL}); + $j.ajax({url:clearSearchFilterURL}); GLOBAL.PathToExpand = ''; getCategories(); } else { - jQuery.ajax({ + $j.ajax({ url:facetResultsURL, data: queryString + "&page=datasetExplorer", success: function(response) { @@ -437,7 +440,7 @@ function showFacetResults(openInAnalyze, datasetExplorerPath) { } } }else{ - jQuery.ajax({ + $j.ajax({ url:saveSearchURL, data: queryString + "&page=RWG", success: function(response) { @@ -477,7 +480,7 @@ function getSearchKeywordList() { //Remove the search term that the user has clicked. function removeSearchTerm(ctrl) { - jQuery.ajax({ + $j.ajax({ url:resetNodesRwgURL }); var currentSearchTermID = ctrl.id.replace(/\%20/g, " ").replace(/\%44/g, ",").replace(/\%26/g, "&"); @@ -493,7 +496,7 @@ function removeSearchTerm(ctrl) { } // Call back to the server to clear the search filter (session scope) - jQuery.ajax({ + $j.ajax({ type:"POST", url:newSearchURL }); @@ -515,14 +518,14 @@ function removeSearchTerm(ctrl) { //Clear the tree, results along with emptying the two arrays that store categories and search terms. function clearSearch() { goWelcome(); - jQuery.ajax({ + $j.ajax({ url:resetNodesRwgURL }); openAnalyses = []; //all analyses will be closed, so clear this array - jQuery("#search-ac").val(""); + $j("#search-ac").val(""); currentSearchTerms = new Array(); currentCategories = new Array(); @@ -530,7 +533,7 @@ function clearSearch() { // Change the category picker back to ALL and set autocomplete to not have a category (ALL by default) document.getElementById("search-categories").selectedIndex = 0; - jQuery('#search-ac').autocomplete('option', 'source', sourceURL); + $j('#search-ac').autocomplete('option', 'source', sourceURL); showSearchTemplate(); showSearchResults(); //reload the full search results @@ -579,17 +582,17 @@ function clearCategoryIfNoTerms(category) { function unselectFilterItem(id) { //Longhand as may contain : characters - jQuery("[id='" + id + "']").removeClass('selected'); + $j("[id='" + id + "']").removeClass('selected'); } // --- function toggleSidebar() { - element = jQuery('#sidebar')[0] || jQuery('#westPanel')[0]; + element = $j('#sidebar')[0] || $j('#westPanel')[0]; element = '#' + element.id; - var leftPointingArrow = (jQuery('#sidebartoggle').css('background-image').indexOf("-right") < 0); - var sidebarIsVisible = (jQuery(element + ':visible').size() > 0); + var leftPointingArrow = ($j('#sidebartoggle').css('background-image').indexOf("-right") < 0); + var sidebarIsVisible = ($j(element + ':visible').size() > 0); //console.log("toggleSidebar: leftPointingArrow = " + leftPointingArrow + ", sidebarIsVisible = " + sidebarIsVisible); // This fixes problems with ExtJS in case of rapid consecutive clicks, double-click. JIRA TRANSREL-18. @@ -615,38 +618,38 @@ function toggleSidebar() { } }; if (sidebarIsVisible) { - jQuery(element).fadeOut(500, func); - var bgimg = jQuery('#sidebartoggle').css('background-image').replace('-left', '-right'); - jQuery('#sidebartoggle').css('background-image', bgimg); + $j(element).fadeOut(500, func); + var bgimg = $j('#sidebartoggle').css('background-image').replace('-left', '-right'); + $j('#sidebartoggle').css('background-image', bgimg); } else { - jQuery(element).fadeIn(); + $j(element).fadeIn(); if (func) func(); //Not a callback here - resize as soon as it starts appearing. - var bgimg = jQuery('#sidebartoggle').css('background-image').replace('-right', '-left'); - jQuery('#sidebartoggle').css('background-image', bgimg); + var bgimg = $j('#sidebartoggle').css('background-image').replace('-right', '-left'); + $j('#sidebartoggle').css('background-image', bgimg); } } -jQuery(document).ready(function() { - jQuery('#sidebartoggle').click(function() { +$j(document).ready(function() { + $j('#sidebartoggle').click(function() { toggleSidebar(); }); - jQuery('#filter-browser').on('click', '.filtertitle', function () { - jQuery('.filtercontent[name="' + jQuery(this).attr('name') + '"]').toggle('fast'); + $j('#filter-browser').on('click', '.filtertitle', function () { + $j('.filtercontent[name="' + $j(this).attr('name') + '"]').toggle('fast'); }); - jQuery('#filter-browser').on('click', '.filteritem', function () { - var selecting = !jQuery(this).hasClass('selected'); - jQuery(this).toggleClass('selected'); + $j('#filter-browser').on('click', '.filteritem', function () { + var selecting = !$j(this).hasClass('selected'); + $j(this).toggleClass('selected'); - var name = jQuery(this).attr('name'); - var id = jQuery(this).attr('id'); - var category = jQuery('.filtertitle[name="' + name + '"]').text(); - var value = jQuery(this).text(); + var name = $j(this).attr('name'); + var id = $j(this).attr('id'); + var category = $j('.filtertitle[name="' + name + '"]').text(); + var value = $j(this).text(); //If selecting this filter, add it to the list of current filters if (selecting) { @@ -660,70 +663,70 @@ jQuery(document).ready(function() { else { var idString = '[id="' + category + "|" + name + ";" + value + ";" + id + '"]'; idString = idString.replace(/,/g, "%44").replace(/&/g, "%26"); //Replace special characters! - var element = jQuery(idString); + var element = $j(idString); removeSearchTerm(element[0]); } }); - jQuery('body').on('mouseenter', '.folderheader', function() { - jQuery(this).find('.foldericonwrapper').fadeIn(150); + $j('body').on('mouseenter', '.folderheader', function() { + $j(this).find('.foldericonwrapper').fadeIn(150); }); - jQuery('body').on('mouseleave', '.folderheader', function() { - jQuery(this).find('.foldericonwrapper').fadeOut(150); + $j('body').on('mouseleave', '.folderheader', function() { + $j(this).find('.foldericonwrapper').fadeOut(150); }); - jQuery('body').on('click', '.foldericon.addcart', function() { - var id = jQuery(this).attr('name'); - jQuery(this).removeClass("foldericon").removeClass("addcart").removeClass("link").text("Added to cart"); - jQuery('#cartcount').hide(); + $j('body').on('click', '.foldericon.addcart', function() { + var id = $j(this).attr('name'); + $j(this).removeClass("foldericon").removeClass("addcart").removeClass("link").text("Added to cart"); + $j('#cartcount').hide(); - jQuery.ajax({ + $j.ajax({ url:exportAddURL, data: {id: id}, success: function(response) { - jQuery('#cartcount').show().text(response); + $j('#cartcount').show().text(response); }, error: function(xhr) { - jQuery('#cartcount').show(); + $j('#cartcount').show(); } }); }); - jQuery('body').on('click', '.foldericon.addall', function() { - var nameelements = jQuery(this).closest('table').find('.foldericon.addcart'); + $j('body').on('click', '.foldericon.addall', function() { + var nameelements = $j(this).closest('table').find('.foldericon.addcart'); var ids = []; for (i = 0; i < nameelements.size(); i++) { - ids.push(jQuery(nameelements[i]).attr('name')); - jQuery(nameelements[i]).removeClass("foldericon").removeClass("addcart").removeClass("link").text("Added to cart"); + ids.push($j(nameelements[i]).attr('name')); + $j(nameelements[i]).removeClass("foldericon").removeClass("addcart").removeClass("link").text("Added to cart"); } - jQuery('#cartcount').hide(); + $j('#cartcount').hide(); - jQuery.ajax({ + $j.ajax({ url:exportAddURL, data: {id: ids.join(",")}, success: function(response) { - jQuery('#cartcount').show().text(response); + $j('#cartcount').show().text(response); }, error: function(xhr) { - jQuery('#cartcount').show(); + $j('#cartcount').show(); } }); }); - jQuery('body').on('click', '.foldericon.deletefile', function() { - var id = jQuery(this).attr('name'); + $j('body').on('click', '.foldericon.deletefile', function() { + var id = $j(this).attr('name'); if (confirm("Are you sure you want to delete this file?")) { - jQuery.ajax({ + $j.ajax({ url:deleteFileURL, data: {id: id}, success: function(response) { - jQuery('#files-table').html(response); + $j('#files-table').html(response); //Get document count and reduce by 1 - var folderId = jQuery('#file-list-table').attr('name'); - var documentCount = jQuery('#folder-header-' + folderId + ' .document-count'); + var folderId = $j('#file-list-table').attr('name'); + var documentCount = $j('#folder-header-' + folderId + ' .document-count'); if (documentCount.size() > 0) { var currentValue = documentCount.text(); documentCount.text(currentValue - 1); @@ -736,51 +739,51 @@ jQuery(document).ready(function() { } }); - jQuery('body').on('click', '.foldericon.view', function() { - var id = jQuery(this).closest(".folderheader").attr('name'); + $j('body').on('click', '.foldericon.view', function() { + var id = $j(this).closest(".folderheader").attr('name'); showDetailDialog(id); }); - jQuery('#metadata-viewer').on('click', '.editmetadata', function() { + $j('#metadata-viewer').on('click', '.editmetadata', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#editMetadataOverlay').fadeIn(); - jQuery('#editMetadata').empty().addClass('ajaxloading'); + $j('#editMetadataOverlay').fadeIn(); + $j('#editMetadata').empty().addClass('ajaxloading'); - jQuery.ajax({ + $j.ajax({ url:editMetaDataURL, data: {folderId: id}, success: function(response) { - jQuery('#editMetadata').html(response).removeClass('ajaxloading'); + $j('#editMetadata').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr.responseText); - jQuery('#editMetadata').html(response).removeClass('ajaxloading'); + $j('#editMetadata').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#box-search').on('click', '.andor', function() { + $j('#box-search').on('click', '.andor', function() { - if (jQuery(this).attr('id') == 'globaloperator') { + if ($j(this).attr('id') == 'globaloperator') { //For global switch, just alter the class - this is picked up later - if (jQuery(this).hasClass("or")) { - jQuery(this).removeClass("or").addClass("and"); + if ($j(this).hasClass("or")) { + $j(this).removeClass("or").addClass("and"); } else { - jQuery(this).removeClass("and").addClass("or"); + $j(this).removeClass("and").addClass("or"); } showSearchTemplate(); showSearchResults(); } else { //For individual categories, alter this index of the current search operators, then redisplay - if (jQuery(this).hasClass("or")) { - currentSearchOperators[jQuery(this).attr('name')] = 'and'; + if ($j(this).hasClass("or")) { + currentSearchOperators[$j(this).attr('name')] = 'and'; } else { - currentSearchOperators[jQuery(this).attr('name')] = 'or'; + currentSearchOperators[$j(this).attr('name')] = 'or'; } showSearchTemplate(); showSearchResults(); @@ -788,83 +791,83 @@ jQuery(document).ready(function() { }); - jQuery('#metadata-viewer').on('click', '.addassay', function() { + $j('#metadata-viewer').on('click', '.addassay', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#createAssayOverlay').fadeIn(); - jQuery('#createAssay').empty().addClass('ajaxloading'); - jQuery('#editMetadata').empty(); + $j('#createAssayOverlay').fadeIn(); + $j('#createAssay').empty().addClass('ajaxloading'); + $j('#editMetadata').empty(); - jQuery.ajax({ + $j.ajax({ url:createAssayURL, data: {folderId: id}, success: function(response) { - jQuery('#createAssay').html(response).removeClass('ajaxloading'); + $j('#createAssay').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr); - jQuery('#createAssay').html(response).removeClass('ajaxloading'); + $j('#createAssay').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#metadata-viewer').on('click', '.addanalysis', function() { + $j('#metadata-viewer').on('click', '.addanalysis', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#createAnalysisOverlay').fadeIn(); - jQuery('#createAnalysis').empty().addClass('ajaxloading'); - jQuery('#editMetadata').empty(); + $j('#createAnalysisOverlay').fadeIn(); + $j('#createAnalysis').empty().addClass('ajaxloading'); + $j('#editMetadata').empty(); - jQuery.ajax({ + $j.ajax({ url:createAnalysisURL, data: {folderId: id}, success: function(response) { - jQuery('#createAnalysis').html(response).removeClass('ajaxloading'); + $j('#createAnalysis').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr); - jQuery('#createAnalysis').html(response).removeClass('ajaxloading'); + $j('#createAnalysis').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#metadata-viewer').on('click', '.addfolder', function() { + $j('#metadata-viewer').on('click', '.addfolder', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#createFolderOverlay').fadeIn(); - jQuery('#createFolder').empty().addClass('ajaxloading'); - jQuery('#editMetadata').empty(); + $j('#createFolderOverlay').fadeIn(); + $j('#createFolder').empty().addClass('ajaxloading'); + $j('#editMetadata').empty(); - jQuery.ajax({ + $j.ajax({ url:createFolderURL + "?", data: {folderId: id}, success: function(response) { - jQuery('#createFolder').html(response).removeClass('ajaxloading'); + $j('#createFolder').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr); - jQuery('#createFolder').html(response).removeClass('ajaxloading'); + $j('#createFolder').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#metadata-viewer').on('click', '.deletefolder', function() { + $j('#metadata-viewer').on('click', '.deletefolder', function() { - var id = jQuery(this).attr('name'); - var parent = jQuery(this).data('parent'); + var id = $j(this).attr('name'); + var parent = $j(this).data('parent'); if (confirm("Are you sure you want to delete this folder and the files and folders beneath it?")) { - jQuery.ajax({ + $j.ajax({ url:deleteFolderURL, data: {id: id}, success: function(response) { updateFolder(parent); showDetailDialog(parent); - jQuery('.result-folder-name').removeClass('selected'); - jQuery('#result-folder-name-' + parent).addClass('selected'); + $j('.result-folder-name').removeClass('selected'); + $j('#result-folder-name-' + parent).addClass('selected'); }, error: function(xhr) { alert(xhr.message); @@ -872,17 +875,17 @@ jQuery(document).ready(function() { }); } }); - jQuery('#metadata-viewer').on('click', '.uploadfiles', function() { - var id = jQuery(this).attr('name'); - jQuery('#uploadtitle').html("

    Upload files into folder "+jQuery('#parentFolderName').val()+"

    "); - jQuery('#parentFolderId').val(id); - jQuery('#uploadFilesOverlay').fadeIn(); - if (jQuery('#existingfiles').val()!="yes"){ - jQuery.ajax({ + $j('#metadata-viewer').on('click', '.uploadfiles', function() { + var id = $j(this).attr('name'); + $j('#uploadtitle').html("

    Upload files into folder "+$j('#parentFolderName').val()+"

    "); + $j('#parentFolderId').val(id); + $j('#uploadFilesOverlay').fadeIn(); + if ($j('#existingfiles').val()!="yes"){ + $j.ajax({ url:uploadFilesURL + "?", data: {folderId: id}, success: function(response) { - jQuery('#uploadFiles').html(response).removeClass('ajaxloading'); + $j('#uploadFiles').html(response).removeClass('ajaxloading'); createUploader(); }, error: function(xhr) { @@ -894,185 +897,185 @@ jQuery(document).ready(function() { } }); - jQuery('body').on('click', '#closeupload', function() { - jQuery('#uploadFilesOverlay').fadeOut(); + $j('body').on('click', '#closeupload', function() { + $j('#uploadFilesOverlay').fadeOut(); }); - jQuery('#metadata-viewer').on('click', '.addstudy', function() { + $j('#metadata-viewer').on('click', '.addstudy', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#createStudyOverlay').fadeIn(); - jQuery('#createStudy').empty().addClass('ajaxloading'); - jQuery('#editMetadata').empty(); + $j('#createStudyOverlay').fadeIn(); + $j('#createStudy').empty().addClass('ajaxloading'); + $j('#editMetadata').empty(); - jQuery.ajax({ + $j.ajax({ url:createStudyURL, data: {folderId: id}, success: function(response) { - jQuery('#createStudy').html(response).removeClass('ajaxloading'); + $j('#createStudy').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr); - jQuery('#createStudy').html(response).removeClass('ajaxloading'); + $j('#createStudy').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#welcome-viewer').on('click', '.addprogram', function() { + $j('#welcome-viewer').on('click', '.addprogram', function() { - var id = jQuery(this).attr('name'); + var id = $j(this).attr('name'); - jQuery('#createProgramOverlay').fadeIn(); - jQuery('#createProgram').empty().addClass('ajaxloading'); - jQuery('#editMetadata').empty(); + $j('#createProgramOverlay').fadeIn(); + $j('#createProgram').empty().addClass('ajaxloading'); + $j('#editMetadata').empty(); - jQuery.ajax({ + $j.ajax({ url:createProgramURL, data: {folderId: id}, success: function(response) { - jQuery('#createProgram').html(response).removeClass('ajaxloading'); + $j('#createProgram').html(response).removeClass('ajaxloading'); }, error: function(xhr) { alert(xhr); - jQuery('#createProgram').html(response).removeClass('ajaxloading'); + $j('#createProgram').html(response).removeClass('ajaxloading'); } }); }); - jQuery('#exportOverlay').on('click', '.greybutton.remove', function() { + $j('#exportOverlay').on('click', '.greybutton.remove', function() { - var row = jQuery(this).closest("tr"); + var row = $j(this).closest("tr"); var id = row.attr('name'); - jQuery('#cartcount').hide(); + $j('#cartcount').hide(); - jQuery.ajax({ + $j.ajax({ url:exportRemoveURL, data: {id: id}, success: function(response) { row.remove(); - jQuery('#cartcount').show().text(response); + $j('#cartcount').show().text(response); updateExportCount(); - jQuery('#metadata-viewer').find(".exportaddspan[name='" + id + "']").addClass("foldericon").addClass("addcart").addClass("link").text('Add to export'); + $j('#metadata-viewer').find(".exportaddspan[name='" + id + "']").addClass("foldericon").addClass("addcart").addClass("link").text('Add to export'); }, error: function(xhr) { - jQuery('#cartcount').show(); + $j('#cartcount').show(); } }); }); - jQuery('#exportOverlay').on('click', '.greybutton.export', function() { + $j('#exportOverlay').on('click', '.greybutton.export', function() { - var checkboxes = jQuery('#exporttable input:checked'); + var checkboxes = $j('#exporttable input:checked'); var ids = []; for (i = 0; i < checkboxes.size(); i++) { - ids.push(jQuery(checkboxes[i]).attr('name')); + ids.push($j(checkboxes[i]).attr('name')); } if (ids.length == 0) {return false;} window.location = exportURL + "?id=" + ids.join(','); - jQuery('#cartcount').hide(); + $j('#cartcount').hide(); - jQuery.ajax({ + $j.ajax({ url:exportRemoveURL, data: {id: ids.join(',')}, success: function(response) { for(j=0; j 0) { var currentValue = documentCount.text(); documentCount.text(parseInt(currentValue) + 1); }else{ - jQuery('#folder-header-'+folderId).html(jQuery('#folder-header-'+folderId).html()+ + $j('#folder-header-'+folderId).html($j('#folder-header-'+folderId).html()+ ''+ 'Documents (1)'); } @@ -1131,20 +1134,20 @@ function loadSearchFromSession() { function updateFolder(id) { var imgExpand = "#imgExpand_" + id; - var src = jQuery(imgExpand).attr('src').replace('folderplus.png', 'ajax-loader-flat.gif').replace('folderminus.png', 'ajax-loader-flat.gif'); - jQuery(imgExpand).attr('src',src); + var src = $j(imgExpand).attr('src').replace('folderplus.png', 'ajax-loader-flat.gif').replace('folderminus.png', 'ajax-loader-flat.gif'); + $j(imgExpand).attr('src',src); - jQuery.ajax({ + $j.ajax({ url:folderContentsURL, data: {id: id, auto: false}, success: function(response) { - jQuery('#' + id + '_detail').html(response).addClass('gtb1').addClass('analysesopen').attr('data', true); + $j('#' + id + '_detail').html(response).addClass('gtb1').addClass('analysesopen').attr('data', true); //check if the object has children - if(jQuery('#' + id + '_detail .search-results-table .folderheader').size() > 0){ - jQuery(imgExpand).attr('src', jQuery(imgExpand).attr('src').replace('ajax-loader-flat.gif', 'folderminus.png')); + if($j('#' + id + '_detail .search-results-table .folderheader').size() > 0){ + $j(imgExpand).attr('src', $j(imgExpand).attr('src').replace('ajax-loader-flat.gif', 'folderminus.png')); }else{ - jQuery(imgExpand).attr('src', jQuery(imgExpand).attr('src').replace('ajax-loader-flat.gif', 'folderleaf.png')); + $j(imgExpand).attr('src', $j(imgExpand).attr('src').replace('ajax-loader-flat.gif', 'folderleaf.png')); } }, error: function(xhr) { @@ -1155,11 +1158,11 @@ function updateFolder(id) { function checkSearchLog() { - if (jQuery('#searchlog').size() > 0) { - jQuery.ajax({ + if ($j('#searchlog').size() > 0) { + $j.ajax({ url:searchLogURL, success: function(response) { - var searchLog = jQuery('#searchlog').empty(); + var searchLog = $j('#searchlog').empty(); searchLog.append("
    " + "------"); var log = response.log for (var i = 0; i < log.length; i++) { @@ -1175,10 +1178,10 @@ function checkSearchLog() { //go back to the welcome message function goWelcome() { - jQuery('#metadata-viewer').empty(); - jQuery('#welcome-viewer').empty().addClass('ajaxloading'); - jQuery('#welcome-viewer').load(welcomeURL, {}, function() { - jQuery('#welcome-viewer').removeClass('ajaxloading'); + $j('#metadata-viewer').empty(); + $j('#welcome-viewer').empty().addClass('ajaxloading'); + $j('#welcome-viewer').load(welcomeURL, {}, function() { + $j('#welcome-viewer').removeClass('ajaxloading'); }); } @@ -1187,8 +1190,8 @@ function displayResultsNumber(){ if(resultNumber!=""){ var jsonNumbers = JSON.parse(resultNumber); - jQuery('#welcome-viewer').empty(); - jQuery('#metadata-viewer').empty(); + $j('#welcome-viewer').empty(); + $j('#metadata-viewer').empty(); var htmlResults="

    Search results by type

    "; htmlResults+=""; htmlResults+=""; @@ -1198,64 +1201,64 @@ function displayResultsNumber(){ htmlResults+=""; htmlResults+=""; htmlResults+="
    ObjectNumber of results
    Analyses"+jsonNumbers.ANALYSIS+"
    Folders"+jsonNumbers.FOLDER+"
    "; - jQuery('#metadata-viewer').html(htmlResults); + $j('#metadata-viewer').html(htmlResults); } } //Globally prevent AJAX from being cached (mostly by IE) -jQuery.ajaxSetup({ +$j.ajaxSetup({ cache: false }); function createUploader() { - $fub = jQuery('#fine-uploader-basic'); + $fub = $j('#fine-uploader-basic'); uploader = new qq.FineUploaderBasic({ button: $fub[0], multiple: true, request: { - endpoint: uploadActionURL+'?parentId='+jQuery('#parentFolderId').val() + endpoint: uploadActionURL+'?parentId='+$j('#parentFolderId').val() }, callbacks: { onSubmit: function(id, fileName) { - var folderName = jQuery('#folderName').val(); + var folderName = $j('#folderName').val(); - jQuery('#uploadtable').append(''+ + $j('#uploadtable').append(''+ ''+folderName+''+ ''+fileName+''+ 'Submitting'+ ''); }, onUpload: function(id, fileName) { - jQuery('#file-' + id + " #name").html(fileName); - jQuery('#file-' + id + " #status").html('Initializing '); + $j('#file-' + id + " #name").html(fileName); + $j('#file-' + id + " #status").html('Initializing '); }, onProgress: function(id, fileName, loaded, total) { if (loaded < total) { progress = Math.round(loaded / total * 100) + '% of ' + Math.round(total / 1024) + ' kB'; - jQuery('#file-' + id + " #status").html('Uploading '); - jQuery('#file-' + id + " #progress").html(progress); + $j('#file-' + id + " #status").html('Uploading '); + $j('#file-' + id + " #progress").html(progress); } else { - jQuery('#file-' + id + " #status").html('Saving'); - jQuery('#file-' + id + " #progress").html('100%'); + $j('#file-' + id + " #status").html('Saving'); + $j('#file-' + id + " #progress").html('100%'); } }, onComplete: function(id, fileName, responseJSON) { if (responseJSON.success) { - jQuery('#file-' + id + " #status").html('File successfully uploaded '); - jQuery('#file-' + id + " #progress").html(''); + $j('#file-' + id + " #status").html('File successfully uploaded '); + $j('#file-' + id + " #progress").html(''); var folderId=responseJSON.folderId; incrementeDocumentCount(folderId); - if(folderId == jQuery('#parentFolderId').val()){ - jQuery('#metadata-viewer').empty().addClass('ajaxloading'); - jQuery('#metadata-viewer').load(folderDetailsURL + '?id=' + folderId, {}, function() { - jQuery('#metadata-viewer').removeClass('ajaxloading'); + if(folderId == $j('#parentFolderId').val()){ + $j('#metadata-viewer').empty().addClass('ajaxloading'); + $j('#metadata-viewer').load(folderDetailsURL + '?id=' + folderId, {}, function() { + $j('#metadata-viewer').removeClass('ajaxloading'); }); } } else { - jQuery('#file-' + id + " #status").html('Error: '+responseJSON.error); - jQuery('#file-' + id + " #progress").html(''); + $j('#file-' + id + " #status").html('Error: '+responseJSON.error); + $j('#file-' + id + " #progress").html(''); } } @@ -1263,55 +1266,55 @@ function createUploader() { }); } function createUploader() { - $fub = jQuery('#fine-uploader-basic'); + $fub = $j('#fine-uploader-basic'); uploader = new qq.FineUploaderBasic({ button: $fub[0], multiple: true, request: { - endpoint: uploadActionURL+'?parentId='+jQuery('#parentFolderId').val() + endpoint: uploadActionURL+'?parentId='+$j('#parentFolderId').val() }, callbacks: { onSubmit: function(id, fileName) { - var folderName = jQuery('#parentFolderName').val(); + var folderName = $j('#parentFolderName').val(); - jQuery('#uploadtable').append(''+ + $j('#uploadtable').append(''+ ''+folderName+''+ ''+fileName+''+ 'Submitting'+ ''); }, onUpload: function(id, fileName) { - jQuery('#file-' + id + " #name").html(fileName); - jQuery('#file-' + id + " #status").html('Initializing '); + $j('#file-' + id + " #name").html(fileName); + $j('#file-' + id + " #status").html('Initializing '); }, onProgress: function(id, fileName, loaded, total) { if (loaded < total) { progress = Math.round(loaded / total * 100) + '% of ' + Math.round(total / 1024) + ' kB'; - jQuery('#file-' + id + " #status").html('Uploading '); - jQuery('#file-' + id + " #progress").html(progress); + $j('#file-' + id + " #status").html('Uploading '); + $j('#file-' + id + " #progress").html(progress); } else { - jQuery('#file-' + id + " #status").html('Saving'); - jQuery('#file-' + id + " #progress").html('100%'); + $j('#file-' + id + " #status").html('Saving'); + $j('#file-' + id + " #progress").html('100%'); } }, onComplete: function(id, fileName, responseJSON) { if (responseJSON.success) { - jQuery('#file-' + id + " #status").html('File successfully uploaded '); - jQuery('#file-' + id + " #progress").html(''); + $j('#file-' + id + " #status").html('File successfully uploaded '); + $j('#file-' + id + " #progress").html(''); var folderId=responseJSON.folderId; incrementeDocumentCount(folderId); - if(folderId == jQuery('#parentFolderId').val()){ - jQuery('#metadata-viewer').empty().addClass('ajaxloading'); - jQuery('#metadata-viewer').load(folderDetailsURL + '?id=' + folderId, {}, function() { - jQuery('#metadata-viewer').removeClass('ajaxloading'); + if(folderId == $j('#parentFolderId').val()){ + $j('#metadata-viewer').empty().addClass('ajaxloading'); + $j('#metadata-viewer').load(folderDetailsURL + '?id=' + folderId, {}, function() { + $j('#metadata-viewer').removeClass('ajaxloading'); }); } } else { - jQuery('#file-' + id + " #status").html('Error: '+responseJSON.error); - jQuery('#file-' + id + " #progress").html(''); + $j('#file-' + id + " #status").html('Error: '+responseJSON.error); + $j('#file-' + id + " #progress").html(''); } } } From acb4a7a90b60f069bd62c84f7b04a8a155facbbd Mon Sep 17 00:00:00 2001 From: dennyverbeeck Date: Fri, 3 Feb 2017 14:44:35 +0100 Subject: [PATCH 019/136] Hidome Ffature: when search term left empty, you get a 'no-value' type filter. I.e. match all subjects who have the high dimensional concept (a.k.a. the original pre-Hidome behavior) Fix: when entering numeric values manually in the min and max boxes, they are no longer compared as strings. --- web-app/js/datasetExplorer/omicsFilter.js | 92 +++++++++++++++-------- web-app/js/datasetExplorer/querypanels.js | 8 +- 2 files changed, 68 insertions(+), 32 deletions(-) diff --git a/web-app/js/datasetExplorer/omicsFilter.js b/web-app/js/datasetExplorer/omicsFilter.js index 3ccf793a3..d4f796500 100644 --- a/web-app/js/datasetExplorer/omicsFilter.js +++ b/web-app/js/datasetExplorer/omicsFilter.js @@ -88,18 +88,24 @@ function omicsFilterWindowReceived(result, request) { function repopulateFilterWindow() { if (omicsFilterRepopulateWindow == null) return; - jQuery("#highdimension-search-property").val(omicsFilterRepopulateWindow.omicsproperty.nodeValue); - jQuery("#highdimension-filter-selector").val(omicsFilterRepopulateWindow.omicsselector.nodeValue); - jQuery("#highdimension-filter-projection").val(omicsFilterRepopulateWindow.omicsprojection.nodeValue); + if (omicsFilterRepopulateWindow.omicsproperty != null) { + jQuery("#highdimension-search-property").val(omicsFilterRepopulateWindow.omicsproperty.nodeValue); + } - omicsAutoCompleteList = [omicsFilterRepopulateWindow.omicsselector.nodeValue]; + if (omicsFilterRepopulateWindow.omicsprojection != null) { + jQuery("#highdimension-filter-projection").val(omicsFilterRepopulateWindow.omicsprojection.nodeValue); + } - showConceptDistributionHistogramForOmicsFilterComplete(null); - showConceptDistributionHistogramForOmicsFilter(getOmicsFilterParams()); + if (omicsFilterRepopulateWindow.omicsselector != null) { + jQuery("#highdimension-filter-selector").val(omicsFilterRepopulateWindow.omicsselector.nodeValue); + omicsAutoCompleteList = [omicsFilterRepopulateWindow.omicsselector.nodeValue]; + showConceptDistributionHistogramForOmicsFilterComplete(null); + showConceptDistributionHistogramForOmicsFilter(getOmicsFilterParams()); + } } function repopulateOmicsFilterRange() { - if (omicsFilterRepopulateWindow == null) return; + if (omicsFilterRepopulateWindow.omicsvalue == null) return; if (omics_filter_info.filter_type == "SINGLE_NUMERIC" || omics_filter_info.filter_type == "ACGH") { var minbox = jQuery("#highdimension-amount-min"); @@ -220,45 +226,55 @@ function addOmicsFilterMinMaxInputHandlers() { minbox.blur(function(event) { var slider = jQuery("#highdimension-range"); var value = minbox.val(); + var sliderMin = parseFloat(slider.slider('option','min')); + var sliderMax = parseFloat(slider.slider('option','max')); if (!jQuery.isNumeric(value)) { - minbox.val(slider.slider('option','min')); + minbox.val(sliderMin); + } + if (!jQuery.isNumeric(maxbox.val())) { + maxbox.val(sliderMax); } - else if (value < slider.slider('option','min')) { - minbox.val(slider.slider('option','min')); + value = parseFloat(minbox.val()); + var maxboxVal = parseFloat(maxbox.val()); + if (value < sliderMin) { + minbox.val(sliderMin); } - else if (value > maxbox.val()) { - minbox.val(maxbox.val()); + else if (value > maxboxVal) { + minbox.val(maxboxVal); } - slider.slider('values',0,minbox.val()); - jQuery("#highdimension-filter-subjectcount").html(omicsFilterValues.filter(function (el, idx, array) {return el >= minbox.val();}) - .filter(function(el, idx, array) {return el <= maxbox.val();}) + slider.slider('values',0,value); + jQuery("#highdimension-filter-subjectcount").html(omicsFilterValues.filter(function (el, idx, array) {return el >= value;}) + .filter(function(el, idx, array) {return el <= maxboxVal;}) .length); - var min = slider.slider('option', 'min'); - var max = slider.slider('option', 'max'); - omicsSliderLowHandleRatio = (minbox.val() - min) / (max - min); + omicsSliderLowHandleRatio = (value - sliderMin) / (sliderMax - sliderMin); }); maxbox.blur(function(event) { var slider = jQuery("#highdimension-range"); var value = maxbox.val(); + var sliderMin = parseFloat(slider.slider('option','min')); + var sliderMax = parseFloat(slider.slider('option','max')); if (!jQuery.isNumeric(value)) { - maxbox.val(slider.slider('option','max')); + maxbox.val(sliderMax); } - else if (value > slider.slider('option','max')) { - maxbox.val(slider.slider('option','max')); + if (!jQuery.isNumeric(minbox.val())) { + minbox.val(sliderMin); } - else if (value < minbox.val()) { - maxbox.val(minbox.val()); + value = parseFloat(maxbox.val()); + var minboxVal = parseFloat(minbox.val()) + if (value > sliderMax) { + maxbox.val(sliderMax); + } + else if (value < minboxVal) { + maxbox.val(minboxVal); } - slider.slider('values',1,maxbox.val()); - jQuery("#highdimension-filter-subjectcount").html(omicsFilterValues.filter(function (el, idx, array) {return el >= minbox.val();}) - .filter(function(el, idx, array) {return el <= maxbox.val();}) + slider.slider('values',1,value); + jQuery("#highdimension-filter-subjectcount").html(omicsFilterValues.filter(function (el, idx, array) {return el >= minboxVal;}) + .filter(function(el, idx, array) {return el <= value;}) .length); - var min = slider.slider('option', 'min'); - var max = slider.slider('option', 'max'); - omicsSliderHighHandleRatio = (maxbox.val() - min) / (max - min); + omicsSliderHighHandleRatio = (value - sliderMin) / (sliderMax - sliderMin); }); // let the enter key blur the text fields, thus updating the slider and subject counts @@ -495,10 +511,26 @@ function applySingleNumericOmicsFilter(validation) { // filter if (validation) { if (params.selector == "") { - alert("You must choose a gene."); + // no gene supplied, we assume a "no value" type filter + omicsFilterValues = []; + omicsSliderLowHandleRatio = 0; + omicsSliderHighHandleRatio = 1; + document.getElementById("highdimension-filter-main").removeChild(document.getElementById("highdimension-filter-content")); + omicsfilterwin.hide(); + var concept = jQuery('#' + selectedConcept.id); + jQuery('#' + selectedConcept.id + " .concept-text").html(selectedConcept.attributes["conceptname"].nodeValue); + concept.removeAttr("omicsproperty"); + concept.removeAttr("omicsselector"); + concept.removeAttr("omicsoperator"); + concept.removeAttr("omicsvalue"); + concept.removeAttr("omicsprojection"); + concept.removeAttr("omicsvaluetype"); + concept.attr("setvaluemode",""); + moveSelectedConceptFromHoldingToTarget(); return; } + var in_list = false; for (var i = 0; i < omicsAutoCompleteList.length; i++) { if (omicsAutoCompleteList[i].toLowerCase() == params.selector.toLocaleLowerCase()) { diff --git a/web-app/js/datasetExplorer/querypanels.js b/web-app/js/datasetExplorer/querypanels.js index e055159ca..2b3b6ac27 100644 --- a/web-app/js/datasetExplorer/querypanels.js +++ b/web-app/js/datasetExplorer/querypanels.js @@ -364,12 +364,16 @@ function getPanelItemFromConcept(concept) { // We try to infer the type when possible to match the icon jQuery.get(pageInfo.basePath + "/concepts/getResource", { concept_key: concept["conceptid"] }, function() {}, 'json') .success(function (data) { - jQuery("span:first", _item).addClass(getClassForNodeResource(data)) + jQuery("span:first", _item).addClass(getClassForNodeResource(data)); + jQuery.each(data.visualAttributes, function (index, value) { + if (value.toUpperCase() == "HIGH_DIMENSIONAL") + _item.attr("oktousevalues", "H"); + }); }) _item .append(jQuery("").addClass("x-tree-node-icon")) - .append(jQuery("").addClass("concept-text").html(concept.conceptname + _valueText)) + .append(jQuery("").addClass("concept-text").html(concept.conceptname + " " + _valueText)) jQuery.each(concept, function(key, value) { _item.attr(key, value) From a3621230e4062dfb911578c086b97a6a4b0fffb6 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Fri, 3 Feb 2017 16:46:11 +0000 Subject: [PATCH 020/136] Catch empty search terms list --- web-app/js/rwgsearch.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/web-app/js/rwgsearch.js b/web-app/js/rwgsearch.js index 200a2b2da..ccafa5ba8 100644 --- a/web-app/js/rwgsearch.js +++ b/web-app/js/rwgsearch.js @@ -506,13 +506,14 @@ function removeSearchTerm(ctrl) { // only refresh results if the tree was not updated (the onSelect also fires these event, so don't want to do 2x) if (!treeUpdated) { - showSearchTemplate(); - showSearchResults(); + showSearchTemplate(); + showSearchResults(); } - //Remove selected status from filter browser for this item - unselectFilterItem(fields[2]); - + //Remove selected status from filter browser for this item + if(idx > -1) { + unselectFilterItem(fields[2]); + } } //Clear the tree, results along with emptying the two arrays that store categories and search terms. From 24b25dac310579afcd2f2f37d276714fb410d5e4 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Fri, 3 Feb 2017 16:46:36 +0000 Subject: [PATCH 021/136] name of xnat import enable parameter --- grails-app/views/layouts/_adminnavbar.gsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/views/layouts/_adminnavbar.gsp b/grails-app/views/layouts/_adminnavbar.gsp index 767065ef8..2f922867d 100644 --- a/grails-app/views/layouts/_adminnavbar.gsp +++ b/grails-app/views/layouts/_adminnavbar.gsp @@ -166,7 +166,7 @@ - +