whole_func_string: function setupOutline() {
    var markup = '<select id="tocDropDown" style="float: right"><option>Outline</option></select>';
    IPython.toolbar.element.append(markup);
  
    var tocDropDown = $('#tocDropDown');
    tocDropDown.change(function(e) {
      var index = tocDropDown.val();
      if (index.length === '') {
        return false;
      }
  
      var scrollTop = IPython.notebook.get_cell(0).element.position().top -
                      IPython.notebook.get_cell(parseInt(index)).element.position().top;
      IPython.notebook.element.animate({ scrollTop: -scrollTop }, 250, 'easeInOutCubic');
  
      tocDropDown.blur();
      tocDropDown.find('option').get(0).selected = true;
  
      return false;
    });
  
    function createOption(title, value, level) {
      var prefix = level > 1 ? new Array(level + 1).join('&nbsp;&nbsp;') : '';
      var text = prefix + IPython.utils.escape_html(title);
  
      return '<option value="' + value + '">' + text + '</option>';
    }
  
    function updateOutline() {
      var content = [];
      content.push(createOption('Table of Contents', '', 0));
  
      var cells = IPython.notebook.get_cells();
      cells.forEach(function(c, i) {
        if ((c.cell_type == 'heading') && (c.level <= 3)) {
          var cell = $(c.element);
          var header = cell.find('h' + c.level);
  
          // Retrieve the title and strip off the trailing paragraph marker
          var title = header.text();
          title = title.substring(-1, title.length - 1);
  
          if (title == 'Type Heading Here') {
            // New cells have this placeholder text in them
            return;
          }
  
          content.push(createOption(title, i, c.level));
        }
      });
  
      var markup = content.join('');
      tocDropDown.html(markup);
    }
  
    updateOutline();
    $([IPython.events]).on('set_dirty.Notebook', function(event, data) {
      updateOutline();
    });
    $([IPython.events]).on('command_mode.Cell', function(event, data) {
      updateOutline();
    });
  }
func_code_string: function setupOutline() {
    var markup = '<select id="tocDropDown" style="float: right"><option>Outline</option></select>';
    IPython.toolbar.element.append(markup);
  
    var tocDropDown = $('#tocDropDown');
    tocDropDown.change(function(e) {
      var index = tocDropDown.val();
      if (index.length === '') {
        return false;
      }
  
      var scrollTop = IPython.notebook.get_cell(0).element.position().top -
                      IPython.notebook.get_cell(parseInt(index)).element.position().top;
      IPython.notebook.element.animate({ scrollTop: -scrollTop }, 250, 'easeInOutCubic');
  
      tocDropDown.blur();
      tocDropDown.find('option').get(0).selected = true;
  
      return false;
    });
  
    function createOption(title, value, level) {
      var prefix = level > 1 ? new Array(level + 1).join('&nbsp;&nbsp;') : '';
      var text = prefix + IPython.utils.escape_html(title);
  
      return '<option value="' + value + '">' + text + '</option>';
    }
  
    function updateOutline() {
      var content = [];
      content.push(createOption('Table of Contents', '', 0));
  
      var cells = IPython.notebook.get_cells();
      cells.forEach(function(c, i) {
        if ((c.cell_type == 'heading') && (c.level <= 3)) {
          var cell = $(c.element);
          var header = cell.find('h' + c.level);
  
          // Retrieve the title and strip off the trailing paragraph marker
          var title = header.text();
          title = title.substring(-1, title.length - 1);
  
          if (title == 'Type Heading Here') {
            // New cells have this placeholder text in them
            return;
          }
  
          content.push(createOption(title, i, c.level));
        }
      });
  
      var markup = content.join('');
      tocDropDown.html(markup);
    }
  
    updateOutline();
    $([IPython.events]).on('set_dirty.Notebook', function(event, data) {
      updateOutline();
    });
    $([IPython.events]).on('command_mode.Cell', function(event, data) {
      updateOutline();
    });
  }
func_documentation_string: Add TOC functionality