Links work !

This commit is contained in:
Romain de Laage 2020-12-04 19:07:58 +01:00
parent ec4e5297cd
commit c7ad9e260e
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
2 changed files with 49 additions and 4 deletions

47
main.py
View File

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

View File

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