262 lines
10 KiB
JavaScript
262 lines
10 KiB
JavaScript
|
document.addEventListener('DOMContentLoaded', function() {
|
||
|
var menuCollapsed = false,
|
||
|
mobileMenu = document.getElementById('mobile-menu');
|
||
|
|
||
|
var localContextInUrl = '';
|
||
|
|
||
|
if (COMPODOC_CURRENT_PAGE_CONTEXT !== '') {
|
||
|
localContextInUrl = localContextInUrl;
|
||
|
switch (COMPODOC_CURRENT_PAGE_CONTEXT) {
|
||
|
case 'additional-page':
|
||
|
localContextInUrl = 'additional-documentation';
|
||
|
break;
|
||
|
case 'class':
|
||
|
localContextInUrl = 'classes';
|
||
|
break;
|
||
|
case 'miscellaneous-functions':
|
||
|
case 'miscellaneous-variables':
|
||
|
case 'miscellaneous-typealiases':
|
||
|
case 'miscellaneous-enumerations':
|
||
|
localContextInUrl = 'miscellaneous';
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hasClass(el, cls) {
|
||
|
return el.className && new RegExp('(\\s|^)' + cls + '(\\s|$)').test(el.className);
|
||
|
}
|
||
|
|
||
|
var processLink = function(link, url) {
|
||
|
if (url.charAt(0) !== '.') {
|
||
|
var prefix = '';
|
||
|
switch (COMPODOC_CURRENT_PAGE_DEPTH) {
|
||
|
case 5:
|
||
|
prefix = '../../../../../';
|
||
|
break;
|
||
|
case 4:
|
||
|
prefix = '../../../../';
|
||
|
break;
|
||
|
case 3:
|
||
|
prefix = '../../../';
|
||
|
break;
|
||
|
case 2:
|
||
|
prefix = '../../';
|
||
|
break;
|
||
|
case 1:
|
||
|
prefix = '../';
|
||
|
break;
|
||
|
case 0:
|
||
|
prefix = './';
|
||
|
break;
|
||
|
}
|
||
|
link.setAttribute('href', prefix + url);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var processMenuLinks = function(links, dontAddClass) {
|
||
|
for (var i = 0; i < links.length; i++) {
|
||
|
var link = links[i];
|
||
|
var linkHref = link.getAttribute('href');
|
||
|
if (linkHref) {
|
||
|
var linkHrefFile = linkHref.substr(linkHref.lastIndexOf('/') + 1, linkHref.length);
|
||
|
if (
|
||
|
linkHrefFile.toLowerCase() === COMPODOC_CURRENT_PAGE_URL.toLowerCase() &&
|
||
|
link.innerHTML.indexOf('Getting started') == -1 &&
|
||
|
!dontAddClass &&
|
||
|
linkHref.toLowerCase().indexOf(localContextInUrl.toLowerCase()) !== -1
|
||
|
) {
|
||
|
link.classList.add('active');
|
||
|
}
|
||
|
processLink(link, linkHref);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var chapterLinks = document.querySelectorAll('[data-type="chapter-link"]');
|
||
|
processMenuLinks(chapterLinks);
|
||
|
var entityLinks = document.querySelectorAll('[data-type="entity-link"]');
|
||
|
processMenuLinks(entityLinks);
|
||
|
var indexLinks = document.querySelectorAll('[data-type="index-link"]');
|
||
|
processMenuLinks(indexLinks, true);
|
||
|
var entityLogos = document.querySelectorAll('[data-type="compodoc-logo"]');
|
||
|
var processLogos = function(entityLogo) {
|
||
|
for (var i = 0; i < entityLogos.length; i++) {
|
||
|
var entityLogo = entityLogos[i];
|
||
|
if (entityLogo) {
|
||
|
var url = entityLogo.getAttribute('data-src');
|
||
|
if (url.charAt(0) !== '.') {
|
||
|
var prefix = '';
|
||
|
switch (COMPODOC_CURRENT_PAGE_DEPTH) {
|
||
|
case 5:
|
||
|
prefix = '../../../../../';
|
||
|
break;
|
||
|
case 4:
|
||
|
prefix = '../../../../';
|
||
|
break;
|
||
|
case 3:
|
||
|
prefix = '../../../';
|
||
|
break;
|
||
|
case 2:
|
||
|
prefix = '../../';
|
||
|
break;
|
||
|
case 1:
|
||
|
prefix = '../';
|
||
|
break;
|
||
|
case 0:
|
||
|
prefix = './';
|
||
|
break;
|
||
|
}
|
||
|
entityLogo.src = prefix + url;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
processLogos(entityLogos);
|
||
|
|
||
|
setTimeout(function() {
|
||
|
document.getElementById('btn-menu').addEventListener('click', function() {
|
||
|
if (menuCollapsed) {
|
||
|
mobileMenu.style.display = 'none';
|
||
|
} else {
|
||
|
mobileMenu.style.display = 'block';
|
||
|
document.getElementsByTagName('body')[0].style['overflow-y'] = 'hidden';
|
||
|
}
|
||
|
menuCollapsed = !menuCollapsed;
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* Native bootstrap doesn't wait DOMContentLoaded event to start his job, re do it here
|
||
|
*/
|
||
|
var Collapses = document.querySelectorAll('[data-toggle="collapse"]');
|
||
|
for (var o = 0, cll = Collapses.length; o < cll; o++) {
|
||
|
var collapse = Collapses[o],
|
||
|
options = {};
|
||
|
options.duration = collapse.getAttribute('data-duration');
|
||
|
new Collapse(collapse, options);
|
||
|
}
|
||
|
|
||
|
// collapse menu
|
||
|
var classnameMenuToggler = document.getElementsByClassName('menu-toggler'),
|
||
|
faAngleUpClass = 'ion-ios-arrow-up',
|
||
|
faAngleDownClass = 'ion-ios-arrow-down',
|
||
|
toggleItemMenu = function(e) {
|
||
|
var element = $(e.target),
|
||
|
parent = element[0].parentNode,
|
||
|
parentLink,
|
||
|
elementIconChild;
|
||
|
if (parent) {
|
||
|
if (!$(parent).hasClass('linked')) {
|
||
|
e.preventDefault();
|
||
|
} else {
|
||
|
parentLink = parent.parentNode;
|
||
|
if (parentLink && element.hasClass('link-name')) {
|
||
|
$(parentLink).trigger('click');
|
||
|
}
|
||
|
}
|
||
|
elementIconChild = parent.getElementsByClassName(faAngleUpClass)[0];
|
||
|
if (!elementIconChild) {
|
||
|
elementIconChild = parent.getElementsByClassName(faAngleDownClass)[0];
|
||
|
}
|
||
|
if (elementIconChild) {
|
||
|
elementIconChild = $(elementIconChild);
|
||
|
if (elementIconChild.hasClass(faAngleUpClass)) {
|
||
|
elementIconChild.addClass(faAngleDownClass);
|
||
|
elementIconChild.removeClass(faAngleUpClass);
|
||
|
} else {
|
||
|
elementIconChild.addClass(faAngleUpClass);
|
||
|
elementIconChild.removeClass(faAngleDownClass);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (var i = 0; i < classnameMenuToggler.length; i++) {
|
||
|
classnameMenuToggler[i].addEventListener('click', toggleItemMenu, false);
|
||
|
}
|
||
|
|
||
|
// Scroll to active link
|
||
|
var menus = document.querySelectorAll('.menu'),
|
||
|
i = 0,
|
||
|
len = menus.length,
|
||
|
activeMenu,
|
||
|
activeMenuClass,
|
||
|
activeLink;
|
||
|
|
||
|
for (i; i < len; i++) {
|
||
|
if (getComputedStyle(menus[i]).display != 'none') {
|
||
|
activeMenu = menus[i];
|
||
|
activeMenuClass = activeMenu.getAttribute('class').split(' ')[0];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (activeMenu) {
|
||
|
activeLink = document.querySelector('.' + activeMenuClass + ' .active');
|
||
|
if (activeLink) {
|
||
|
var linkType = activeLink.getAttribute('data-type');
|
||
|
var linkContext = activeLink.getAttribute('data-context');
|
||
|
if (linkType === 'entity-link') {
|
||
|
var parentLi = activeLink.parentNode,
|
||
|
parentUl,
|
||
|
parentChapterMenu;
|
||
|
if (parentLi) {
|
||
|
parentUl = parentLi.parentNode;
|
||
|
if (parentUl) {
|
||
|
parentChapterMenu = parentUl.parentNode;
|
||
|
if (parentChapterMenu) {
|
||
|
var toggler = parentChapterMenu.querySelector('.menu-toggler'),
|
||
|
elementIconChild = toggler.getElementsByClassName(
|
||
|
faAngleUpClass
|
||
|
)[0];
|
||
|
if (toggler && !elementIconChild) {
|
||
|
toggler.click();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (linkContext && linkContext === 'sub-entity') {
|
||
|
// Toggle also the master parent menu
|
||
|
var linkContextId = activeLink.getAttribute('data-context-id');
|
||
|
var toggler = activeMenu.querySelector(
|
||
|
'.chapter.' + linkContextId + ' a .menu-toggler'
|
||
|
);
|
||
|
if (toggler) {
|
||
|
toggler.click();
|
||
|
}
|
||
|
if (linkContextId === 'additional') {
|
||
|
var mainToggler = activeMenu.querySelector(
|
||
|
'.chapter.' + linkContextId + ' div.menu-toggler'
|
||
|
);
|
||
|
if (mainToggler) {
|
||
|
mainToggler.click();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else if (linkType === 'chapter-link') {
|
||
|
var linkContextId = activeLink.getAttribute('data-context-id');
|
||
|
var toggler = activeLink.querySelector('.menu-toggler');
|
||
|
if (toggler) {
|
||
|
toggler.click();
|
||
|
}
|
||
|
if (linkContextId === 'additional') {
|
||
|
var mainToggler = activeMenu.querySelector(
|
||
|
'.chapter.' + linkContextId + ' div.menu-toggler'
|
||
|
);
|
||
|
if (mainToggler) {
|
||
|
mainToggler.click();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
setTimeout(function() {
|
||
|
activeMenu.scrollTop = activeLink.offsetTop;
|
||
|
if (
|
||
|
activeLink.innerHTML.toLowerCase().indexOf('readme') != -1 ||
|
||
|
activeLink.innerHTML.toLowerCase().indexOf('overview') != -1
|
||
|
) {
|
||
|
activeMenu.scrollTop = 0;
|
||
|
}
|
||
|
}, 300);
|
||
|
}
|
||
|
}
|
||
|
}, 0);
|
||
|
});
|