Skip to content

Commit 6772585

Browse files
committed
fix(docsify): more stable buttons for mobile
1 parent c6e4d30 commit 6772585

File tree

1 file changed

+52
-35
lines changed

1 file changed

+52
-35
lines changed

javascripts/documentation.js

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -73,45 +73,17 @@ window.$docsify = {
7373
}
7474
})
7575

76-
// search icon
77-
let searchIcon = document.createElement('div')
78-
searchIcon.innerHTML = "<i class='gg-search'></i>"
79-
searchIcon.classList = "search-icon"
80-
searchIcon.addEventListener('click', function() {
81-
document.querySelector('aside').classList.toggle('open')
82-
document.querySelector('nav > ul').classList.remove('open')
83-
document.querySelector('.menu-icon').classList.remove("open")
84-
})
85-
document.querySelector('nav').appendChild(searchIcon)
86-
87-
// menu icon
88-
let menuIcon = document.createElement('div')
89-
menuIcon.innerHTML = "<i class='gg-menu'></i><i class='gg-close'></i>"
90-
menuIcon.classList = "menu-icon"
91-
menuIcon.addEventListener('click', function() {
92-
document.querySelector('nav > ul').classList.toggle('open')
93-
this.classList.toggle("open")
94-
})
95-
document.querySelector('nav').appendChild(menuIcon)
96-
97-
// Back button url correct
98-
let backBtn = document.querySelector("#back")
99-
if (backBtn) {
100-
backBtn.href = baseUrl
101-
const backBtnClone = backBtn.cloneNode(true)
102-
const li = document.createElement('li')
103-
li.appendChild(backBtnClone)
104-
const nav = document.querySelector('nav > ul')
105-
nav.insertBefore(li, nav.children[0])
106-
}
107-
});
76+
// We need to do it each time cause the `nav` element is dyanmically replaced by the content of
77+
// `_navbar.md` each time we navigates to a new page
78+
initCustomNavMenu()
79+
})
10880

10981
hook.ready(function() {
11082
// Redirect properly to home page, otherwise we stay on "#/" hash
11183
// and it cause some translations issues
112-
if (location.hash == "#/") location.hash = `/docs/users/${locale}/`
84+
if (location.hash == "#/") location.hash = `/docs/users/${locale}/README`
11385

114-
// backdrop
86+
// adds backdrop for mobile search menu
11587
let backdrop = document.createElement('div')
11688
backdrop.classList = "backdrop"
11789
backdrop.addEventListener('click', function() {
@@ -125,4 +97,49 @@ window.$docsify = {
12597

12698
function insertAfter(referenceNode, newNode) {
12799
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
128-
}
100+
}
101+
102+
// Handle browser back navigation, not handled by hook.doneEach
103+
window.addEventListener('popstate', function() {
104+
setTimeout(function() {
105+
initCustomNavMenu();
106+
}, 100)
107+
})
108+
109+
// Improve navbar menu by adding mobile icons and auto fixing the "back to my wiki" url
110+
function initCustomNavMenu() {
111+
// Do not run this method twice
112+
if (document.querySelector("nav .search-icon")) return
113+
114+
// search icon
115+
let searchIcon = document.createElement('div')
116+
searchIcon.innerHTML = "<i class='gg-search'></i>"
117+
searchIcon.classList = "search-icon"
118+
searchIcon.addEventListener('click', function() {
119+
document.querySelector('aside').classList.toggle('open')
120+
document.querySelector('nav > ul').classList.remove('open')
121+
document.querySelector('.menu-icon').classList.remove("open")
122+
})
123+
document.querySelector('nav').appendChild(searchIcon)
124+
125+
// menu icon
126+
let menuIcon = document.createElement('div')
127+
menuIcon.innerHTML = "<i class='gg-menu'></i><i class='gg-close'></i>"
128+
menuIcon.classList = "menu-icon"
129+
menuIcon.addEventListener('click', function() {
130+
document.querySelector('nav > ul').classList.toggle('open')
131+
this.classList.toggle("open")
132+
})
133+
document.querySelector('nav').appendChild(menuIcon)
134+
135+
// Back button url correct
136+
let backBtn = document.querySelector("#back")
137+
if (backBtn) {
138+
backBtn.href = baseUrl
139+
const backBtnClone = backBtn.cloneNode(true)
140+
const li = document.createElement('li')
141+
li.appendChild(backBtnClone)
142+
const nav = document.querySelector('nav > ul')
143+
nav.insertBefore(li, nav.children[0])
144+
}
145+

0 commit comments

Comments
 (0)