Finish dropdown in navbar
This commit is contained in:
parent
6c06865726
commit
f4de859172
3
example/More.page
Normal file
3
example/More.page
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
>
|
||||||
|
<link href="/style.css" rel="stylesheet">
|
||||||
|
**This is More page.**
|
@ -1,2 +1,6 @@
|
|||||||
About;About.page
|
About;About.page
|
||||||
Home;Home.page
|
Home;Home.page
|
||||||
|
More;More.page|
|
||||||
|
About;About.page
|
||||||
|
Site 2;https://duckduckgo.com
|
||||||
|
Site 3;https://duckduckgo.com
|
||||||
|
@ -30,6 +30,58 @@ li a {
|
|||||||
font-size: 3.0vmax;
|
font-size: 3.0vmax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.active li a {
|
.active {
|
||||||
background-color: #04AA6D;
|
background-color: #04AA6D;
|
||||||
}
|
}
|
||||||
|
/* Dropdown button */
|
||||||
|
.dropdown .dropbutton {
|
||||||
|
display: block;
|
||||||
|
border: none;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
padding: 15px 35px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 3.0vmin;
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 1000px) {
|
||||||
|
.dropdown .dropbutton {
|
||||||
|
border: none;
|
||||||
|
display: block;
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
padding: 15px 35px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 3.0vmax;
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Dropdown content (hidden by default) */
|
||||||
|
.dropdown-content {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: #333;
|
||||||
|
min-width: 160px;
|
||||||
|
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/* Links inside the dropdown */
|
||||||
|
.dropdown-content a {
|
||||||
|
float: none;
|
||||||
|
color: white;
|
||||||
|
padding: 12px 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add a grey background color to dropdown links on hover */
|
||||||
|
.dropdown-content a:hover {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the dropdown menu on hover */
|
||||||
|
.dropdown:hover .dropdown-content {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@ -4,7 +4,19 @@ import markdown
|
|||||||
import html
|
import html
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
#TODO re-think navigation bar. Think of way to add option to display navigation bar entry differently if you're currently on that page.
|
def parseLink(link, pagetitle, homepage):
|
||||||
|
if link.strip() == pagetitle + ".page":
|
||||||
|
return "#"
|
||||||
|
elif link.strip() == homepage + ".page":
|
||||||
|
return "/"
|
||||||
|
else:
|
||||||
|
destination = link.replace(" ", "-").replace(".page", "").lower()
|
||||||
|
|
||||||
|
#Start local links with / symbol
|
||||||
|
if link.strip().endswith(".page"):
|
||||||
|
return "/" + destination
|
||||||
|
return destination
|
||||||
|
|
||||||
def generateNavigationBar(lines, pagetitle):
|
def generateNavigationBar(lines, pagetitle):
|
||||||
global navbar
|
global navbar
|
||||||
navbar = E
|
navbar = E
|
||||||
@ -19,49 +31,49 @@ def generateNavigationBar(lines, pagetitle):
|
|||||||
#parse navigation bar (custom format)
|
#parse navigation bar (custom format)
|
||||||
if not rawhtml:
|
if not rawhtml:
|
||||||
if ";" in line:
|
if ";" in line:
|
||||||
|
|
||||||
#experimental dropdown parsing, to be removed or used soon
|
|
||||||
#contents = []
|
|
||||||
#if "|" in line:
|
|
||||||
# contents.append(line.split("|"))
|
|
||||||
#else:
|
|
||||||
# contents.append(line)
|
|
||||||
#for entry in contents:
|
|
||||||
title, link = line.split(";", 1)
|
title, link = line.split(";", 1)
|
||||||
|
|
||||||
if line.strip().endswith("|"):
|
if line.strip().endswith("|"):
|
||||||
dropdown = True
|
dropdown = True
|
||||||
line = line.strip()[-1]
|
link = link.strip()[:len(link.strip())-1]
|
||||||
dphtml = E
|
dphtml = E
|
||||||
dphtml = dphtml(HTML("<div class='dropdown'><button class 'dropbutton'>Test more</button><div class='dropdown-content'>"))
|
|
||||||
|
#some duplicate logic as normal navbar entries get, to make dropdown button in itself act like a normal clickable navbar entry
|
||||||
|
link = parseLink(link, pagetitle, homepage)
|
||||||
|
if link.strip() == "#":
|
||||||
|
dphtml = dphtml(HTML("<div class='dropdown'><div class='dropbutton'><div class='active'><a href='" + link.strip() + "'>" + title + "</a></div></div><div class='dropdown-content'>"))
|
||||||
|
else:
|
||||||
|
dphtml = dphtml(HTML("<div class='dropdown'><div class='dropbutton'><a href='" + link.strip() + "'>" + title + "</a></div><div class='dropdown-content'>"))
|
||||||
|
continue
|
||||||
|
|
||||||
elif dropdown:
|
elif dropdown:
|
||||||
if line.startswith(" "):
|
if line.startswith(" "):
|
||||||
print("todo")
|
|
||||||
dphtml = dphtml(HTML("<a href='" + link.strip() + "'>" + title + "</a>"))
|
|
||||||
#TODO if this is the last line, detect it by getting the future of lines[id + 1]
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
dphtml = dphtml(HTML("</div></div>"))
|
|
||||||
navbar = navbar.li(dphtml)
|
|
||||||
dropdown = False
|
|
||||||
#mark currently open tab as active when it is open
|
|
||||||
if link.strip() == pagetitle + ".page":
|
|
||||||
link = "#"
|
|
||||||
elif link.strip() == homepage + ".page":
|
|
||||||
link = "/"
|
|
||||||
else:
|
|
||||||
link = link.replace(" ", "-").replace(".page", "").lower()
|
|
||||||
|
|
||||||
#currently open tab in navbar
|
link = parseLink(link, pagetitle, homepage)
|
||||||
if link == "#":
|
if link.strip() == "#":
|
||||||
|
dphtml = dphtml(HTML("<div class='active'><a href='" + link.strip() + "'>" + title + "</a></div>"))
|
||||||
|
else:
|
||||||
|
dphtml = dphtml(HTML("<a href='" + link.strip() + "'>" + title + "</a>"))
|
||||||
|
|
||||||
|
#handle end of indentation (if indented line is the last line of page or next line is not indented)
|
||||||
|
if len(lines) - id == 1 or lines[id + 1].startswith(" ") is False:
|
||||||
|
dphtml = dphtml(HTML("</div></div>"))
|
||||||
|
navbar = navbar.li(dphtml)
|
||||||
|
dropdown = False
|
||||||
|
continue
|
||||||
|
|
||||||
|
#mark currently open tab as active when it is open
|
||||||
|
link = parseLink(link, pagetitle, homepage)
|
||||||
|
if link.strip() == "#":
|
||||||
navbar = navbar.li(HTML("<div class='active'>" + "<a href='" + link.strip() + "'>" + title + "</a></div>"))
|
navbar = navbar.li(HTML("<div class='active'>" + "<a href='" + link.strip() + "'>" + title + "</a></div>"))
|
||||||
else:
|
continue
|
||||||
navbar = navbar.li(HTML("<a href='" + link.strip() + "'>" + title + "</a>"))
|
|
||||||
print(navbar)
|
navbar = navbar.li(HTML("<a href='" + link.strip() + "'>" + title + "</a>"))
|
||||||
else:
|
else:
|
||||||
print("Error: invalid navbar entry, line " + str(id + 1) + " content: " + line)
|
print("Error: invalid navbar entry, line " + str(id + 1) + " content: " + line)
|
||||||
exit()
|
exit()
|
||||||
return navbar
|
return navbar
|
||||||
|
|
||||||
def generateFooter(lines):
|
def generateFooter(lines):
|
||||||
global footer
|
global footer
|
||||||
footer = E
|
footer = E
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
About;About.page
|
About;About.page
|
||||||
Home;Home.page
|
Home;Home.page
|
||||||
More;#|
|
More;More.page|
|
||||||
Site 1;https://duckduckgo.com
|
About;About.page
|
||||||
Site 2;https://duckduckgo.com
|
Site 2;https://duckduckgo.com
|
||||||
Site 3;https://duckduckgo.com
|
Site 3;https://duckduckgo.com
|
||||||
Test;/test
|
|
||||||
|
Loading…
Reference in New Issue
Block a user