docsjs
Version:
HTML/Markdown-only documentation generator
1,121 lines (1,090 loc) • 149 kB
JavaScript
// JavaScript Document
// Planned for future releases: allow topics and sections to be embedded in e-g/e-x, documentation search, menu as a popup on mobile (make other things popup on mobile), Jump to minimized topic will maximize
/*
MIT License
Copyright (c) 2017 Hailiax
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
//////////////////////
/////// Basics ///////
//////////////////////
var DocsJS = {};
DocsJS.aceTheme = {
Hailaxian: 'chrome',
Minimal: 'clouds'
};
DocsJS.apply = function (func){
'use strict';
var docs = document.getElementsByTagName('docs-js');
for (var docIndex = 0; docIndex < docs.length; docIndex++){
func(docs[docIndex], docIndex);
}
};
DocsJS.forEach = function(nodes,callback){
'use strict';
for (var n = 0; n < nodes.length; n++){
callback(nodes[n],n);
}
};
DocsJS.origin = document.getElementsByTagName('script')[document.getElementsByTagName('script').length - 1].src;
DocsJS.init = function(callback){
'use strict';
// *** console.log('DocsJS: init started @',performance.now());
// Convert markdown
showdown.setOption('omitExtraWLInCodeBlocks', true);
showdown.setOption('noHeaderId', true);
showdown.setOption('parseImgDimensions', true);
showdown.setOption('strikethrough', true);
showdown.setOption('tables', true);
showdown.setOption('tasklists', true);
showdown.setOption('openLinksInNewWindow', true);
showdown.setOption('backslashEscapesHTMLTags', true);
DocsJS.apply(function(doc){
if (doc.getAttribute('mode') === 'markdown'){
var converter = new showdown.Converter(),
text = doc.innerHTML.replace(/<!--/g,'').replace(/-->/g,''),
html = converter.makeHtml(text);
doc.innerHTML = html;
var nodes = doc.querySelectorAll('*');
var open = [];
for (var index = 0; index < nodes.length; index++){
var node = nodes[index];
switch (node.tagName.toUpperCase()){
case 'H1':
node.outerHTML = '<!--</t-x></s-c><s-c>\r\n<h-d>\r\n<t-l>-->'+node.innerHTML+'<!--</t-l>\r\n<t-x>-->';
open.push(['s-c',1]);
open.push(['h-d',1]);
open.push(['t-x',1]);
break;
case 'H2':
node.outerHTML = '<!--</'+open[open.length-1][0]+'>\r\n</'+open[open.length-2][0]+'>\r\n<t-p>\r\n<t-l>-->'+node.innerHTML+'<!--</t-l>\r\n<t-x>-->';
open.pop();
open.pop();
open.push(['t-p',2]);
open.push(['t-x',2]);
break;
case 'PRE':
var mode = node.querySelector('code').className.split(' ')[0] || 'plain_text';
mode = mode.toLowerCase();
switch (mode){
case 'js':
mode = 'javascript';
break;
case 'bash':
mode = 'sh';
break;
case 'cpp':
mode = 'c_cpp';
break;
}
node.outerHTML = '<!--</t-x>\r\n<e-g>\r\n--><c-d docsjs-lang="'+mode+'">'+node.querySelector('code').innerHTML+'</c-d><!--\r\n</e-g>\r\n<t-x>-->';
break;
}
}
for (var unclosed = open.length; unclosed > 0; unclosed--){
doc.innerHTML += '<!--\r\n</'+open[unclosed-1][0]+'>-->';
}
doc.innerHTML = doc.innerHTML.replace(/<!--/g,'').replace(/-->/g,'');
var selector = 'docs-js>*';
nodes = document.querySelectorAll(selector);
var depth = 0;
while (nodes.length > 0){
for (var n = 0; n < nodes.length; n++){
nodes = document.querySelectorAll(selector);
var tabs = '';
for (var d = 0; d < depth; d++){
tabs += '<!--\t-->';
}
var split = nodes[n].outerHTML.split('\n');
if (split[split.length-1].charAt(0) === '<' && split[split.length-1].charAt(1) === '/'){
split[split.length-1] = tabs + split[split.length-1];
}
nodes[n].outerHTML = tabs+split.join('\n');
}
depth++;
selector += '>*';
nodes = document.querySelectorAll(selector);
}
doc.innerHTML = doc.innerHTML.replace(/<!--/g,'').replace(/-->/g,'');
if (!DocsJS.doNotLogConvertedMarkdown){
console.log(doc.innerHTML);
console.log('See your converted Markdown above.\n\nIf you switch to regular DocsJS syntax, make sure to remove mode="markdown" on your <docs-js> tag.\n\nTo disable this message, set DocsJS.doNotLogConvertedMarkdown = true;');
}
DocsJS.eg.name = 'Code';
}
});
// Set theme
if (document.getElementById('DocsJS-theme') !== null){
DocsJS.theme = document.getElementById('DocsJS-theme').href.split('/');
DocsJS.theme = DocsJS.theme[DocsJS.theme.length-1].split('.')[0];
if (DocsJS.aceTheme[DocsJS.theme] === undefined){
console.error(DocsJS.theme + ' is not a theme used by DocsJS. DocsJS will assume the theme (DocsJS.theme =) "Hailaxian" and will use the Ace c-d theme (DocsJS.cd.theme =) "chrome".');
DocsJS.theme = 'Hailaxian';
}
}
// Add essential compenents
DocsJS.apply(function(doc){
doc.innerHTML = '<main role="main"><s-c><button role="button" docsjs-tag="accessibility-button" tabindex="0" onclick="DocsJS.toggleRecommendedAccessibility(this)" onkeydown="DocsJS.accessButtonSpaceClick(this,event)">Accessibility Mode</button><div docsjs-tag="header"></div></s-c><s-c style="display:none;"><button role="button" docsjs-tag="accessibility-button" tabindex="0" onclick="DocsJS.toggleExtendedAccessibility()" onkeydown="DocsJS.accessButtonSpaceClick(this,event)">Extended Accessibility Mode</button></s-c>'+doc.innerHTML+'</main>';
});
DocsJS.apply(function(doc){
doc.style.fontSize = DocsJS.fontsize._value + 'px';
doc.innerHTML += '<div></div>'+
'<div docsjs-tag="menu" style="display: none;"></div>' +
'<div docsjs-tag="column-left" docsjs-state="none" style="position:fixed;">'+DocsJS.column.choice(-1)+'</div>' +
'<div docsjs-tag="column-right" docsjs-state="none" style="left:100%;position:fixed;">'+DocsJS.column.choice(1)+'</div>' +
'<div docsjs-extras="learnmore" style="position: relative; width: 100%; height: 1.25em; line-height:1.25em; text-align: center; font-size: 0.75em; opacity: 0.5; text-shadow: -0.04em -0.04em 0.12em #fff,0.04em 0.04em 0.12em #fff,-0.04em 0.04em 0.12em #fff,0.04em -0.04em 0.12em #fff;"><a href="https://hailiax.io/docsjs/" target="_blank" style="text-decoration: none; color: #000; line-height: 1.25em;">– Powered by Docs.JS –</a></div><div docsjs-tag="bg" docsjs-extra="invert"></div>';
});
DocsJS.fontsize._init = DocsJS.fontsize._value;
// Finish initiation
var finish = function(){
// *** console.log('DocsJS: DocsJS.refresh() done @',performance.now());
window.setTimeout(function(){
// Watch events
DocsJS.addEvent(window,'scroll',DocsJS.scrolled);
DocsJS.addEvent(window,'resize',DocsJS.resized);
DocsJS.addEvent(window,'hashchange',DocsJS.hashchanged);
DocsJS.resized();
// Check for min and max
var duration = DocsJS.animation.duration;
DocsJS.animation.duration = 0;
DocsJS.apply(function(doc){
DocsJS.forEach(doc.querySelectorAll('[docsjs-state="max"]'),function(el){
if (el.tagName.toUpperCase() === 'E-X' || el.tagName.toUpperCase() === 'E-G'){
el.setAttribute('docsjs-internal-default','max');
DocsJS.rotate(el.previousSibling.querySelector('[docsjs-tag="button-ebefore"]'),90);
} else if (el.tagName.toUpperCase() === 'T-P' || el.tagName.toUpperCase() === 'H-D'){
el.setAttribute('docsjs-internal-default','max');
} else if (el.tagName.toUpperCase() === 'S-C'){
el.setAttribute('docsjs-internal-default','max');
}
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-state="min"]'),function(el){
if (el.tagName.toUpperCase() === 'E-X' || el.tagName.toUpperCase() === 'E-G'){
el.setAttribute('docsjs-internal-default','min');
el.docsjs.state = 'max';
el.previousSibling.onclick();
} else if (el.tagName.toUpperCase() === 'T-P' || el.tagName.toUpperCase() === 'H-D'){
el.setAttribute('docsjs-internal-default','min');
el.docsjs.state = 'max';
el.querySelector('t-l').onclick({target:{docsjs:{tag:'T-L'}}});
} else if (el.tagName.toUpperCase() === 'S-C'){
el.setAttribute('docsjs-internal-default','min');
el.docsjs.state = 'max';
el.querySelector('[docsjs-tag="button-minimize"]').onclick();
}
});
});
// Accessibility styles
var accessStyle = document.createElement('style');
(document.head || document.getElementsByTagName("head")[0]).appendChild(accessStyle);
var accessStyleText = '[docsjs-tag=accessibility-mode-content] h1,[docsjs-tag=accessibility-mode-content] h2,[docsjs-tag=accessibility-mode-content] h3,[docsjs-tag=accessibility-mode-content] h4,[docsjs-tag=accessibility-mode-content] h5,[docsjs-tag=accessibility-mode-content] h6{line-height:2em;font-weight:bold;text-decoration:underline;margin:0}[docsjs-tag=accessibility-mode-wrapper]{position:fixed;width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch;z-index:999999999999;padding:1em;box-sizing:border-box;background:#eaeaea}[docsjs-tag=accessibility-mode-content]{position:relative;width:100%;left:0;right:0;margin-left:auto;margin-right:auto;padding:1em;background-color:'+DocsJS.getStyle(document.querySelector('t-x'),'background-color')+';color:'+DocsJS.getStyle(document.querySelector('t-x'),'color')+';box-shadow:0 5px 20px 3px rgba(0,0,0,.3);box-sizing:border-box;overflow:hidden;font-size:1.2em}[docsjs-tag=accessibility-mode-content] p[docsjs-tag=textNode]{display:inline;margin-top:0;margin-bottom:0}[docsjs-tag=accessibility-mode-content] h1{font-size:2.5em}[docsjs-tag=accessibility-mode-content] h2{font-size:2em}[docsjs-tag=accessibility-mode-content] h3{font-size:1.6em}[docsjs-tag=accessibility-mode-content] h4{font-size:1.4em}[docsjs-tag=accessibility-mode-content] h5{font-size:1.2em}[docsjs-tag=accessibility-mode-content] h6{font-size:1.2em; font-weight: regular;}';
if (typeof accessStyle.styleSheet === 'undefined'){
accessStyle.innerHTML = accessStyleText;
} else{
accessStyle.styleSheet.cssText = accessStyleText;
}
// *** console.log('DocsJS: layout done @',performance.now());
window.setTimeout(function(){
// Init cd
DocsJS.cd.refresh();
// *** console.log('DocsJS: Ace done @',performance.now());
if (callback === undefined){callback = function(){};}
DocsJS.cache.initiated = true;
DocsJS.scrolled();
// Apply sidebars option
var sidebars = document.querySelector('docs-js').getAttribute('sidebars');
var menuCompensation = 200;
if (sidebars !== null){
sidebars = sidebars.split(' ');
switch (sidebars[0]){
case 'choice':
break;
case 'none':
document.querySelector('[docsjs-tag="column-left"]').style.display = 'none';
break;
case 'menu':
if (DocsJS.window.width() > DocsJS.width.min + 500){
DocsJS.cache.events.columnchoice = 'menu';
DocsJS.cache.events.oncolumn = -1;
DocsJS.column.start(-1);
menuCompensation = 0;
}
break;
case 'e-g':
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.cache.events.columnchoice = 'e-g';
DocsJS.cache.events.oncolumn = -1;
DocsJS.column.start(-1);
}
break;
case 'e-x':
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.cache.events.columnchoice = 'e-x';
DocsJS.cache.events.oncolumn = -1;
DocsJS.column.start(-1);
}
break;
}
switch (sidebars[1]){
case 'choice':
break;
case 'none':
document.querySelector('[docsjs-tag="column-right"]').style.display = 'none';
break;
case 'menu':
if (menuCompensation > 0){
if (DocsJS.window.width() > DocsJS.width.min + 500){
DocsJS.cache.events.columnchoice = 'menu';
DocsJS.cache.events.oncolumn = 1;
DocsJS.column.start(1);
menuCompensation = 0;
}
}
break;
case 'e-g':
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.cache.events.columnchoice = 'e-g';
DocsJS.cache.events.oncolumn = 1;
DocsJS.column.start(1);
} else{
menuCompensation = 400;
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.column.stop(-1);
DocsJS.cache.events.columnchoice = 'e-g';
DocsJS.cache.events.oncolumn = 1;
DocsJS.column.start(1);
}
}
break;
case 'e-x':
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.cache.events.columnchoice = 'e-x';
DocsJS.cache.events.oncolumn = 1;
DocsJS.column.start(1);
} else{
menuCompensation = 400;
if (DocsJS.window.width() > DocsJS.width.max - menuCompensation){
DocsJS.column.stop(-1);
DocsJS.cache.events.columnchoice = 'e-x';
DocsJS.cache.events.oncolumn = 1;
DocsJS.column.start(1);
}
}
break;
}
}
// Done
DocsJS.hashchanged();
DocsJS.cd.refresh();
DocsJS.animation.duration = duration;
callback();
DocsJS.events.ready();
// *** console.log('DocsJS: ready @',performance.now());
},0);
},0);
};
// *** console.log('DocsJS: Essentials rendered @',performance.now());
window.setTimeout(function(){
DocsJS.refresh(finish);
},0);
};
window.html5 = {
'elements': 's-c h-d t-p t-l t-x e-g e-x c-d docs-js main nav code button'
};
DocsJS.refresh = function(callback){
'use strict';
// Set theme
if (DocsJS.cache.initiated){
document.getElementsByTagName('head')[0].removeChild(document.getElementById('DocsJS-theme'));
if (DocsJS.theme !== null){
var themeSheetSrc = DocsJS.origin.split('/');
themeSheetSrc.pop();
themeSheetSrc = themeSheetSrc.join('/') + '/themes/'+DocsJS.theme+'.min.css';
var themeSheet = document.createElement('link');
themeSheet.rel = 'stylesheet';
themeSheet.href = themeSheetSrc;
themeSheet.id = 'DocsJS-theme';
document.getElementsByTagName('head')[0].appendChild(themeSheet);
}
}
// Process varible tags
DocsJS.apply(function(doc){
doc.outerHTML = doc.outerHTML
.replace(/<v-r (.*?)\W/g,'<v-r docsjs-tag="v-r" aria-hidden="true" docsjs-name="$1"');
});
DocsJS.apply(function(doc){
var varHolder = {};
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="v-r"]'),function(el){
if (JSON.stringify(el.innerHTML).replace(/\\[\s\S]/g,'').length > 2){
varHolder[el.docsjs.name] = el.innerHTML;
el.style.display = 'none';
} else{
el.outerHTML = varHolder[el.docsjs.name];
}
});
});
// Add buttons and formatting
DocsJS.apply(function(doc){
var recurse;
recurse = function(s){
DocsJS.forEach(s.querySelectorAll('h-d > t-l'),function(el){
el.parentElement.setAttribute('aria-labelledby','docsjs-aria-section-'+el.textContent.replace(/\W+/g,'_'));
el.setAttribute('docsjs-arialabel','docsjs-aria-section-'+el.textContent.replace(/\W+/g,'_'));
var minimizeButton = document.createElement('div');
minimizeButton.setAttribute('docsjs-tag','button-minimize');
minimizeButton.innerHTML = DocsJS.buttons.minimize.html();
el.appendChild(minimizeButton);
recurse(el);
});
};
recurse(doc);
var tpCounter = 0;
var state = 'active';
recurse = function(s){
tpCounter++;
DocsJS.forEach(s.querySelectorAll('t-p > t-l'),function(el){
el.parentElement.setAttribute('aria-labelledby','docsjs-aria-topic-'+el.textContent.replace(/\W+/g,'_')+tpCounter);
el.setAttribute('docsjs-arialabel','docsjs-aria-topic-'+el.textContent.replace(/\W+/g,'_')+tpCounter);
var minimizeButton = document.createElement('div');
minimizeButton.setAttribute('docsjs-tag','button-menu');
minimizeButton.setAttribute('docsjs-state',state);
minimizeButton.setAttribute('docsjs-internal','menuHidden');
minimizeButton.innerHTML = DocsJS.buttons.menu.html();
el.appendChild(minimizeButton);
state = 'inactive';
recurse(el);
});
};
recurse(doc);
var egCounter = 0;
recurse = function(s){
egCounter++;
DocsJS.forEach(s.querySelectorAll('e-g'),function(el){
el.setAttribute('labelledby','docsjs-aria-eg-'+(el.docsjs.name === undefined? DocsJS.eg.name.replace(/\W+/g,'_')+egCounter : el.docsjs.name.replace(/\W+/g,'_')+egCounter));
if (el.docsjs.state === undefined){
el.setAttribute('docsjs-state',DocsJS.eg.defaultState);
}
if (el.previousSibling === null || el.previousSibling.docsjs === undefined || (el.previousSibling.tagName.toUpperCase() !== 'ebefore' && el.parentElement.tagName.toUpperCase() !== 'column-content')){
el.insertAdjacentHTML( 'beforeBegin', '<div docsjs-tag="ebefore" role="button" tabindex="0" id="docsjs-aria-eg-'+(el.docsjs.name === undefined? DocsJS.eg.name.replace(/\W+/g,'_')+egCounter : el.docsjs.name.replace(/\W+/g,'_')+egCounter)+'"><div docsjs-tag="button-ebefore" >'+DocsJS.buttons.eg.html()+'</div>'+(el.docsjs.name === undefined? DocsJS.eg.name : el.docsjs.name)+'</div>' );
}
recurse(el);
});
};
recurse(doc);
var exCounter = 0;
recurse = function(s){
exCounter++;
DocsJS.forEach(s.querySelectorAll('e-x'),function(el){
el.setAttribute('labelledby','docsjs-aria-ex-'+(el.docsjs.name === undefined? DocsJS.eg.name.replace(/\W+/g,'_')+exCounter : el.docsjs.name.replace(/\W+/g,'_')+exCounter));
if (el.docsjs.state === undefined){
el.setAttribute('docsjs-state',DocsJS.ex.defaultState);
}
if (el.previousSibling === null || el.previousSibling.docsjs === undefined || el.previousSibling.tagName.toUpperCase() !== 'ebefore'){
el.insertAdjacentHTML( 'beforeBegin', '<div docsjs-tag="ebefore" role="button" tabindex="0" id="docsjs-aria-ex-'+(el.docsjs.name === undefined? DocsJS.ex.name.replace(/\W+/g,'_')+exCounter : el.docsjs.name.replace(/\W+/g,'_')+exCounter)+'"><div docsjs-tag="button-ebefore" >'+DocsJS.buttons.ex.html()+'</div>'+(el.docsjs.name === undefined? DocsJS.ex.name : el.docsjs.name)+'</div>' );
}
recurse(el);
});
};
recurse(doc);
recurse = function(s){
DocsJS.forEach(s.querySelectorAll('t-p,h-d'),function(el){
el.innerHTML += '<div docsjs-tag="efiller" docsjs-side="left" aria-hidden="true"></div><div docsjs-tag="efiller" docsjs-side="right" aria-hidden="true"></div>';
if (el.docsjs.state === undefined){
el.setAttribute('docsjs-state','max');
}
recurse(el);
});
};
recurse(doc);
recurse = function(s){
DocsJS.forEach(s.querySelectorAll('s-c'),function(el){
if (el.querySelector('h-d') !== null){
el.setAttribute('aria-labelledby','docsjs-aria-section-'+el.querySelector('h-d').querySelector('t-l').textContent.replace(/\W+/g,'_'));
}
if (el.docsjs.state === undefined){
el.setAttribute('docsjs-state','max');
}
recurse(el);
});
};
recurse(doc);
});
// Generate accessiblity
DocsJS.apply(function(doc){
var access = '';
DocsJS.forEach(doc.querySelectorAll('docs-js>main>s-c'),function(el){
var read = function(el, level){
if (level > 6){level = 6;}
DocsJS.forEach(el.childNodes,function(el){
if (el.nodeType === 1){
switch (el.hasAttribute('docsjs-tag')? el.tagName.toUpperCase(): el.tagName.toUpperCase()){
case 'H-D':
read(el,(level+1));
level++;
break;
case 'T-P':
read(el,(level+1));
break;
case 'S-C':
read(el,level);
break;
case 'T-L':
el.innerHTML = '<h'+(level+1)+' id="'+el.docsjs.arialabel+'">'+el.innerHTML+'</h'+(level+1)+'>';
access += '<h'+level+'>'+el.textContent+'</h'+level+'>';
break;
case 'T-X':
read(el,level);break;
case 'E-G':
access += '<h'+(level+1)+'>'+(el.hasAttribute('docsjs-name')? el.docsjs.name: DocsJS.eg.name)+'</h'+(level+1)+'>';
read(el,level);break;
case 'E-X':
access += '<h'+(level+1)+'>'+(el.hasAttribute('docsjs-name')? el.docsjs.name: DocsJS.ex.name)+'</h'+(level+1)+'>';
read(el,level);break;
case 'C-D':
access += '<pre style="position:relative; display:block; overflow:auto;"><code>'+el.innerHTML+'</code></pre>';
break;
case 'ebefore':
case 'efiller':
break;
default:
access += el.outerHTML;
break;
}
} else if (el.nodeType === 3){
access += '<p docsjs-tag="textNode">'+el.nodeValue.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
return '&#'+i.charCodeAt(0)+';' + '</p>';
});
}
});
};
read(el, -1);
});
DocsJS.cache.accessibility = '<main role="main" docsjs-tag="accessibility"><div docsjs-tag="accessibility-mode-wrapper"><div docsjs-tag="accessibility-mode-background"></div><div docsjs-tag="accessibility-mode-content" style="max-width:'+DocsJS.width.max+'px;">'+access+'</div></div></main>';
});
// Generate menu
DocsJS.apply(function(doc,index){
var menu = doc.querySelector('[docsjs-tag="menu"]');
var readStructure = function(parent, location){
var structure = '';
var contents = parent.querySelectorAll('s-c,t-p');
if (contents.length !== 0){
var sub = 0;
for (var i = 0; i < contents.length; i++){
if (contents[i].nodeType === 1 && contents[i].parentElement === parent){
var newLocation = location + ',' + (i-sub);
contents[i].setAttribute('docsjs-location','['+newLocation+']');
var title = (contents[i].querySelector('t-l') || contents[i].querySelector('h-d > t-l') || undefined);
if (title !== undefined){
structure += '<div docsjs-tag="menu-item" docsjs-state="max" onclick="'+"if ((event.target || (event.srcElement || event.originalTarget)) === this){if (this.docsjs.state === 'min'){this.docsjs.state = 'max';} else{this.docsjs.state = 'min';}}"+'"><div docsjs-tag="menu-title" role="button" tabindex="0" aria-labelledby="Navigate to '+title.innerText+'" docsjs-state="" docsjs-menu-location="['+newLocation+']" onkeyup="DocsJS.spaceClick(this,event)" onclick="DocsJS._menuClicked(this,['+newLocation+']);" docsjs-menu-destination="'+contents[i].tagName.toUpperCase()+'">'+title.innerText+'</div>'+readStructure(contents[i],newLocation)+'</div>';
}
} else{
sub++;
}
}
return structure;
} else{
return '';
}
};
menu.innerHTML = '<div docsjs-tag="menu-preferences"><div docsjs-tag="menu-preferences-item" docsjs-pref="aA" role="button" tabindex="0" aria-label="Increase Font-size">'+DocsJS.buttons.fontplus()+'</div><div docsjs-tag="menu-preferences-item" docsjs-pref="Aa" role="button" tabindex="0" aria-label="Decrease Font-size">'+DocsJS.buttons.fontminus()+'</div><div docsjs-tag="menu-preferences-item" docsjs-pref="O" role="button" tabindex="0" aria-label="Minimize everything">'+DocsJS.buttons.menuminimized()+'</div>'+/*'<div docsjs-tag="menu-preferences-item" docsjs-pref="CM" role="button" tabindex="0" aria-label="Expand summaries and minimize everything else">'+DocsJS.buttons.partialminimize()+'</div>'+*/'<div docsjs-tag="menu-preferences-item" docsjs-pref="C" role="button" tabindex="0" aria-label="Expand everything">'+DocsJS.buttons.menuminimize()+'</div><div docsjs-tag="menu-preferences-item" docsjs-pref="Iv" role="button" tabindex="0" aria-label="Invert colors">'+DocsJS.buttons.invert()+'</div>'+/*'<div docsjs-tag="menu-preferences-item" docsjs-pref="GPU" role="button" tabindex="0" aria-label="Remove animations">'+DocsJS.buttons.gpu()+'</div>'+*/'<div docsjs-tag="menu-preferences-item" docsjs-pref="Rs">'+DocsJS.buttons.reset()+'</div></div>'+
'<div docsjs-tag="menu-item"><div docsjs-tag="menu-title" docsjs-state="youarehere" docsjs-menu-internal="top" onclick="DocsJS._menuClicked(this,true);">'+DocsJS.menu.top+'</div></div>'+
readStructure(doc.querySelector('main') || doc, index)+
'<div docsjs-tag="menu-item"><div docsjs-tag="menu-title" docsjs-state="" docsjs-menu-internal="btm" onclick="DocsJS._menuClicked(this,false);">'+DocsJS.menu.bottom+'</div></div>';
doc.querySelector('[docsjs-tag="header"]').innerHTML = '';
DocsJS.forEach(doc.querySelectorAll('main>s-c'),function(el){
try{doc.querySelector('[docsjs-tag="header"]').innerHTML += '<span onclick="DocsJS.scroll('+el.docsjs.location+')">' + el.querySelector('t-l').textContent + '</span> ';}catch(e){}
});
});
// Bind buttons
DocsJS.apply(function(doc){
DocsJS.bindPrefs();
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-minimize"]'),function(el){
var click = function(){
el.onclick = function(){};
var d = (el.parentElement.parentElement.parentElement.parentElement.docsjs.state === 'max')? 1 : 0;
var tl = el.parentElement.parentElement;
var hd = el.parentElement.parentElement.parentElement;
var sc = el.parentElement.parentElement.parentElement.parentElement;
var tlHeight = parseInt(DocsJS.getStyle(tl,'height')) + parseInt(DocsJS.getStyle(tl,'padding-top')) + parseInt(DocsJS.getStyle(tl,'padding-bottom')) + parseInt(DocsJS.getStyle(tl,'border-top-width')) + parseInt(DocsJS.getStyle(tl,'border-bottom-width')) + parseInt(DocsJS.getStyle(sc,'padding-top')) + parseInt(DocsJS.getStyle(sc,'padding-bottom')) + parseInt(DocsJS.getStyle(sc,'border-top-width')) + parseInt(DocsJS.getStyle(sc,'border-bottom-width'));
var scStyle = sc.style.height;
sc.style.height = '';
var hdStyle = hd.style.height;
hd.style.height = '';
var scHeight = parseInt(DocsJS.getStyle(sc,'height'));
sc.style.height = scStyle;
hd.style.height = hdStyle;
DocsJS.animate({
from: d, to: 1-d, duration: DocsJS.animation.duration, easing: DocsJS.easings.easeOutQuart,
pass: [el,d,scHeight,tlHeight],
step: function(now, pass){
DocsJS.buttons.minimize.animation(pass[0].querySelector('[docsjs-tag="button-parent"]'),now);
pass[0].parentElement.parentElement.parentElement.parentElement.style.height = (pass[2]-pass[3])*now + pass[3] + 'px';
},
callback: function(pass){
if (pass[1] === 0){
pass[0].parentElement.parentElement.parentElement.parentElement.style.height = '';
} else{
pass[0].parentElement.parentElement.parentElement.parentElement.style.height = pass[3] + 'px';
}
pass[0].onclick = click;
DocsJS.scrolled();
DocsJS.column.align(doc);
}
});
if (d === 0){
el.parentElement.parentElement.parentElement.parentElement.docsjs.state = 'max';
if (el.parentElement.parentElement.parentElement.docsjs.state === 'min'){
el.parentElement.parentElement.onclick({target:{docsjs:{tag:'_change'}}});
}
} else{
el.parentElement.parentElement.parentElement.parentElement.docsjs.state = 'min';
if (el.parentElement.parentElement.parentElement.docsjs.state === 'max'){
el.parentElement.parentElement.onclick({target:{docsjs:{tag:'_change'}}});
}
}
DocsJS.forEach(doc.querySelectorAll('[docsjs-menu-location="'+el.parentElement.parentElement.parentElement.parentElement.docsjs.location+'"]'),function(el){
el.parentElement.docsjs.state = d === 0? 'max' : 'min';
});
DocsJS.events.sectionToggle(el.parentElement.parentElement.parentElement.parentElement);
};
el.onclick = click;
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-menu"]'),function(el){
var click = function(){
el.onclick = function(){};
var d = (el.docsjs.internal === 'menuHidden')? 1 : 0;
if (d === 1){
var menu = doc.querySelector('[docsjs-tag="menu"]').cloneNode(true);
menu.style.display = 'block';
el.parentElement.parentElement.parentElement.insertBefore(menu,el.parentElement.parentElement.nextElementSibling);
if (el.parentElement.parentElement.parentElement.docsjs.state === 'min'){
el.parentElement.parentElement.onclick({target:{docsjs:{tag:'T-L'}}});
}
el.docsjs.internal = 'menuVisible';
} else{
el.docsjs.internal = 'menuHidden';
}
DocsJS.bindPrefs();
DocsJS.animate({
from: d, to: 1-d, duration: DocsJS.animation.duration, easing: DocsJS.easings.easeOutQuart,
pass: [el,d,parseInt(DocsJS.getStyle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'),'height')),parseInt(DocsJS.getStyle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'),'padding-top')),parseInt(DocsJS.getStyle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'),'padding-bottom')),parseInt(DocsJS.getStyle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'),'border-top-width')),parseInt(DocsJS.getStyle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'),'border-bottom-width'))],
step: function(now, pass){
now = 1-now;
DocsJS.buttons.menu.animation(pass[0].querySelector('[docsjs-tag="button-parent"]'),now);
var mn = pass[0].parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]');
mn.style.height = pass[2]*now+'px';
mn.style.paddingTop = pass[3]*now+'px';
mn.style.paddingBottom = pass[4]*now+'px';
mn.style.borderTopWidth = pass[5]*now+'px';
mn.style.borderBottomWidth = pass[6]*now+'px';
},
callback: function(pass){
if (pass[1] === 0){
pass[0].parentElement.parentElement.parentElement.removeChild(pass[0].parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'));
} else{
var menu = pass[0].parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]');
menu.style.height = 'auto';
menu.style.padding = menu.style.paddingTop = menu.style.paddingBottom = menu.style.borderTopWidth = menu.style.borderBottomWidth = '';
}
pass[0].onclick = click;
DocsJS.column.align(doc);
}
});
DocsJS.events.menuToggle(el.parentElement.parentElement.parentElement.querySelector('[docsjs-tag="menu"]'));
};
el.onclick = click;
});
DocsJS.forEach(doc.querySelectorAll('t-l'),function(el){
var click = function(e){
if ((e.target || (e.srcElement || e.originalTarget)).tagName === 'T-L' || (e.target || (e.srcElement || e.originalTarget)).tagName === 't-l' || (e.target || (e.srcElement || e.originalTarget)).docsjs.tag === 'T-L' || (e.target || (e.srcElement || e.originalTarget)).docsjs.tag === '_change' || (e.target || (e.srcElement || e.originalTarget)).tagName.toUpperCase().charAt(0) === 'H'){
if (el.parentElement.tagName.toUpperCase() === 'H-D' && el.parentElement.parentElement.docsjs.state === 'min' && el.parentElement.docsjs.state === 'min'){
el.querySelector('[docsjs-tag="button-minimize"]').onclick();
} else{
el.onclick = function(){};
var d = (el.parentElement.docsjs.state === 'max')? 1 : 0;
var heightBackup = el.parentElement.style.height;
el.parentElement.style.height = '';
var tpHeight = parseInt(DocsJS.getStyle(el.parentElement,'height'));
el.parentElement.style.height = heightBackup;
var tlHeight = parseInt(DocsJS.getStyle(el,'height'))+parseInt(DocsJS.getStyle(el,'padding-top'))+parseInt(DocsJS.getStyle(el,'padding-bottom'))+parseInt(DocsJS.getStyle(el,'border-top-width'))+parseInt(DocsJS.getStyle(el,'border-bottom-width'));
DocsJS.animate({
from: d, to: 1-d, duration: DocsJS.animation.duration, easing: DocsJS.easings.easeOutQuart,
pass: [el,d,tpHeight-tlHeight,tlHeight],
step: function(now, pass){
pass[0].parentElement.style.height = (pass[2])*now + pass[3] + 'px';
},
callback: function(pass){
if (pass[1] === 0){pass[0].parentElement.style.height = 'auto';}
DocsJS.column.align(doc);
pass[0].parentElement.docsjs.state = (pass[1] === 0)? 'max' : 'min';
pass[0].onclick = click;
}
});
if (el.parentElement.tagName.toUpperCase() === 'T-P'){
DocsJS.forEach(doc.querySelectorAll('[docsjs-menu-location="'+el.parentElement.docsjs.location+'"]'),function(el){
if (el.parentElement.childNodes.length > 1){
el.parentElement.docsjs.state = d === 0? 'max' : 'min';
}
});
}
DocsJS.events.topicToggle(el.parentElement.parentElement);
}
}
};
el.onclick = click;
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="ebefore"]'),function(el){
var click = function(){
el.onclick = function(){};
var d = (el.nextSibling.docsjs.state === 'max')? 1 : 0;
var x = el.nextSibling.style.height;
var y = el.nextSibling.style.paddingTop;
var z = el.nextSibling.style.paddingBottom;
el.nextSibling.style.height = '';
el.nextSibling.style.paddingTop = '';
el.nextSibling.style.paddingBottom = '';
var a = parseInt(DocsJS.getStyle(el.nextSibling,'height'));
var b = parseInt(DocsJS.getStyle(el.nextSibling,'padding-top'));
var c = parseInt(DocsJS.getStyle(el.nextSibling,'padding-bottom'));
var e = parseInt(DocsJS.getStyle(el.nextSibling,'border-top-width'));
var f = parseInt(DocsJS.getStyle(el.nextSibling,'border-bottom-width'));
el.nextSibling.style.height = x;
el.nextSibling.style.paddingTop = y;
el.nextSibling.style.paddingBottom = z;
DocsJS.animate({
from: d, to: 1-d, duration: DocsJS.animation.duration, easing: DocsJS.easings.easeOutQuart,
pass: [el.nextSibling,d,a,b,c,e,f],
step: function(now, pass){
pass[0].style.height = pass[2]*now+'px';
pass[0].style.paddingTop = pass[3]*now+'px';
pass[0].style.paddingBottom = pass[4]*now+'px';
pass[0].style.borderTopWidth = pass[5]*now+'px';
pass[0].style.borderBottomWidth = pass[6]*now+'px';
if (pass[0].tagName.toUpperCase() === 'E-X'){
DocsJS.buttons.ex.animation(pass[0].previousSibling.querySelector('[docsjs-tag="button-ebefore"]'),now);
} else if (pass[0].tagName.toUpperCase() === 'E-G'){
DocsJS.buttons.eg.animation(pass[0].previousSibling.querySelector('[docsjs-tag="button-ebefore"]'),now);
}
},
callback: function(pass){
pass[0].docsjs.state = (pass[1] === 0)? 'max' : 'min';
if (pass[1] === 0){
pass[0].style.height = pass[0].style.paddingTop = pass[0].style.paddingBottom = pass[0].style.borderTopWidth = pass[0].style.borderBottomWidth = '';
} else{
pass[0].style.height = pass[0].style.paddingTop = pass[0].style.paddingBottom = pass[0].style.borderTopWidth = pass[0].style.borderBottomWidth = '0px';
}
pass[0].previousSibling.onclick = click;
DocsJS.scrolled();
DocsJS.column.align(doc);
}
});
DocsJS.events.eToggle(el.nextSibling);
};
el.onclick = click;
el.onkeyup = function(e){
var keyCode = e.which || e.keyCode;
if (keyCode === 32 || keyCode === 13){
click();
}
};
});
});
// Watch column drags
DocsJS.apply(function(doc){
var mousedown = function(e){
if (DocsJS.cache.events.oncolumn !== 0){
DocsJS.removeEvent(doc,'mousedown',mousedown);
var start = e.clientX;
var mousemove = function(e){
var delta = DocsJS.cache.events.oncolumn*(start - e.clientX);
start = e.clientX;
DocsJS.columnOffsets[(DocsJS.cache.events.oncolumn < 0 ? 'left' : 'right')] += delta;
DocsJS.resized();
};
DocsJS.addEvent(doc,'mousemove',mousemove);
var mouseup = function(){
DocsJS.column.align(doc);
DocsJS.removeEvent(doc,'mousemove',mousemove);
DocsJS.removeEvent(doc,'mouseup',mouseup);
DocsJS.cache.events.oncolumn = 0;
DocsJS.resized();
DocsJS.addEvent(doc,'mousedown',mousedown);
};
DocsJS.addEvent(doc,'mouseup',mouseup);
}
};
DocsJS.addEvent(doc,'mousedown',mousedown);
var touchstart = function(e){
if (DocsJS.cache.events.oncolumn !== 0){
DocsJS.removeEvent(doc,'touchstart',touchstart);
exposeClose(1);
var start = e.touches[0].pageX;
var touchmove = function(e){
var delta = DocsJS.cache.events.oncolumn*(start - e.touches[0].pageX);
start = e.touches[0].pageX;
DocsJS.columnOffsets[(DocsJS.cache.events.oncolumn < 0 ? 'left' : 'right')] += delta;
DocsJS.resized();
};
DocsJS.addEvent(doc,'touchmove',touchmove,DocsJS.supports.passive? {passive: true} : false);
var touchend = function(){
exposeClose(0);
DocsJS.column.align(doc);
DocsJS.removeEvent(doc,'touchmove',touchmove);
DocsJS.removeEvent(doc,'touchend',touchend);
DocsJS.cache.events.oncolumn = 0;
DocsJS.resized();
doc.ontouchstart = touchstart;
};
DocsJS.addEvent(doc,'touchend',touchend,DocsJS.supports.passive? {passive: true} : false);
}
};
DocsJS.addEvent(doc,'touchstart',touchstart,DocsJS.supports.passive? {passive: true} : false);
});
// Pass c-d tags to c9 ace
if (DocsJS.cache.initiated){
DocsJS.cd.refresh();
}
// Done
if (typeof callback === 'function'){
callback();
}
return 1;
};
//////////////////////
/////// Events ///////
//////////////////////
DocsJS.hashchanged = function(){
'use strict';
if (!DocsJS.cache.hashChanged){
var location = decodeURIComponent(window.location.hash.substr(1));
if (location !== ''){
try{location = JSON.parse(location);}catch(e){}
DocsJS.scroll(location);
}
} else{
DocsJS.cache.hashChanged = false;
}
};
DocsJS.scrolled = function(){
'use strict';
if (DocsJS.cache.initiated && !DocsJS.cache.scrollDebounce){
DocsJS.cache.scrollDebounce = window.setTimeout(function(){
var topEl = false;
var nextTopEl = false;
var scrollTop = DocsJS.window.scrollTop();
var height = DocsJS.window.height();
var scrollHeight = document.documentElement.scrollHeight;
var vals = [];
var tps = document.querySelectorAll('t-p,h-d');
DocsJS.forEach(tps,function(el){
var tlRect = el.querySelector('t-l').getBoundingClientRect();
vals.push((tlRect.top+tlRect.bottom)/2);
});
DocsJS.forEach(tps,function(el,index){
if (el.tagName.toUpperCase() === 'T-P'){
if (nextTopEl === true){
nextTopEl = index;
}
}
var top = vals[index];
if (top > 0 && el.parentElement.docsjs.state === 'max' && !topEl){
topEl = index;
nextTopEl = true;
}
});
topEl = tps[topEl] || tps[0];
nextTopEl = tps[nextTopEl] || document.querySelector('div[docsjs-tag="button-menu"]').parentElement;
document.querySelector('div[docsjs-state="active"]').docsjs.state = 'inactive';
if (topEl.tagName.toUpperCase() === 'T-P'){
topEl.querySelector('div[docsjs-tag="button-menu"]').docsjs.state = 'active';
} else{
nextTopEl.querySelector('div[docsjs-tag="button-menu"]').docsjs.state = 'active';
}
topEl = topEl.docsjs.location || topEl.parentElement.docsjs.location;
document.querySelector('div[docsjs-state="youarehere"]').docsjs.state = '';
if (scrollTop === 0){
document.querySelector('div[docsjs-menu-internal="top"]').docsjs.state = 'youarehere';
} else if (scrollTop === scrollHeight - height){
document.querySelector('div[docsjs-menu-internal="btm"]').docsjs.state = 'youarehere';
} else{
document.querySelector('div[docsjs-menu-location="'+topEl+'"]').docsjs.state = 'youarehere';
}
var hash = encodeURIComponent(document.querySelector('div[docsjs-state="youarehere"]').docsjs.menuLocation || scrollTop === 0);
if (hash !== window.location.hash.substr(1)){
if (!!(window.history && history.pushState)){
history.replaceState(undefined, undefined, "#"+hash);
}
DocsJS.forEach(document.querySelectorAll('div[docsjs-state="youarehere"]'),function(ti){
ti.docsjs.state = '';
});
if (scrollTop === 0){
DocsJS.forEach(document.querySelectorAll('div[docsjs-menu-internal="top"]'),function(ti){
ti.docsjs.state = 'youarehere';
});
} else if (scrollTop === scrollHeight - height){
DocsJS.forEach(document.querySelectorAll('div[docsjs-menu-internal="btm"]'),function(ti){
ti.docsjs.state = 'youarehere';
});
} else{
DocsJS.forEach(document.querySelectorAll('div[docsjs-menu-location="'+topEl+'"]'),function(ti){
ti.docsjs.state = 'youarehere';
});
}
DocsJS.forEach(document.querySelectorAll('div[docsjs-tag="column-left"] div[docsjs-state="youarehere"]'),function(yr){
var yrRect = yr.getBoundingClientRect();
var diffBtm = height - yrRect.bottom;
var tp = document.querySelector('div[docsjs-tag="column-left"] div[docsjs-tag="menu"]');
var diffTop = yrRect.top - parseInt(DocsJS.getStyle(tp,'margin-top')) - parseInt(DocsJS.getStyle(tp,'padding-top')) - parseInt(DocsJS.getStyle(tp,'border-top-width'));
if (diffBtm < 0){
yr.offsetParent.parentElement.scrollTop -= diffBtm;
} else if (diffTop < 0){
yr.offsetParent.parentElement.scrollTop += diffTop;
}
});
}
DocsJS.cache.scrollDebounce = false;
},150);
}
};
DocsJS.resized = function(){
'use strict';
var docWidth, docMargin, rc, lc;
DocsJS.apply(function(doc){
rc = doc.querySelector('[docsjs-tag="column-right"]');
lc = doc.querySelector('[docsjs-tag="column-left"]');
});
DocsJS.cache.extraWidth = 0;
var minWidth = 100;
var fullWidth = DocsJS.window.width();
if (fullWidth > DocsJS.width.max + 200){
DocsJS.fontsize._scalar = 1;
DocsJS.apply(function(doc){
doc.style.fontSize = DocsJS.fontsize._value+'px';
var width = (fullWidth - DocsJS.width.max)/2;
DocsJS.cache.extraWidth = width-100;
minWidth = (width-200)*-1;
lc.style.width = width+DocsJS.columnOffsets.left+'px';
rc.style.width = width+DocsJS.columnOffsets.right+'px';
rc.style.marginLeft = -1*width-DocsJS.columnOffsets.right+'px';
DocsJS.forEach(doc.querySelectorAll('main > s-c'),function(el){
el.style.width = doc.querySelector('[docsjs-extras="learnmore"]').style.width = docWidth = DocsJS.width.max-DocsJS.columnOffsets.left-DocsJS.columnOffsets.right+'px';
el.style.marginLeft = doc.querySelector('[docsjs-extras="learnmore"]').style.marginLeft = docMargin = width+DocsJS.columnOffsets.left+'px';
});
});
if (DocsJS.width.max-DocsJS.columnOffsets.left-DocsJS.columnOffsets.right < DocsJS.width.min){
if (DocsJS.columnOffsets.left > DocsJS.columnOffsets.right){
DocsJS.columnOffsets.left-=DocsJS.width.min - DocsJS.width.max+DocsJS.columnOffsets.left+DocsJS.columnOffsets.right;
} else{
DocsJS.columnOffsets.right-=DocsJS.width.min - DocsJS.width.max+DocsJS.columnOffsets.left+DocsJS.columnOffsets.right;
}
}
if (DocsJS.columnOffsets.right < minWidth){
DocsJS.columnOffsets.right = minWidth;
}
if (DocsJS.columnOffsets.left < minWidth){
DocsJS.columnOffsets.left = minWidth;
}
} else if (fullWidth > DocsJS.width.min + 200){
DocsJS.fontsize._scalar = 1;
if (DocsJS.column.state[0] === 'none' && fullWidth-DocsJS.width.min < 400){
DocsJS.columnOffsets.left = -25.8765;
} else if (fullWidth-DocsJS.width.min > 400){
if (DocsJS.columnOffsets.left === -25.8765){
DocsJS.columnOffsets.left = 0;
}
}
if (DocsJS.column.state[1] === 'none' && fullWidth-DocsJS.width.min < 400){
DocsJS.columnOffsets.right = -25.8765;
} else if (fullWidth-DocsJS.width.min > 400){
if (DocsJS.columnOffsets.right === -25.8765){
DocsJS.columnOffsets.right = 0;
}
}
if (DocsJS.columnOffsets.left > 0 && DocsJS.column.state[0] === 'none'){
DocsJS.columnOffsets.left = 0;
}
if (DocsJS.columnOffsets.right > 0 && DocsJS.column.state[1] === 'none'){
DocsJS.columnOffsets.right = 0;
}
DocsJS.apply(function(doc){
doc.style.fontSize = DocsJS.fontsize._value+'px';
lc.style.width = 100+DocsJS.columnOffsets.left+'px';
rc.style.width = 100+DocsJS.columnOffsets.right+'px';
rc.style.marginLeft = -1*100-DocsJS.columnOffsets.right+'px';
DocsJS.forEach(doc.querySelectorAll('main > s-c'),function(el){
el.style.width = fullWidth-200-DocsJS.columnOffsets.left-DocsJS.columnOffsets.right+'px';
el.style.marginLeft = 100+DocsJS.columnOffsets.left+'px';
});
});
if (DocsJS.columnOffsets.left < minWidth && DocsJS.column.state[0] !== 'none'){
DocsJS.columnOffsets.left = minWidth;
}
if (DocsJS.columnOffsets.right < minWidth && DocsJS.column.state[1] !== 'none'){
DocsJS.columnOffsets.right = minWidth;
}
} else{
DocsJS.apply(function(doc){
DocsJS.fontsize._scalar = Math.sqrt(fullWidth/(DocsJS.width.min+200));
doc.style.fontSize = DocsJS.fontsize._value*DocsJS.fontsize._scalar+'px';
DocsJS.column.stop(1);
DocsJS.column.stop(-1);
lc.style.width = rc.style.width = rc.style.marginLeft = '0';
DocsJS.forEach(doc.querySelectorAll('main > s-c'),function(el){
el.style.width = '100%';
el.style.marginLeft = '0';
});
});
}
if (DocsJS.cache.initiated){
DocsJS.cd.resize();
if (DocsJS.cache.events.oncolumn === 0){
DocsJS.scrolled();
DocsJS.apply(function(doc){
DocsJS.column.align(doc);
});
}
}
DocsJS.forEach(document.querySelectorAll('[docsjs-tag="column-header"]'),function(hd){
hd.style.width = hd.parentElement.style.width;
});
};
DocsJS._menuClicked = function(el, loc){
'use strict';
if (el.offsetParent.parentElement.tagName.toUpperCase() === 'T-P'){
el.offsetParent.parentElement.querySelector('[docsjs-tag="button-menu"]').onclick();
window.setTimeout(function(){
DocsJS.scroll(loc);
},DocsJS.animation.duration);
} else{
DocsJS.scroll(loc);
}
};
DocsJS.bindPrefs = function(){
'use strict';
DocsJS.apply(function(doc){
DocsJS.forEach(doc.querySelectorAll('[docsjs-pref="aA"]'),function(el){
el.onclick = function(){
DocsJS.fontsize._value++;
DocsJS.resized();
DocsJS.column.align(doc);
DocsJS.scrolled();
DocsJS.events.preferenceChanged('Fontsize up');
};
el.onkeyup = function(e){
var keyCode = e.which || e.keyCode;
if (keyCode === 32 || keyCode === 13){
el.onclick();
}
};
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-pref="Aa"]'),function(el){
el.onclick = function(){
DocsJS.fontsize._value--;
DocsJS.resized();
DocsJS.column.align(doc);
DocsJS.scrolled();
DocsJS.events.preferenceChanged('Fontsize down');
};
el.onkeyup = function(e){
var keyCode = e.which || e.keyCode;
if (keyCode === 32 || keyCode === 13){
el.onclick();
}
};
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-pref="O"]'),function(el){
el.onclick = function(){
DocsJS.forEach(doc.querySelectorAll('t-l'),function(el){
if (el.parentElement.docsjs.state === 'max'){
el.onclick({target:{docsjs:{tag:'T-L'}}});
}
});
window.setTimeout(function(){
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-minimize"]'),function(el){
if (el.parentElement.parentElement.parentElement.parentElement.docsjs.state === 'max'){
el.onclick();
}
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="ebefore"]'),function(el){
if (el.nextElementSibling.docsjs.state === 'max'){
el.onclick();
}
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-menu"]'),function(el){
if (el.docsjs.internal === 'menuVisible'){
el.onclick();
}
});
window.setTimeout(function(){
DocsJS.scrolled();
DocsJS.events.preferenceChanged('Minimize all');
},DocsJS.animation.duration);
},DocsJS.animation.duration);
};
el.onkeyup = function(e){
var keyCode = e.which || e.keyCode;
if (keyCode === 32 || keyCode === 13){
el.onclick();
}
};
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-pref="CM"]'),function(el){
el.onclick = function(){
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-minimize"]'),function(el){
if (el.parentElement.parentElement.parentElement.parentElement.docsjs.state === 'min'){
el.onclick();
}
});
window.setTimeout(function(){
DocsJS.forEach(doc.querySelectorAll('t-l'),function(el){
if (el.parentElement.docsjs.state === 'min'){
el.onclick({target:{docsjs:{tag:'T-L'}}});
}
});
window.setTimeout(function(){
DocsJS.scrolled();
DocsJS.events.preferenceChanged('Minimize half');
},DocsJS.animation.duration);
},DocsJS.animation.duration);
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-menu"]'),function(el){
if (el.docsjs.internal === 'menuVisible'){
el.onclick();
}
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="ebefore"]'),function(el){
if (el.nextElementSibling.docsjs.state === 'max'){
el.onclick();
}
});
};
el.onkeyup = function(e){
var keyCode = e.which || e.keyCode;
if (keyCode === 32 || keyCode === 13){
el.onclick();
}
};
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-pref="C"]'),function(el){
el.onclick = function(){
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="button-minimize"]'),function(el){
if (el.parentElement.parentElement.parentElement.parentElement.docsjs.state === 'min'){
el.onclick();
}
});
DocsJS.forEach(doc.querySelectorAll('[docsjs-tag="ebefore"]'),function(el){
if (el.nextElementSibling.docsjs.state === 'min'){
el.onclick();