using pushstate almost working
This commit is contained in:
parent
9d3491265a
commit
f79a273daa
|
@ -11,9 +11,7 @@
|
|||
<div id="wobbly-toolbar">
|
||||
<div id="wobbly-tools">
|
||||
<button id="wobbly-help-button">Help</button>
|
||||
<button id="wobbly-back">⬅️</button>
|
||||
<button id="wobbly-up">⬆️</button>
|
||||
<button id="wobbly-forward">➡️</button>
|
||||
<input id="wobbly-addressbar" />
|
||||
<button id="wobbly-go">Go!</button>
|
||||
</div>
|
||||
|
|
48
main.js
48
main.js
|
@ -1,47 +1,42 @@
|
|||
var geminiHistory = []
|
||||
var geminiPresent = 0
|
||||
|
||||
// DOM Elements
|
||||
var wobblyWindow
|
||||
var wobblyHelpButton
|
||||
var wobblyHelp
|
||||
var wobblyBack
|
||||
var wobblyUp
|
||||
var wobblyForward
|
||||
var wobblyAddressBar
|
||||
var wobblyGo
|
||||
var startpage = 'gemini://tildeverse.org/'
|
||||
|
||||
function geminiInit() {
|
||||
wobblyWindow = document.getElementById("wobbly-window")
|
||||
wobblyHelpButton = document.getElementById('wobbly-help-button')
|
||||
wobblyHelp = document.getElementById('wobbly-help')
|
||||
wobblyBack = document.getElementById('wobbly-back')
|
||||
wobblyUp = document.getElementById('wobbly-up')
|
||||
wobblyForward = document.getElementById('wobbly-forward')
|
||||
wobblyAddressBar = document.getElementById('wobbly-addressbar')
|
||||
wobblyGo = document.getElementById('wobbly-go')
|
||||
|
||||
wobblyHelpButton.addEventListener('click', geminiHelpToggle)
|
||||
wobblyBack.addEventListener('click', geminiBack)
|
||||
wobblyUp.addEventListener('click', geminiUp)
|
||||
wobblyForward.addEventListener('click', geminiForward)
|
||||
wobblyAddressBar.addEventListener('keypress', geminiEnterListener)
|
||||
wobblyGo.addEventListener('click', geminiGo)
|
||||
|
||||
// Hijack all clicks for gemini links
|
||||
document.addEventListener('click', geminiLinkClickListener, false)
|
||||
|
||||
window.addEventListener('popstate', goFromURL)
|
||||
|
||||
// Clear screen to init
|
||||
wobblyWindow.innerHTML = ""
|
||||
|
||||
let startpage = 'gemini://tildeverse.org/'
|
||||
goFromURL()
|
||||
}
|
||||
|
||||
function goFromURL() {
|
||||
query_string = window.location.href.split('?')
|
||||
if (query_string.length > 1){
|
||||
startpage = query_string[1]
|
||||
}
|
||||
|
||||
wobblyAddressBar.value = startpage
|
||||
geminiHistory.push({url:startpage})
|
||||
geminiGo()
|
||||
}
|
||||
|
||||
|
@ -58,8 +53,7 @@ function geminiHelpToggle() {
|
|||
function geminiGo() {
|
||||
url = wobblyAddressBar.value.trim().split("?")[0]
|
||||
|
||||
const pushurl = new URL(window.location)
|
||||
pushurl.searchParams.set(url);
|
||||
const pushurl = new URL(window.location.href.split('?')[0] + '?' + url)
|
||||
window.history.pushState({}, '', pushurl)
|
||||
|
||||
if (url.length == 0) {
|
||||
|
@ -68,48 +62,24 @@ function geminiGo() {
|
|||
if (! url.startsWith("gemini://")) {
|
||||
url = "gemini://" + url
|
||||
}
|
||||
if (! (url === geminiHistory[geminiPresent].url)) {
|
||||
geminiPresent++
|
||||
geminiHistory[geminiPresent] = {url:url}
|
||||
while (geminiHistory.length > geminiPresent +1) {
|
||||
geminiHistory.pop()
|
||||
}
|
||||
}
|
||||
const xmlHttp = new XMLHttpRequest()
|
||||
xmlHttp.open( "GET", "browser.cgi?" + url )
|
||||
xmlHttp.onload = function () {
|
||||
const body = xmlHttp.responseText
|
||||
wobblyWindow.innerHTML = body
|
||||
geminiHistory[geminiPresent].body = body
|
||||
}
|
||||
xmlHttp.send(null)
|
||||
}
|
||||
|
||||
function geminiBack() {
|
||||
if (geminiPresent > 0) {
|
||||
geminiPresent--
|
||||
wobblyAddressBar.value = geminiHistory[geminiPresent].url
|
||||
wobblyWindow.innerHTML = geminiHistory[geminiPresent].body
|
||||
}
|
||||
}
|
||||
|
||||
// Big thanks to idiomdrottning for fixing my geminiUp function <3
|
||||
function geminiUp() {
|
||||
let components = geminiHistory[geminiPresent].url.match(/\/[^/]*/g)
|
||||
const components = wobblyAddressBar.value.match(/\/[^/]*/g)
|
||||
if ("/" == components.pop()) components.pop()
|
||||
if (components.length == 1) return
|
||||
wobblyAddressBar.value = "gemini:" + components.join("") + "/"
|
||||
geminiGo()
|
||||
}
|
||||
|
||||
function geminiForward() {
|
||||
if (geminiPresent < geminiHistory.length - 1) {
|
||||
geminiPresent++
|
||||
wobblyAddressBar.value = geminiHistory[geminiPresent].url
|
||||
wobblyWindow.innerHTML = geminiHistory[geminiPresent].body
|
||||
}
|
||||
}
|
||||
|
||||
function geminiEnterListener(e) {
|
||||
if(e.keyCode === 13) {
|
||||
e.preventDefault()
|
||||
|
|
Loading…
Reference in New Issue