140 lines
3.7 KiB
Python
140 lines
3.7 KiB
Python
import os
|
|
import yaml
|
|
import shutil
|
|
from jinja2 import Template
|
|
import sass
|
|
|
|
from page import Page
|
|
|
|
pages = []
|
|
|
|
# SRC_DIR = "/home/mreenen/Documents/git/kladjes"
|
|
SRC_DIR = os.path.abspath("/home/mreenen/Documents/git/kladjes")
|
|
TARGET_DIR = os.path.abspath("public")
|
|
|
|
def renderPage(page, template, header):
|
|
html = page.renderPage(template, header, SRC_DIR)
|
|
|
|
path = TARGET_DIR + page.url
|
|
if (path.split('.')[-1] != "html"):
|
|
path = os.path.abspath(path + '/index.html')
|
|
|
|
pathDir = os.path.dirname(path)
|
|
fileName = os.path.basename(path)
|
|
|
|
os.makedirs(pathDir, exist_ok=True)
|
|
with open(path, 'w') as file:
|
|
file.write(html)
|
|
del html
|
|
|
|
if (page.assets is not None):
|
|
print("assets found")
|
|
for asset in page.assets:
|
|
srcAssets = SRC_DIR + asset
|
|
destAssets = TARGET_DIR + asset
|
|
|
|
if(not os.path.isdir(destAssets)):
|
|
os.mkdir(destAssets)
|
|
|
|
print(f"asset: {asset}")
|
|
|
|
for f in os.listdir(srcAssets):
|
|
print(f"f: {f}")
|
|
if ((f[0] != '.') and os.path.isfile(srcAssets + "/" + f)):
|
|
print("copy: " + asset + "/" + f)
|
|
shutil.copyfile(srcAssets + "/" + f, destAssets + "/" + f)
|
|
|
|
def findPageInList(list, url):
|
|
i = 0
|
|
while (i < len(list)):
|
|
if (list[i].url == url):
|
|
return i
|
|
i += 1
|
|
return -1
|
|
|
|
def render(rootPage, template, header):
|
|
done = False
|
|
isSub = False
|
|
lastPage = []
|
|
curPage = 0
|
|
while not done:
|
|
if (curPage == 0):
|
|
page = rootPage
|
|
else:
|
|
pageIndex = curPage - 1
|
|
page = None
|
|
if (pageIndex < len(rootPage.subPages)):
|
|
page = rootPage.subPages[pageIndex]
|
|
else:
|
|
pageIndex -= len(rootPage.subPages)
|
|
if (pageIndex < len(rootPage.sidebar)):
|
|
page = rootPage.sidebar[pageIndex]
|
|
|
|
if (page is not None):
|
|
if (page.clickable):
|
|
renderPage(page, template, header)
|
|
|
|
if ((curPage != 0) and
|
|
((len(page.subPages) > 0) or (len(page.sidebar) > 0))):
|
|
rootPage = page
|
|
lastPage.append(curPage)
|
|
curPage = 1
|
|
else:
|
|
curPage += 1
|
|
|
|
else:
|
|
if (len(lastPage) > 0):
|
|
curPage = lastPage.pop() + 1
|
|
rootPage = rootPage.parrent
|
|
else:
|
|
done = True
|
|
print(f"done")
|
|
|
|
|
|
|
|
def index(fileName):
|
|
global pages
|
|
with open(SRC_DIR + '/index.yaml', 'r') as file:
|
|
index = yaml.safe_load(file)
|
|
|
|
if ('sitemap' not in index):
|
|
print("ERROR: /index.yaml is missing a sitemap")
|
|
else:
|
|
pages = []
|
|
for item in index["sitemap"]:
|
|
pages.append(Page(item, None))
|
|
|
|
for page in pages:
|
|
page.scan(SRC_DIR)
|
|
|
|
print("START INDEX")
|
|
for p in pages:
|
|
print(p)
|
|
print("END INDEX")
|
|
|
|
seperator = False
|
|
header = ""
|
|
for p in pages:
|
|
if (seperator):
|
|
header += "<span class='menuSeparator'>|</span>"
|
|
header += p.topMenuHTML()
|
|
seperator = True
|
|
|
|
os.makedirs(TARGET_DIR, exist_ok=True)
|
|
with open(TARGET_DIR + '/header.html', 'w') as file:
|
|
file.write(header);
|
|
|
|
with open('template.html') as file:
|
|
template = Template(file.read())
|
|
for p in pages:
|
|
render(p, template, header)
|
|
|
|
with open('style.scss', 'r') as file:
|
|
css = sass.compile(string=file.read())
|
|
with open(TARGET_DIR + '/style.css', 'w') as file:
|
|
file.write(css)
|
|
del css
|
|
|
|
if __name__ == '__main__':
|
|
index('index.yml')
|