forked from Novartis/hdf5r
-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
219 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/*! | ||
* Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) | ||
* Copyright 2015 Aidan Feldman | ||
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ | ||
|
||
/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ | ||
|
||
/* All levels of nav */ | ||
nav[data-toggle='toc'] .nav > li > a { | ||
display: block; | ||
padding: 4px 20px; | ||
font-size: 13px; | ||
font-weight: 500; | ||
color: #767676; | ||
} | ||
nav[data-toggle='toc'] .nav > li > a:hover, | ||
nav[data-toggle='toc'] .nav > li > a:focus { | ||
padding-left: 19px; | ||
color: #563d7c; | ||
text-decoration: none; | ||
background-color: transparent; | ||
border-left: 1px solid #563d7c; | ||
} | ||
nav[data-toggle='toc'] .nav > .active > a, | ||
nav[data-toggle='toc'] .nav > .active:hover > a, | ||
nav[data-toggle='toc'] .nav > .active:focus > a { | ||
padding-left: 18px; | ||
font-weight: bold; | ||
color: #563d7c; | ||
background-color: transparent; | ||
border-left: 2px solid #563d7c; | ||
} | ||
|
||
/* Nav: second level (shown on .active) */ | ||
nav[data-toggle='toc'] .nav .nav { | ||
display: none; /* Hide by default, but at >768px, show it */ | ||
padding-bottom: 10px; | ||
} | ||
nav[data-toggle='toc'] .nav .nav > li > a { | ||
padding-top: 1px; | ||
padding-bottom: 1px; | ||
padding-left: 30px; | ||
font-size: 12px; | ||
font-weight: normal; | ||
} | ||
nav[data-toggle='toc'] .nav .nav > li > a:hover, | ||
nav[data-toggle='toc'] .nav .nav > li > a:focus { | ||
padding-left: 29px; | ||
} | ||
nav[data-toggle='toc'] .nav .nav > .active > a, | ||
nav[data-toggle='toc'] .nav .nav > .active:hover > a, | ||
nav[data-toggle='toc'] .nav .nav > .active:focus > a { | ||
padding-left: 28px; | ||
font-weight: 500; | ||
} | ||
|
||
/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ | ||
nav[data-toggle='toc'] .nav > .active > ul { | ||
display: block; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
/*! | ||
* Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) | ||
* Copyright 2015 Aidan Feldman | ||
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ | ||
(function() { | ||
'use strict'; | ||
|
||
window.Toc = { | ||
helpers: { | ||
// return all matching elements in the set, or their descendants | ||
findOrFilter: function($el, selector) { | ||
// http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ | ||
// http://stackoverflow.com/a/12731439/358804 | ||
var $descendants = $el.find(selector); | ||
return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); | ||
}, | ||
|
||
generateUniqueIdBase: function(el) { | ||
var text = $(el).text(); | ||
var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); | ||
return anchor || el.tagName.toLowerCase(); | ||
}, | ||
|
||
generateUniqueId: function(el) { | ||
var anchorBase = this.generateUniqueIdBase(el); | ||
for (var i = 0; ; i++) { | ||
var anchor = anchorBase; | ||
if (i > 0) { | ||
// add suffix | ||
anchor += '-' + i; | ||
} | ||
// check if ID already exists | ||
if (!document.getElementById(anchor)) { | ||
return anchor; | ||
} | ||
} | ||
}, | ||
|
||
generateAnchor: function(el) { | ||
if (el.id) { | ||
return el.id; | ||
} else { | ||
var anchor = this.generateUniqueId(el); | ||
el.id = anchor; | ||
return anchor; | ||
} | ||
}, | ||
|
||
createNavList: function() { | ||
return $('<ul class="nav"></ul>'); | ||
}, | ||
|
||
createChildNavList: function($parent) { | ||
var $childList = this.createNavList(); | ||
$parent.append($childList); | ||
return $childList; | ||
}, | ||
|
||
generateNavEl: function(anchor, text) { | ||
var $a = $('<a></a>'); | ||
$a.attr('href', '#' + anchor); | ||
$a.text(text); | ||
var $li = $('<li></li>'); | ||
$li.append($a); | ||
return $li; | ||
}, | ||
|
||
generateNavItem: function(headingEl) { | ||
var anchor = this.generateAnchor(headingEl); | ||
var $heading = $(headingEl); | ||
var text = $heading.data('toc-text') || $heading.text(); | ||
return this.generateNavEl(anchor, text); | ||
}, | ||
|
||
// Find the first heading level (`<h1>`, then `<h2>`, etc.) that has more than one element. Defaults to 1 (for `<h1>`). | ||
getTopLevel: function($scope) { | ||
for (var i = 1; i <= 6; i++) { | ||
var $headings = this.findOrFilter($scope, 'h' + i); | ||
if ($headings.length > 1) { | ||
return i; | ||
} | ||
} | ||
|
||
return 1; | ||
}, | ||
|
||
// returns the elements for the top level, and the next below it | ||
getHeadings: function($scope, topLevel) { | ||
var topSelector = 'h' + topLevel; | ||
|
||
var secondaryLevel = topLevel + 1; | ||
var secondarySelector = 'h' + secondaryLevel; | ||
|
||
return this.findOrFilter($scope, topSelector + ',' + secondarySelector); | ||
}, | ||
|
||
getNavLevel: function(el) { | ||
return parseInt(el.tagName.charAt(1), 10); | ||
}, | ||
|
||
populateNav: function($topContext, topLevel, $headings) { | ||
var $context = $topContext; | ||
var $prevNav; | ||
|
||
var helpers = this; | ||
$headings.each(function(i, el) { | ||
var $newNav = helpers.generateNavItem(el); | ||
var navLevel = helpers.getNavLevel(el); | ||
|
||
// determine the proper $context | ||
if (navLevel === topLevel) { | ||
// use top level | ||
$context = $topContext; | ||
} else if ($prevNav && $context === $topContext) { | ||
// create a new level of the tree and switch to it | ||
$context = helpers.createChildNavList($prevNav); | ||
} // else use the current $context | ||
|
||
$context.append($newNav); | ||
|
||
$prevNav = $newNav; | ||
}); | ||
}, | ||
|
||
parseOps: function(arg) { | ||
var opts; | ||
if (arg.jquery) { | ||
opts = { | ||
$nav: arg | ||
}; | ||
} else { | ||
opts = arg; | ||
} | ||
opts.$scope = opts.$scope || $(document.body); | ||
return opts; | ||
} | ||
}, | ||
|
||
// accepts a jQuery object, or an options object | ||
init: function(opts) { | ||
opts = this.helpers.parseOps(opts); | ||
|
||
// ensure that the data attribute is in place for styling | ||
opts.$nav.attr('data-toggle', 'toc'); | ||
|
||
var $topContext = this.helpers.createChildNavList(opts.$nav); | ||
var topLevel = this.helpers.getTopLevel(opts.$scope); | ||
var $headings = this.helpers.getHeadings(opts.$scope, topLevel); | ||
this.helpers.populateNav($topContext, topLevel, $headings); | ||
} | ||
}; | ||
|
||
$(function() { | ||
$('nav[data-toggle="toc"]').each(function(i, el) { | ||
var $nav = $(el); | ||
Toc.init($nav); | ||
}); | ||
}); | ||
})(); |