In [76]:
import requests
import ipywidgets as widgets
import time
from IPython.display import display, HTML
from traitlets import Int, Unicode, observe

In [77]:
class TabsWidget(widgets.DOMWidget):
    
    _view_name = Unicode('TabsView').tag(sync=True)
    _view_module = Unicode('tabsDemo').tag(sync=True)
    frameHeight = Int(300).tag(sync=True)

    def setHeight(self, height):
       print("setHeight(%d) "% height)
       self.frameHeight = height

In [78]:
display(HTML(data="""
<style>
    div#notebook-container    { width: 97%; }
    div#menubar-container     { width: 65%; }
    div#maintoolbar-container { width: 99%; }
</style>
"""))



In [79]:
display(HTML('<link rel="stylesheet" type="text/css" href="//igv.org/web/release/1.0.6/igv-1.0.6.css">'))



In [80]:
%%javascript
"use strict"
require.config({
   'shim': {'bootstrap': {'deps' :['jquery']},
            'igv': {'deps' :['jquery', 'jquery-ui', 'bootstrap']}
           },
    
   paths: {'jquery'    :   'http://code.jquery.com/jquery-1.12.4.min',
          'jquery-ui' :   'http://code.jquery.com/ui/1.12.1/jquery-ui.min',
          'bootstrap' :   'http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min',
          'igv'       :   'http://igv.org/web/release/1.0.6/igv-1.0.6'
          }
   });

require.undef('tabsDemo')

define('tabsDemo', ["jupyter-js-widgets", "jquery", "igv"], 
       function(widgets, $, igv) {
    
    var TabsView = widgets.DOMWidgetView.extend({

        initialize: function() {
           this.options = {}
           console.log("constructing TabsView");
           this.frameHeight = "800px";
           },

        resizeHandler: function(){
           console.log("TabsView resizeHandler")            
           },
        
        createMasterTabsDiv: function(){
           var masterTabsDiv = $("<div id='masterTabsDiv' style='border:1px solid gray; height: 400px; width: 97%'></div>");
            
           var list = $("<ul/>");
           list.append("<li><a href='#tab-3'>three</a></li>");
           list.append("<li><a href='#tab-2'>igv</a></li>");
           masterTabsDiv.append(list);
            
           var tab2 = $("<div id='tab-2'></div>");
           tab2.append("<div id='igvDiv' style='border:1px solid blue; height:500px;'></div>");
            
           var tab3 = $("<div id='tab-3'>contents 3</div>");
            
           masterTabsDiv.append(tab2);
           masterTabsDiv.append(tab3);
            
           return(masterTabsDiv);
           },
         

        render: function() { 
            console.log("entering render");
            this.masterTabsDiv = this.createMasterTabsDiv();
            this.$el.append(this.masterTabsDiv);
            this.listenTo(this.model, 'change:frameHeight', this.frameDimensionsChanged, this);
            var igvOptions = {
                 palette: ["#00A0B0", "#6A4A3C", "#CC333F", "#EB6841"],
                 locus: "7:55,085,725 - 55,276,031",
                 //reference: {id: "hg19",
                 //  fastaURL: "http://igv.broadinstitute.org/genomes/seq/1kg_v37/human_g1k_v37_decoy.fasta",
                 //  cytobandURL: "http://igv.broadinstitute.org/genomes/seq/b37/b37_cytoband.txt"
                 //  },
                 trackDefaults: {
                    bam: {coverageThreshold: 0.2,
                          coverageQualityWeight: true
                         }
                    },
               tracks: [
                {name: "Genes",
                    url: "http://igv.broadinstitute.org/annotations/hg19/genes/gencode.v18.collapsed.bed",
                    index: "http://igv.broadinstitute.org/annotations/hg19/genes/gencode.v18.collapsed.bed.idx",
                    displayMode: "EXPANDED"
                    }
                 ]
               }; // igvOptions
             //$("#masterTabsDiv").tabs();
             setTimeout(function(){
                  console.log("about to call tabs()");
                  //setTimeout(function() {window.browser = igv.createBrowser($("#igvDiv"), igvOptions);}, 0);
                  window.browser = igv.createBrowser($("#igvDiv"), igvOptions);
                  setTimeout(function() {$("#masterTabsDiv").tabs();}, 3000);
                  }, 3000);
        }, // render

           
        frameDimensionsChanged: function(){
           console.log("frameDimensionsChanged");
           var oldHeight = $("#mainDiv").height()
           var oldWidth = $("#mainDiv").width()
           var newHeight = this.model.get("frameHeight");
           var msg = "<center>tabs demo, height: " + oldHeight + " -> " + newHeight + "</center>";
           $("#mainDiv").html(msg);
           $("#masterTabsDiv").height(newHeight);
        }, 
        

    });
    return {
        TabsView: TabsView
    };
});



In [81]:
app = TabsWidget()
display(app)



In [ ]: