// 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 = ""; 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 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 = ''; } }); });