Links work !
This commit is contained in:
parent
ec4e5297cd
commit
c7ad9e260e
47
main.py
47
main.py
|
@ -3,6 +3,7 @@ import tkinter.messagebox
|
|||
import tkinter.simpledialog
|
||||
import gemini
|
||||
import renderEngine
|
||||
import urllib.parse
|
||||
|
||||
# See https://tildegit.org/solderpunk/gemini-demo-1/src/branch/master/gemini-demo.py
|
||||
|
||||
|
@ -16,6 +17,13 @@ class Application():
|
|||
|
||||
def updateContent(self):
|
||||
# Get url asked
|
||||
url=self.nav_bar.getURL()
|
||||
|
||||
# Is it a Gemini URL
|
||||
if not(verifyURL(url)):
|
||||
tkinter.messagebox.showerror("URL error", url+" is not a correct Gemini URL ! (HTTP/S is not supported, please use a web browser instead)")
|
||||
return
|
||||
|
||||
self.current_URL = self.nav_bar.getURL()
|
||||
|
||||
# New request
|
||||
|
@ -41,6 +49,39 @@ class Application():
|
|||
else:
|
||||
self.content.setContent(r.content)
|
||||
|
||||
def linkClick(self, url):
|
||||
# Check if it is an absolute URL
|
||||
if "://" in url:
|
||||
# Check if it is a gemini URL
|
||||
if verifyURL(url):
|
||||
self.nav_bar.URL_var.set(url)
|
||||
self.updateContent()
|
||||
# Else show error
|
||||
else:
|
||||
tkinter.messagebox.showerror("URL error", url+" is not a correct Gemini URL ! (HTTP/S is not supported, please use a web browser instead)")
|
||||
# It is relative
|
||||
else:
|
||||
# Join current URL and relative path
|
||||
base = self.current_URL
|
||||
base = base.replace("gemini://","http://")
|
||||
url = urllib.parse.urljoin(base, url)
|
||||
url = url.replace("http://", "gemini://")
|
||||
|
||||
# We can verify because sometime there is errors (mailto:)
|
||||
if verifyURL(url):
|
||||
self.nav_bar.URL_var.set(url)
|
||||
self.updateContent()
|
||||
else:
|
||||
tkinter.messagebox.showerror("URL error", url+" is not a correct Gemini URL ! (HTTP/S is not supported, please use a web browser instead)")
|
||||
|
||||
def verifyURL(url):
|
||||
if "://" in url:
|
||||
parsed_url = urllib.parse.urlparse(url)
|
||||
if parsed_url.scheme == "gemini":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
class NavBar():
|
||||
def __init__(self, parent):
|
||||
self.parent = parent
|
||||
|
@ -59,7 +100,7 @@ class NavBar():
|
|||
class Content():
|
||||
def __init__(self, parent):
|
||||
self.parent = parent
|
||||
self.root = renderEngine.Renderer(self.parent.root, "#Home page\nWelcome on tkGemini, a browser software for Gemini protocole\n=>gemini://rdelaage.ovh My gemini space")
|
||||
self.root = renderEngine.Renderer(self.parent, "#Home page\nWelcome on tkGemini, a browser software for Gemini protocole\n=>gemini://rdelaage.ovh My gemini space")
|
||||
self.root.parse()
|
||||
self.root.content.grid(column=0, row=1)
|
||||
self.scroll_bar = tk.Scrollbar(command=self.root.content.yview, orient='vertical')
|
||||
|
@ -70,4 +111,8 @@ class Content():
|
|||
self.root.text = new_content
|
||||
self.root.parse()
|
||||
|
||||
def linkClick(self, url):
|
||||
self.parent.nav_bar.URL_var = url
|
||||
self.parent.updateContent
|
||||
|
||||
app = Application()
|
||||
|
|
|
@ -5,7 +5,7 @@ class Renderer():
|
|||
def __init__(self, parent, text):
|
||||
self.parent = parent
|
||||
self.text = text
|
||||
self.content = tk.Text(self.parent)
|
||||
self.content = tk.Text(self.parent.root)
|
||||
self.h1Font = tkFont.Font(weight="bold", size="26")
|
||||
self.content.tag_config("h1", font=self.h1Font)
|
||||
self.h2Font = tkFont.Font(weight="bold", size="20")
|
||||
|
@ -23,8 +23,8 @@ class Renderer():
|
|||
def addLink(self, text, url):
|
||||
index1 = str(self.currY)+'.'+str(self.currX)
|
||||
self.content.tag_config("link-"+index1, foreground="#00f", font=self.underlineFont)
|
||||
self.content.tag_bind("link-"+index1, "<Button-1>", lambda event, url=url:
|
||||
print(url))
|
||||
self.content.tag_bind("link-"+index1, "<Button-1>", lambda event, url=url, parent=self.parent:
|
||||
parent.linkClick(url))
|
||||
self.content.insert(index1, text+"\n")
|
||||
self.content.tag_add("link-"+index1, index1, str(self.currY)+'.'+str(self.currX+len(text)))
|
||||
self.currY+=1
|
||||
|
|
Reference in New Issue