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 tkinter.simpledialog
|
||||||
import gemini
|
import gemini
|
||||||
import renderEngine
|
import renderEngine
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
# See https://tildegit.org/solderpunk/gemini-demo-1/src/branch/master/gemini-demo.py
|
# See https://tildegit.org/solderpunk/gemini-demo-1/src/branch/master/gemini-demo.py
|
||||||
|
|
||||||
|
@ -16,6 +17,13 @@ class Application():
|
||||||
|
|
||||||
def updateContent(self):
|
def updateContent(self):
|
||||||
# Get url asked
|
# 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()
|
self.current_URL = self.nav_bar.getURL()
|
||||||
|
|
||||||
# New request
|
# New request
|
||||||
|
@ -41,6 +49,39 @@ class Application():
|
||||||
else:
|
else:
|
||||||
self.content.setContent(r.content)
|
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():
|
class NavBar():
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
|
@ -59,7 +100,7 @@ class NavBar():
|
||||||
class Content():
|
class Content():
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
self.parent = 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.parse()
|
||||||
self.root.content.grid(column=0, row=1)
|
self.root.content.grid(column=0, row=1)
|
||||||
self.scroll_bar = tk.Scrollbar(command=self.root.content.yview, orient='vertical')
|
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.text = new_content
|
||||||
self.root.parse()
|
self.root.parse()
|
||||||
|
|
||||||
|
def linkClick(self, url):
|
||||||
|
self.parent.nav_bar.URL_var = url
|
||||||
|
self.parent.updateContent
|
||||||
|
|
||||||
app = Application()
|
app = Application()
|
||||||
|
|
|
@ -5,7 +5,7 @@ class Renderer():
|
||||||
def __init__(self, parent, text):
|
def __init__(self, parent, text):
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.text = text
|
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.h1Font = tkFont.Font(weight="bold", size="26")
|
||||||
self.content.tag_config("h1", font=self.h1Font)
|
self.content.tag_config("h1", font=self.h1Font)
|
||||||
self.h2Font = tkFont.Font(weight="bold", size="20")
|
self.h2Font = tkFont.Font(weight="bold", size="20")
|
||||||
|
@ -23,8 +23,8 @@ class Renderer():
|
||||||
def addLink(self, text, url):
|
def addLink(self, text, url):
|
||||||
index1 = str(self.currY)+'.'+str(self.currX)
|
index1 = str(self.currY)+'.'+str(self.currX)
|
||||||
self.content.tag_config("link-"+index1, foreground="#00f", font=self.underlineFont)
|
self.content.tag_config("link-"+index1, foreground="#00f", font=self.underlineFont)
|
||||||
self.content.tag_bind("link-"+index1, "<Button-1>", lambda event, url=url:
|
self.content.tag_bind("link-"+index1, "<Button-1>", lambda event, url=url, parent=self.parent:
|
||||||
print(url))
|
parent.linkClick(url))
|
||||||
self.content.insert(index1, text+"\n")
|
self.content.insert(index1, text+"\n")
|
||||||
self.content.tag_add("link-"+index1, index1, str(self.currY)+'.'+str(self.currX+len(text)))
|
self.content.tag_add("link-"+index1, index1, str(self.currY)+'.'+str(self.currX+len(text)))
|
||||||
self.currY+=1
|
self.currY+=1
|
||||||
|
|
Reference in New Issue