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-toolbar">
<div id="wobbly-tools"> <div id="wobbly-tools">
<button id="wobbly-help-button">Help</button> <button id="wobbly-help-button">Help</button>
<button id="wobbly-back">⬅️</button>
<button id="wobbly-up">⬆️</button> <button id="wobbly-up">⬆️</button>
<button id="wobbly-forward">➡️</button>
<input id="wobbly-addressbar" /> <input id="wobbly-addressbar" />
<button id="wobbly-go">Go!</button> <button id="wobbly-go">Go!</button>
</div> </div>

48
main.js
View File

@ -1,47 +1,42 @@
var geminiHistory = []
var geminiPresent = 0
// DOM Elements // DOM Elements
var wobblyWindow var wobblyWindow
var wobblyHelpButton var wobblyHelpButton
var wobblyHelp var wobblyHelp
var wobblyBack
var wobblyUp var wobblyUp
var wobblyForward
var wobblyAddressBar var wobblyAddressBar
var wobblyGo var wobblyGo
var startpage = 'gemini://tildeverse.org/'
function geminiInit() { function geminiInit() {
wobblyWindow = document.getElementById("wobbly-window") wobblyWindow = document.getElementById("wobbly-window")
wobblyHelpButton = document.getElementById('wobbly-help-button') wobblyHelpButton = document.getElementById('wobbly-help-button')
wobblyHelp = document.getElementById('wobbly-help') wobblyHelp = document.getElementById('wobbly-help')
wobblyBack = document.getElementById('wobbly-back')
wobblyUp = document.getElementById('wobbly-up') wobblyUp = document.getElementById('wobbly-up')
wobblyForward = document.getElementById('wobbly-forward')
wobblyAddressBar = document.getElementById('wobbly-addressbar') wobblyAddressBar = document.getElementById('wobbly-addressbar')
wobblyGo = document.getElementById('wobbly-go') wobblyGo = document.getElementById('wobbly-go')
wobblyHelpButton.addEventListener('click', geminiHelpToggle) wobblyHelpButton.addEventListener('click', geminiHelpToggle)
wobblyBack.addEventListener('click', geminiBack)
wobblyUp.addEventListener('click', geminiUp) wobblyUp.addEventListener('click', geminiUp)
wobblyForward.addEventListener('click', geminiForward)
wobblyAddressBar.addEventListener('keypress', geminiEnterListener) wobblyAddressBar.addEventListener('keypress', geminiEnterListener)
wobblyGo.addEventListener('click', geminiGo) wobblyGo.addEventListener('click', geminiGo)
// Hijack all clicks for gemini links // Hijack all clicks for gemini links
document.addEventListener('click', geminiLinkClickListener, false) document.addEventListener('click', geminiLinkClickListener, false)
window.addEventListener('popstate', goFromURL)
// Clear screen to init // Clear screen to init
wobblyWindow.innerHTML = "" wobblyWindow.innerHTML = ""
let startpage = 'gemini://tildeverse.org/' goFromURL()
}
function goFromURL() {
query_string = window.location.href.split('?') query_string = window.location.href.split('?')
if (query_string.length > 1){ if (query_string.length > 1){
startpage = query_string[1] startpage = query_string[1]
} }
wobblyAddressBar.value = startpage wobblyAddressBar.value = startpage
geminiHistory.push({url:startpage})
geminiGo() geminiGo()
} }
@ -58,8 +53,7 @@ function geminiHelpToggle() {
function geminiGo() { function geminiGo() {
url = wobblyAddressBar.value.trim().split("?")[0] url = wobblyAddressBar.value.trim().split("?")[0]
const pushurl = new URL(window.location) const pushurl = new URL(window.location.href.split('?')[0] + '?' + url)
pushurl.searchParams.set(url);
window.history.pushState({}, '', pushurl) window.history.pushState({}, '', pushurl)
if (url.length == 0) { if (url.length == 0) {
@ -68,48 +62,24 @@ function geminiGo() {
if (! url.startsWith("gemini://")) { if (! url.startsWith("gemini://")) {
url = "gemini://" + url url = "gemini://" + url
} }
if (! (url === geminiHistory[geminiPresent].url)) {
geminiPresent++
geminiHistory[geminiPresent] = {url:url}
while (geminiHistory.length > geminiPresent +1) {
geminiHistory.pop()
}
}
const xmlHttp = new XMLHttpRequest() const xmlHttp = new XMLHttpRequest()
xmlHttp.open( "GET", "browser.cgi?" + url ) xmlHttp.open( "GET", "browser.cgi?" + url )
xmlHttp.onload = function () { xmlHttp.onload = function () {
const body = xmlHttp.responseText const body = xmlHttp.responseText
wobblyWindow.innerHTML = body wobblyWindow.innerHTML = body
geminiHistory[geminiPresent].body = body
} }
xmlHttp.send(null) 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 // Big thanks to idiomdrottning for fixing my geminiUp function <3
function geminiUp() { function geminiUp() {
let components = geminiHistory[geminiPresent].url.match(/\/[^/]*/g) const components = wobblyAddressBar.value.match(/\/[^/]*/g)
if ("/" == components.pop()) components.pop() if ("/" == components.pop()) components.pop()
if (components.length == 1) return if (components.length == 1) return
wobblyAddressBar.value = "gemini:" + components.join("") + "/" wobblyAddressBar.value = "gemini:" + components.join("") + "/"
geminiGo() geminiGo()
} }
function geminiForward() {
if (geminiPresent < geminiHistory.length - 1) {
geminiPresent++
wobblyAddressBar.value = geminiHistory[geminiPresent].url
wobblyWindow.innerHTML = geminiHistory[geminiPresent].body
}
}
function geminiEnterListener(e) { function geminiEnterListener(e) {
if(e.keyCode === 13) { if(e.keyCode === 13) {
e.preventDefault() e.preventDefault()