webTemplate/index.py
2023-02-06 09:50:20 +01:00

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')