using pushstate almost working

This commit is contained in:
James Tomasino 2023-02-24 15:04:15 +00:00
parent 9d3491265a
commit f79a273daa
2 changed files with 9 additions and 41 deletions

View File

@ -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
View File

@ -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()