blob: 6fbc25edaf75aa791acb391077b71ea72a2038a4 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// Platforms we have logos for and their formatted titles. Used for
// converting "mark" elements to logos
var platforms = {
'android': 'Android',
'ios': 'iOS',
'windows': 'Windows',
'ubuntu': 'Ubuntu',
'blackberry': 'Blackberry',
'fireos': 'FireOS',
'firefoxos': 'FirefoxOS',
'webos': 'webOS',
'osx': 'OS X',
'browser': 'Browser',
'electron': 'Electron'
};
$(document).ready(function () {
var HEADER_OFFSET = 50; // in pixels
var TOC_TOP_OFFSET = HEADER_OFFSET + 40;
// if this page's ToC entry can be found, scroll the ToC to it
var thisPageEntry = $(".site-toc-container .this-page");
if (thisPageEntry.length > 0) {
$(".site-toc-container").scrollTop(thisPageEntry.first().position().top - TOC_TOP_OFFSET);
}
function slugifyLikeGitHub(originalText) {
var text = originalText;
// convert to lowercase
text = text.toLowerCase();
// replace spaces with dashes
text = text.replace(/ /g, '-');
// remove unaccepted characters
// NOTE:
// a better regex would have been /[^\d\s\w-_]/ug, but the 'u' flag
// (Unicode) is not supported in some browsers, and we support
// many languages that use Unicode characters
text = text.replace(/[\[\]\(\)\;\:\=\+\?\!\.\,\{\}\\\/\>\<]/g, '');
// trim remaining whitespace
text = text.trim();
return text;
}
function getIdForHeading(heading) {
if (heading.id) {
return heading.id;
} else if (heading.name) {
return heading.name;
} else {
return slugifyLikeGitHub(heading.innerText);
}
}
function permalinkTo(id) {
var anchor = document.createElement("a");
anchor.className = "header-link";
anchor.href = "#" + id;
anchor.innerHTML = "<i class=\"glyphicon glyphicon-link\"></i>";
return anchor;
}
function anchorFor(id) {
var anchor = document.createElement("a");
anchor.className = "fragment-anchor";
anchor.id = id;
return anchor;
}
// go through all headings in the content and add some links
$('#page-toc-source h1, #page-toc-source h2, #page-toc-source h3, #page-toc-source h4, #page-toc-source h5, #page-toc-source h6')
.each(function (i, heading) {
headingId = getIdForHeading(heading);
// add an anchor for linking to the heading
// NOTE:
// we could have set the ID on the heading itself but we didn't
// because the <a> has some extra CSS that floats it above the
// heading and makes it easier to see when linked
$(heading).before(anchorFor(headingId))
// add a permalink to all but the first heading
if (i > 0) {
$(heading).append(permalinkTo(headingId));
}
});
// Table of Contents
$('#page-toc').toc({
'selectors': 'h1,h2', // elements to use as headings
'container': '#page-toc-source', // element to find all selectors in
'prefix': '', // prefix for anchor tags and class names
'onHighlight': function(el) {}, // called when a new section is highlighted
'highlightOnScroll': true, // add class to heading that is currently in focus
'highlightOffset': 100, // offset to trigger the next headline
'anchorName': function(i, heading, prefix) { // custom function for anchor name
return getIdForHeading(heading);
},
'headerText': function(i, heading, $heading) { // custom function building the header-item text
return $heading.text();
},
'itemClass': function(i, heading, $heading, prefix) { // custom function for item class
// don't assign any special classes to the toc entry itself
return '';
}
});
$('mark').each(function(index, element) {
var platform = element.innerText.toLowerCase();
platform = platform.replace(/ /g, '');
if (platforms[platform]) {
$(element).addClass('logo');
$(element).addClass(platform);
$(element).attr('title', platforms[platform]);
element.innerText = '';
}
});
});