diff --git a/package-lock.json b/package-lock.json index 05d49a514d6..3ce83722f77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9594,6 +9594,10 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, + "igv-utils": { + "version": "github:igvteam/igv-utils#22ee3f784d698e4ca8228db22f9b39db052d00b8", + "from": "github:igvteam/igv-utils#v1.2.10-jb" + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", diff --git a/package.json b/package.json index 142bca1ef13..6f4d37e76ce 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "genome-visualizer": "ENCODE-DCC/valis-hpgv#1.9.0", "google-analytics": "file:node_shims/google-analytics", "graphlib": "ENCODE-DCC/graphlib#v1.0.8", + "igv-utils": "github:igvteam/igv-utils#v1.2.10-jb", "immutable": "^3.7.5", "install": "^0.13.0", "js-cookie": "^2.2.1", diff --git a/src/encoded/static/components/vis_defines.js b/src/encoded/static/components/vis_defines.js index 89ac4f9888a..6dd877aa366 100644 --- a/src/encoded/static/components/vis_defines.js +++ b/src/encoded/static/components/vis_defines.js @@ -5,6 +5,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import _ from 'underscore'; import url from 'url'; +import { StringUtils } from 'igv-utils'; import * as encoding from '../libs/query_encoding'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '../libs/ui/modal'; import * as globals from './globals'; @@ -116,12 +117,16 @@ export const visOpenBrowser = (dataset, browser, assembly, files, datasetUrl) => delete parsedUrl.path; delete parsedUrl.search; delete parsedUrl.query; - const fileQueries = files.map((file) => { - parsedUrl.pathname = file.href; - const name = file.biological_replicates && file.biological_replicates.length > 0 ? `&name=${dataset.accession} / ${file.title}, Replicate ${file.biological_replicates.join(',')}` : ''; - return encoding.encodedURIComponentOLD(`{hicUrl=${url.format(parsedUrl)}${name}}`, { encodeEquals: true }); + const juiceboxSessionJsonString = JSON.stringify({ + browsers: files.map((file) => { + parsedUrl.pathname = file.href; + return { + name: file.biological_replicates && file.biological_replicates.length > 0 ? `${dataset.accession} / ${file.title}, Replicate ${file.biological_replicates.join(',')}` : '', + url: url.format(parsedUrl), + }; + }), }); - href = `http://aidenlab.org/juicebox/?juicebox=${fileQueries.join(',')}`; + href = `http://aidenlab.org/juicebox/?session=blob:${StringUtils.compressString(juiceboxSessionJsonString)}`; break; } case 'Ensembl': { diff --git a/src/encoded/static/vis_defs/HiC_vis_def.json b/src/encoded/static/vis_defs/HiC_vis_def.json index cf25416a50c..0fae1e12569 100644 --- a/src/encoded/static/vis_defs/HiC_vis_def.json +++ b/src/encoded/static/vis_defs/HiC_vis_def.json @@ -10,7 +10,7 @@ "sortOrder": [ "Biosample", "Targets", "Replicates", "Views" ], "Views": { "tag": "view", - "group_order": [ "Topologically associated domains", "Nested TADs", "Genome compartments" ], + "group_order": [ "Topologically associated domains", "Nested TADs", "Genome compartments", "HiC" ], "groups": { "Topologically associated domains": { "tag": "aTADS", @@ -34,6 +34,12 @@ "maxHeightPixels": "64:18:8", "windowingFunction": "mean+whiskers", "output_type": [ "genome compartments" ] + }, + "HiC": { + "tag": "dHIC", + "visibility": "dense", + "type": "hic", + "output_type": [ "chromatin interactions" ] } } }, diff --git a/src/encoded/vis_defines.py b/src/encoded/vis_defines.py index 287757df50f..8ae958b3df8 100644 --- a/src/encoded/vis_defines.py +++ b/src/encoded/vis_defines.py @@ -125,7 +125,7 @@ } BROWSER_FILE_TYPES = { - 'ucsc': {'bigWig', 'bigBed', 'bigInteract'}, + 'ucsc': {'bigWig', 'bigBed', 'bigInteract', 'hic'}, 'ensembl': {'bigWig', 'bigBed'}, 'quickview': {'bigWig', 'bigBed'}, 'hic': {'hic'},