aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js
diff options
context:
space:
mode:
authorMarcin Aman <marcin.aman@gmail.com>2020-10-07 13:58:46 +0200
committerGitHub <noreply@github.com>2020-10-07 13:58:46 +0200
commite9f5da45c0fcfec5f7c150229301904d7915e090 (patch)
treec094b57b37fec4c901bbfaa508268d354a4dc4c8 /plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js
parentde6019337ae0e97e73db7fa9394e88ec2de4aeed (diff)
downloaddokka-e9f5da45c0fcfec5f7c150229301904d7915e090.tar.gz
dokka-e9f5da45c0fcfec5f7c150229301904d7915e090.tar.bz2
dokka-e9f5da45c0fcfec5f7c150229301904d7915e090.zip
Make logo replaceable #1339 (#1488)
Diffstat (limited to 'plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js')
-rw-r--r--plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js256
1 files changed, 0 insertions, 256 deletions
diff --git a/plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js b/plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js
deleted file mode 100644
index 022aca4f..00000000
--- a/plugins/base/src/main/resources/dokka/scripts/platformContentHandler.js
+++ /dev/null
@@ -1,256 +0,0 @@
-filteringContext = {
- dependencies: {},
- restrictedDependencies: [],
- activeFilters: []
-}
-let highlightedAnchor;
-
-window.addEventListener('load', () => {
- document.querySelectorAll("div[data-platform-hinted]")
- .forEach(elem => elem.addEventListener('click', (event) => togglePlatformDependent(event,elem)))
- document.querySelectorAll("div[tabs-section]")
- .forEach(elem => elem.addEventListener('click', (event) => toggleSectionsEventHandler(event)))
- const filterSection = document.getElementById('filter-section')
- if (filterSection) {
- filterSection.addEventListener('click', (event) => filterButtonHandler(event))
- initializeFiltering()
- }
- initTabs()
- handleAnchor()
- initHidingLeftNavigation()
-})
-
-const initHidingLeftNavigation = () => {
- document.getElementById("leftToggler").onclick = function(event) {
- //Events need to be prevented from bubbling since they will trigger next handler
- event.preventDefault();
- event.stopPropagation();
- event.stopImmediatePropagation();
- document.getElementById("leftColumn").classList.toggle("open");
- }
-
- document.getElementById("main").onclick = () => {
- document.getElementById("leftColumn").classList.remove("open");
- }
-}
-
-// Hash change is needed in order to allow for linking inside the same page with anchors
-// If this is not present user is forced to refresh the site in order to use an anchor
-window.onhashchange = handleAnchor
-
-function handleAnchor() {
- if(highlightedAnchor){
- highlightedAnchor.classList.remove('anchor-highlight')
- highlightedAnchor = null;
- }
-
- let searchForTab = function(element) {
- if(element && element.hasAttribute) {
- if(element.hasAttribute("data-togglable")) return element;
- else return searchForTab(element.parentNode)
- } else return null
- }
- let anchor = window.location.hash
- if (anchor != "") {
- anchor = anchor.substring(1)
- let element = document.querySelector('a[data-name="' + anchor+'"]')
- if (element) {
- let tab = searchForTab(element)
- if (tab) {
- toggleSections(tab)
- }
- const content = element.nextElementSibling
- if(content){
- content.classList.add('anchor-highlight')
- highlightedAnchor = content
- }
- element.scrollIntoView({behavior: "smooth"})
- }
- }
-}
-
-function initTabs(){
- document.querySelectorAll("div[tabs-section]")
- .forEach(element => {
- showCorrespondingTabBody(element)
- element.addEventListener('click', (event) => toggleSectionsEventHandler(event))
- })
- let cached = localStorage.getItem("active-tab")
- if (cached) {
- let parsed = JSON.parse(cached)
- let tab = document.querySelector('div[tabs-section] > button[data-togglable="' + parsed + '"]')
- if(tab) {
- toggleSections(tab)
- }
- }
-}
-
-function showCorrespondingTabBody(element){
- const key = element.querySelector("button[data-active]").getAttribute("data-togglable")
- document.querySelector(".tabs-section-body")
- .querySelector("div[data-togglable='" + key + "']")
- .setAttribute("data-active", "")
-}
-
-function filterButtonHandler(event) {
- if(event.target.tagName == "BUTTON" && event.target.hasAttribute("data-filter")) {
- let sourceset = event.target.getAttribute("data-filter")
- if(filteringContext.activeFilters.indexOf(sourceset) != -1) {
- filterSourceset(sourceset)
- } else {
- unfilterSourceset(sourceset)
- }
- }
-}
-
-function initializeFiltering() {
- filteringContext.dependencies = JSON.parse(sourceset_dependencies)
- document.querySelectorAll("#filter-section > button")
- .forEach(p => filteringContext.restrictedDependencies.push(p.getAttribute("data-filter")))
- Object.keys(filteringContext.dependencies).forEach(p => {
- filteringContext.dependencies[p] = filteringContext.dependencies[p]
- .filter(q => -1 !== filteringContext.restrictedDependencies.indexOf(q))
- })
- let cached = window.localStorage.getItem('inactive-filters')
- if (cached) {
- let parsed = JSON.parse(cached)
- filteringContext.activeFilters = filteringContext.restrictedDependencies
- .filter(q => parsed.indexOf(q) == -1 )
- } else {
- filteringContext.activeFilters = filteringContext.restrictedDependencies
- }
- refreshFiltering()
-}
-
-function filterSourceset(sourceset) {
- filteringContext.activeFilters = filteringContext.activeFilters.filter(p => p != sourceset)
- refreshFiltering()
- addSourcesetFilterToCache(sourceset)
-}
-
-function unfilterSourceset(sourceset) {
- if(filteringContext.activeFilters.length == 0) {
- filteringContext.activeFilters = filteringContext.dependencies[sourceset].concat([sourceset])
- refreshFiltering()
- filteringContext.dependencies[sourceset].concat([sourceset]).forEach(p => removeSourcesetFilterFromCache(p))
- } else {
- filteringContext.activeFilters.push(sourceset)
- refreshFiltering()
- removeSourcesetFilterFromCache(sourceset)
- }
-
-}
-
-function addSourcesetFilterToCache(sourceset) {
- let cached = localStorage.getItem('inactive-filters')
- if (cached) {
- let parsed = JSON.parse(cached)
- localStorage.setItem('inactive-filters', JSON.stringify(parsed.concat([sourceset])))
- } else {
- localStorage.setItem('inactive-filters', JSON.stringify([sourceset]))
- }
-}
-
-function removeSourcesetFilterFromCache(sourceset) {
- let cached = localStorage.getItem('inactive-filters')
- if (cached) {
- let parsed = JSON.parse(cached)
- localStorage.setItem('inactive-filters', JSON.stringify(parsed.filter(p => p != sourceset)))
- }
-}
-
-function toggleSections(target) {
- localStorage.setItem('active-tab', JSON.stringify(target.getAttribute("data-togglable")))
- const activateTabs = (containerClass) => {
- for(const element of document.getElementsByClassName(containerClass)){
- for(const child of element.children){
- if(child.getAttribute("data-togglable") === target.getAttribute("data-togglable")){
- child.setAttribute("data-active", "")
- } else {
- child.removeAttribute("data-active")
- }
- }
- }
- }
-
- activateTabs("tabs-section")
- activateTabs("tabs-section-body")
-}
-
-function toggleSectionsEventHandler(evt){
- if(!evt.target.getAttribute("data-togglable")) return
- toggleSections(evt.target)
-}
-
-function togglePlatformDependent(e, container) {
- let target = e.target
- if (target.tagName != 'BUTTON') return;
- let index = target.getAttribute('data-toggle')
-
- for(let child of container.children){
- if(child.hasAttribute('data-toggle-list')){
- for(let bm of child.children){
- if(bm == target){
- bm.setAttribute('data-active',"")
- } else if(bm != target) {
- bm.removeAttribute('data-active')
- }
- }
- }
- else if(child.getAttribute('data-togglable') == index) {
- child.setAttribute('data-active',"")
- }
- else {
- child.removeAttribute('data-active')
- }
- }
-}
-
-function refreshFiltering() {
- let sourcesetList = filteringContext.activeFilters
- document.querySelectorAll("[data-filterable-set]")
- .forEach(
- elem => {
- let platformList = elem.getAttribute("data-filterable-set").split(' ').filter(v => -1 !== sourcesetList.indexOf(v))
- elem.setAttribute("data-filterable-current", platformList.join(' '))
- }
- )
- refreshFilterButtons()
- refreshPlatformTabs()
-}
-
-function refreshPlatformTabs() {
- document.querySelectorAll(".platform-hinted > .platform-bookmarks-row").forEach(
- p => {
- let active = false;
- let firstAvailable = null
- p.childNodes.forEach(
- element => {
- if(element.getAttribute("data-filterable-current") != ''){
- if( firstAvailable == null) {
- firstAvailable = element
- }
- if(element.hasAttribute("data-active")) {
- active = true;
- }
- }
- }
- )
- if( active == false && firstAvailable) {
- firstAvailable.click()
- }
- }
- )
-}
-
-function refreshFilterButtons() {
- document.querySelectorAll("#filter-section > button")
- .forEach(f => {
- if(filteringContext.activeFilters.indexOf(f.getAttribute("data-filter")) != -1){
- f.setAttribute("data-active","")
- } else {
- f.removeAttribute("data-active")
- }
- })
-}
-