using pushstate almost working
This commit is contained in:
parent
9d3491265a
commit
f79a273daa
|
@ -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
48
main.js
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue