f20f28b07df4e9738560a839a7636a7708d64969 kate Mon Oct 31 20:23:33 2011 -0700 Add filtering by assembly diff --git src/hg/js/encodeProject.js src/hg/js/encodeProject.js index 91f7fed..e7ea264 100644 --- src/hg/js/encodeProject.js +++ src/hg/js/encodeProject.js @@ -1,28 +1,30 @@ /* encodeProject - javascript utilities for ENCODE-specific things such as controlled vocabulary and experiment table Formatted: jsbeautify.py -j -k Syntax checked: jslint --indent=4 --plusplus=true --strict=false --browser=true */ /*global $ */ var encodeProject = (function () { var server = "genome.ucsc.edu", assembly = "hg19", cgi = "/cgi-bin/hgApi?"; + var accessionPrefix = 'wgEncodeE?'; + function cmpNoCase(a, b) { // Helper function for case-insensitive sort var A, B; A = a.toUpperCase(); B = b.toUpperCase(); if (A < B) { return -1; } if (A > B) { return 1; } return 0; } // TODO: modularize by extending Array.sort ? @@ -36,31 +38,31 @@ return -1; } if (A > B) { return 1; } return 0; } return { setup: function (settings) { // Change defaults if (settings.server) { server = settings.server; } if (settings.assembly) { - server = settings.assembly; + assembly = settings.assembly; } }, addSearchPanel: function (divId) { // Create panel of radio buttons for user to select search type // Add to passed in HTML div ID; e.g. #searchTypePanel return $(divId).append('<span id="searchPanelTitle"><strong>Search for:</strong></span><input type="radio" name="searchType" id="searchTracks" value="tracks" checked="checked">Tracks<input type="radio" name="searchType" id="searchFiles" value="files">Files'); }, getSearchUrl: function (assembly, vars) { // Return URL for search of type requested in search panel var prog, cartVar, url; if ($('input:radio[name=searchType]:checked').val() === "tracks") { prog = 'hgTracks'; @@ -143,30 +145,33 @@ cellTiers[tier].cellTypes.push(cellType.term); }); cellTiers.sort(cmpCV); $.each(cellTiers, function (i, tier) { if (!cellTiers[i]) { // for some reason there's __ element here (not my property) return true; } cellTiers[i].cellTypes.sort(cmpNoCase); }); return cellTiers; }, isHistone: function (target) { // Helper function, returns true if antibody target histone modification + if (target === undefined) { + return false; + } return target.match(/^H[234]/); }, antibodyFromExp: function (experiment) { // Get antibody from expVars field of experiment var match = experiment.expVars.match(/antibody=(\S+)/); if (match) { return match[1]; } }, targetFromAntibody: function (antibody, antibodyCV) { // Get target for antibody from antibody controlled vocab if (antibodyCV[antibody]) { return antibodyCV[antibody].target; @@ -197,38 +202,50 @@ }); $.each(antibodyGroupHash, function (key, item) { antibodyGroups.push(item); }); antibodyGroups.sort(cmpCV); $.each(antibodyGroups, function (i, group) { if (!antibodyGroups[i]) { // for some reason there's __ element here (not my property) return true; } antibodyGroups[i].targets.sort(cmpNoCase); }); return antibodyGroups; }, + getExpIdHash: function (expIds) { + // Return hash of experiment ID's + var expIdHash = {}; + $.each(expIds, function (i, expId) { + expIdHash[expId.expId] = true; + }); + return expIdHash; + }, + + // UNTESTED + expIdFromAccession: function(accession) { + return accession.slice(accessionPrefix.length); + }, + serverRequests: { // Requests for data from server API experiment: "cmd=encodeExperiments", - + expId: "cmd=encodeExpId", dataType: "cmd=cv&type=dataType", - cellType: "cmd=cv&type=cellType", - antibody: "cmd=cv&type=antibody" }, loadAllFromServer: function (requests, handler) { // Execute requests to server via ajax var serverData = [], count = requests.length; $.each(requests, function (i, request) { $.getJSON("http://" + server + cgi + "db=" + assembly + "&" + request, function (data) { serverData[i] = data; if (--count === 0) { handler(serverData); } });