Change cli argument, add more site root patching

This commit is contained in:
octospacc 2022-05-29 00:51:19 +02:00
parent afb1289e1e
commit 32e2d75a96
2 changed files with 25 additions and 18 deletions

View File

@ -15,7 +15,7 @@ Feel free to experiment with all of this stuff!
- [pug-cli >= 1.0.0-alpha6](https://npmjs.com/package/pug-cli) - [pug-cli >= 1.0.0-alpha6](https://npmjs.com/package/pug-cli)
## Features roadmap ## Features roadmap
- [ ] Custom page ordering - [x] Custom page ordering
- [ ] SCSS compilation support for CSS templates - [ ] SCSS compilation support for CSS templates
- [ ] Pug support for base templates and page side parts - [ ] Pug support for base templates and page side parts
- [ ] Differential recompile (to optimize resource waste on non-ephemeral servers) - [ ] Differential recompile (to optimize resource waste on non-ephemeral servers)

View File

@ -69,7 +69,7 @@ def LoadFromDir(Dir, Rglob):
Contents.update({File: ReadFile('{}/{}'.format(Dir, File))}) Contents.update({File: ReadFile('{}/{}'.format(Dir, File))})
return Contents return Contents
def PreProcessor(p): def PreProcessor(p, SiteRoot):
File = ReadFile(p) File = ReadFile(p)
Content, Titles, Meta = '', [], { Content, Titles, Meta = '', [], {
'Template': 'Standard.html', 'Template': 'Standard.html',
@ -116,7 +116,7 @@ def PugCompileList(Pages):
# Pug-cli seems to shit itself with folder paths as input, so we pass ALL the files as arguments # Pug-cli seems to shit itself with folder paths as input, so we pass ALL the files as arguments
os.system('pug {} > /dev/null'.format(Paths)) os.system('pug {} > /dev/null'.format(Paths))
def PatchHTML(Template, Parts, HTMLPagesList, Content, Titles, Meta): def PatchHTML(Template, Parts, HTMLPagesList, Content, Titles, Meta, SiteRoot):
HTMLTitles = FormatTitles(Titles) HTMLTitles = FormatTitles(Titles)
Template = Template.replace('[HTML:Page:Title]', 'Untitled' if not Titles else Titles[0].lstrip('#')) Template = Template.replace('[HTML:Page:Title]', 'Untitled' if not Titles else Titles[0].lstrip('#'))
@ -126,6 +126,7 @@ def PatchHTML(Template, Parts, HTMLPagesList, Content, Titles, Meta):
Template = Template.replace('[HTML:Page:MainBox]', Content) Template = Template.replace('[HTML:Page:MainBox]', Content)
for p in Parts: for p in Parts:
Template = Template.replace('[HTML:Site:AbsoluteRoot]', SiteRoot)
Template = Template.replace('[HTML:Part:{}]'.format(p), Parts[p]) Template = Template.replace('[HTML:Part:{}]'.format(p), Parts[p])
return Template return Template
@ -147,7 +148,7 @@ def OrderPages(Old):
New.remove([]) New.remove([])
return New return New
def GetHTMLPagesList(Pages, Root): def GetHTMLPagesList(Pages, SiteRoot):
List = '' List = ''
LastParent = [] LastParent = []
Pages = OrderPages(Pages) Pages = OrderPages(Pages)
@ -166,7 +167,7 @@ def GetHTMLPagesList(Pages, Root):
Title = Meta['Title'] if Meta['Title'] else 'Untitled' if not Titles else Titles[0].lstrip('#') Title = Meta['Title'] if Meta['Title'] else 'Untitled' if not Titles else Titles[0].lstrip('#')
Title = '[{}]({})'.format( Title = '[{}]({})'.format(
Title, Title,
'{}{}html'.format(Root, File[:-3])) '{}{}html'.format(SiteRoot, File[:-3]))
List += Levels + Title + '\n' List += Levels + Title + '\n'
return Markdown().convert(List) return Markdown().convert(List)
@ -176,53 +177,59 @@ def DelTmp():
for File in Path('public').rglob('*.md'): for File in Path('public').rglob('*.md'):
os.remove(File) os.remove(File)
def MakeSite(Templates, Parts, Root): def MakeSite(Templates, Parts, SiteRoot):
Pages = [] Pages = []
for File in Path('Pages').rglob('*.pug'): for File in Path('Pages').rglob('*.pug'):
File = FileToStr(File, 'Pages/') File = FileToStr(File, 'Pages/')
Content, Titles, Meta = PreProcessor('Pages/{}'.format(File)) Content, Titles, Meta = PreProcessor('Pages/{}'.format(File), SiteRoot)
Pages += [[File, Content, Titles, Meta]] Pages += [[File, Content, Titles, Meta]]
PugCompileList(Pages) PugCompileList(Pages)
HTMLPagesList = GetHTMLPagesList(Pages, Root) HTMLPagesList = GetHTMLPagesList(Pages, SiteRoot)
for File, Content, Titles, Meta in Pages: for File, Content, Titles, Meta in Pages:
Template = Templates[Meta['Template']] Template = Templates[Meta['Template']]
Template = Template.replace( Template = Template.replace(
'[HTML:Page:CSS]', '[HTML:Site:AbsoluteRoot]',
'{}{}.css'.format('../'*File.count('/'), Meta['Template'][:-5])) SiteRoot)
Template = Template.replace(
'[HTML:Site:RelativeRoot]',
'../'*File.count('/'))
WriteFile( WriteFile(
'public/{}html'.format(File[:-3]), 'public/{}html'.format(File[:-3]),
PatchHTML( PatchHTML(
Template, Parts, HTMLPagesList, Template, Parts, HTMLPagesList,
ReadFile('public/{}html'.format(File[:-3])), ReadFile('public/{}html'.format(File[:-3])),
Titles, Meta)) Titles, Meta, SiteRoot))
for File in Path('Pages').rglob('*.md'): for File in Path('Pages').rglob('*.md'):
File = FileToStr(File, 'Pages/') File = FileToStr(File, 'Pages/')
Content, Titles, Meta = PreProcessor('Pages/{}'.format(File)) Content, Titles, Meta = PreProcessor('Pages/{}'.format(File), SiteRoot)
Template = Templates[Meta['Template']] Template = Templates[Meta['Template']]
Template = Template.replace( Template = Template.replace(
'[HTML:Page:CSS]', '[HTML:Site:AbsoluteRoot]',
'{}{}.css'.format('../'*File.count('/'), Meta['Template'][:-5])) SiteRoot)
Template = Template.replace(
'[HTML:Site:RelativeRoot]',
'../'*File.count('/'))
WriteFile( WriteFile(
'public/{}html'.format(File[:-2]), 'public/{}html'.format(File[:-2]),
PatchHTML( PatchHTML(
Template, Parts, HTMLPagesList, Template, Parts, HTMLPagesList,
Markdown().convert(Content), Markdown().convert(Content),
Titles, Meta)) Titles, Meta, SiteRoot))
DelTmp() DelTmp()
def Main(Args): def Main(Args):
ResetPublic() ResetPublic()
Root = Args.Root if Args.Root else '/' SiteRoot = Args.SiteRoot if Args.SiteRoot else '/'
Templates = LoadFromDir('Templates', '*.html') Templates = LoadFromDir('Templates', '*.html')
Parts = LoadFromDir('Parts', '*.html') Parts = LoadFromDir('Parts', '*.html')
shutil.copytree('Pages', 'public') shutil.copytree('Pages', 'public')
MakeSite(Templates, Parts, Root) MakeSite(Templates, Parts, SiteRoot)
os.system("cp -R Assets/* public/") os.system("cp -R Assets/* public/")
if __name__ == '__main__': if __name__ == '__main__':
Parser = argparse.ArgumentParser() Parser = argparse.ArgumentParser()
Parser.add_argument('--Root', type=str) Parser.add_argument('--SiteRoot', type=str)
Args = Parser.parse_args() Args = Parser.parse_args()
Main(Args) Main(Args)