{StrOpen} ↗️'
-def DashifyTitle(Title, Done=[]):
+def DashifyTitle(Title:str, Done:list=[]):
return UndupeStr(DashifyStr(Title.lstrip(' ').rstrip(' ')), Done, '-')
-# Generate HTML tree/nested list from our internal metaformat, such as:
+# Generate HTML tree list (nested list) from our internal metaformat, such as:
# :Item 1 \\
Item 1
# .:Item 2 ============\\
Item 2
# ..:Item 3 ============//
Item 3
# :Item 4 //
Item 4
-def GenHTMLTreeList(MetaList:str, Type:str='ul'):
+def GenHTMLTreeList(MetaList:str, Type:str='ul', Class:str=""):
HTML = ''
Lines = MetaList.splitlines()
CurDepth, NextDepth, PrevDepth = 0, 0, 0
@@ -69,7 +69,7 @@ def GenHTMLTreeList(MetaList:str, Type:str='ul'):
elif NextDepth < CurDepth:
HTML += f'\n{Type}>' * (CurDepth - NextDepth) + ''
PrevDepth = CurDepth
- return f'<{Type}>{HTML}\n{Type}>'
+ return f'<{Type} class="staticoso-TreeList {Class}">{HTML}\n{Type}>'
def MakeLinkableTitle(Line:str, Title:str, DashTitle:str, Type:str):
if Type == 'md':
@@ -86,7 +86,7 @@ def MakeLinkableTitle(Line:str, Title:str, DashTitle:str, Type:str):
Rest=Line[Index+2:],
DashTitle=DashTitle)
-def GetTitle(FileName:str, Meta:dict, Titles:list, Prefer='MetaTitle', BlogName=None):
+def GetTitle(FileName:str, Meta:dict, Titles:list, Prefer:str='MetaTitle', BlogName:str=None):
if Prefer == 'BodyTitle':
Title = Titles[0].lstrip('#') if Titles else Meta['Title'] if Meta['Title'] else FileName
elif Prefer == 'MetaTitle':
@@ -97,21 +97,21 @@ def GetTitle(FileName:str, Meta:dict, Titles:list, Prefer='MetaTitle', BlogName=
Title += ' - ' + BlogName
return Title
-def GetDescription(Meta:dict, BodyDescription, Prefer='MetaDescription'):
+def GetDescription(Meta:dict, BodyDescription:str, Prefer:str='MetaDescription'):
if Prefer == 'BodyDescription':
Description = BodyDescription if BodyDescription else Meta['Description'] if Meta['Description'] else ''
elif Prefer == 'MetaDescription':
Description = Meta['Description'] if Meta['Description'] else BodyDescription if BodyDescription else ''
return Description
-def GetImage(Meta:dict, BodyImage, Prefer='MetaImage'):
+def GetImage(Meta:dict, BodyImage:str, Prefer:str='MetaImage'):
if Prefer == 'BodyImage':
Image = BodyImage if BodyImage else Meta['Image'] if Meta['Image'] else ''
elif Prefer == 'MetaImage':
Image = Meta['Image'] if Meta['Image'] else BodyImage if BodyImage else ''
return Image
-def MakeContentHeader(Meta:dict, Locale:dict, Categories=''):
+def MakeContentHeader(Meta:dict, Locale:dict, Categories:str=''):
Header = ''
for e in ['CreatedOn', 'EditedOn']:
if Meta[e]:
@@ -122,24 +122,26 @@ def MakeContentHeader(Meta:dict, Locale:dict, Categories=''):
Header += f'{Locale["Unlisted"]} '
return f'
{Header}
'
-def MakeCategoryLine(File, Meta):
+def MakeCategoryLine(File:str, Meta:dict):
Categories = ''
for Cat in Meta['Categories']:
Categories += f' {html.escape(Cat)} '
return Categories
-def MakeListTitle(File, Meta, Titles, Prefer, SiteRoot, BlogName, PathPrefix=''):
+def MakeListTitle(File:str, Meta:dict, Titles:list, Prefer:str, BlogName:str, PathPrefix:str=''):
Title = GetTitle(File.split('/')[-1], Meta, Titles, Prefer, BlogName).lstrip().rstrip()
Link = False if Meta['Index'] == 'Unlinked' else True
if Link:
Href = f'{PathPrefix}{StripExt(File)}.html'
Title = f'{Title}'
+ #else:
+ # Title = f'{Title}'
if Meta['Type'] == 'Post':
CreatedOn = Meta['CreatedOn'] if Meta['CreatedOn'] else '?'
- Title = f"[] {Title}"
+ Title = f"[] {Title}"
return Title
-def FormatTitles(Titles, Flatten=False):
+def FormatTitles(Titles:list, Flatten=False):
# TODO: Somehow titles written in Pug can end up here and don't work, they should be handled
List, DashyTitles = '', []
for t in Titles:
@@ -192,8 +194,10 @@ def MakeHTMLJournal(Flags, Locale, FilePath, HTML):
+
+
{Title}
-
+
{Redirect}
diff --git a/Source/Modules/Site.py b/Source/Modules/Site.py
index 2ccbb20..21907e0 100644
--- a/Source/Modules/Site.py
+++ b/Source/Modules/Site.py
@@ -64,14 +64,14 @@ def GetHTMLPagesList(Pages, BlogName, SiteRoot, PathPrefix, CallbackFile=None, U
Levels = '.' * ((Depth-2+i) if not Flatten else 0) + ':'
# If search node endswith index, it's a page; else, it's a folder
if StripExt(File).endswith('index'):
- Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', SiteRoot, BlogName, PathPrefix)
+ Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', BlogName, PathPrefix)
DoneCount += 1
else:
Title = CurParent[Depth-2+i]
if SingleLine:
- List += ' ' + Title + ' '
+ List += f' {Title} '
else:
- List += Levels + Title + '\n'
+ List += f'{Levels}{Title}\n'
# Pages with any other path
if not (Depth > 1 and StripExt(File).split('/')[-1] == 'index'):
@@ -80,14 +80,14 @@ def GetHTMLPagesList(Pages, BlogName, SiteRoot, PathPrefix, CallbackFile=None, U
if Meta['Order'] == 'Unite':
Title = markdown(MarkdownHTMLEscape(File, MarkdownExts), extensions=MarkdownExts).removeprefix('
').removesuffix('
')
else:
- Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', SiteRoot, BlogName, PathPrefix)
+ Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', BlogName, PathPrefix)
if SingleLine:
List += ' ' + Title + ' '
else:
List += Levels + Title + '\n'
if MenuStyle in ('Default', 'Flat'):
- return GenHTMLTreeList(List)
+ return GenHTMLTreeList(List, Class="staticoso-PagesList")
elif MenuStyle in ('Line', 'Excerpt', 'Image', 'Preview', 'Full'):
return List
@@ -361,25 +361,8 @@ def PatchHTML(File, HTML, StaticPartsText, DynamicParts, DynamicPartsText, HTMLP
HTML = None
else:
HTML = WrapDictReplWithEsc(HTML, {
- #'[staticoso:Site:Menu]': HTMLPagesList,
- #'': HTMLPagesList,
- #'[staticoso:Page:Lang]': Meta['Language'] if Meta['Language'] else SiteLang,
- #'': Meta['Language'] if Meta['Language'] else SiteLang,
- #'': Meta['Language'] if Meta['Language'] else SiteLang,
- #'[staticoso:Page:Chapters]': HTMLTitles,
- #'': HTMLTitles,
- #'[staticoso:Page:Title]': Title,
- #'': Title,
- #'[staticoso:Page:Description]': Description,
- #'': Description,
- #'[staticoso:Page:Image]': Image,
- #'': Image,
- #'[staticoso:Page:Path]': PagePath,
- #'': PagePath,
#'[staticoso:PageHead]': Meta['Head'],
#'': Meta['Head'],
- #'[staticoso:Page:Style]': Meta['Style'],
- #'': Meta['Style'],
# #DEPRECATION #
'staticoso:Site:Menu': HTMLPagesList,
'staticoso:Page:Lang': Meta['Language'] if Meta['Language'] else SiteLang,
@@ -401,19 +384,6 @@ def PatchHTML(File, HTML, StaticPartsText, DynamicParts, DynamicPartsText, HTMLP
'staticoso:PageHead': Meta['Head'],
'staticoso:PageStyle': Meta['Style'],
# NOTE: Content is injected in page only at this point! Keep in mind for other substitutions
- #'[staticoso:Page:Content]': Content,
- #'': Content,
- #'[staticoso:Page:ContentInfo]': ContentHeader,
- #'': ContentHeader,
- #'[staticoso:BuildTime]': TimeNow,
- #'': TimeNow,
- #'': SiteDomain,
- #'[staticoso:Site:Name]': SiteName,
- #'': SiteName,
- #'[staticoso:Site:AbsoluteRoot]': SiteRoot,
- #'': SiteRoot,
- #'[staticoso:Site:RelativeRoot]': RelativeRoot,
- #'': RelativeRoot,
# #DEPRECATION #
'staticoso:Page:Content': Content,
'staticoso:Page:ContentInfo': ContentHeader,
@@ -446,17 +416,6 @@ def PatchHTML(File, HTML, StaticPartsText, DynamicParts, DynamicPartsText, HTMLP
# TODO: Clean this doubling?
ContentHTML = Content
ContentHTML = WrapDictReplWithEsc(ContentHTML, {
- #'[staticoso:Page:Title]': Title,
- #'': Title,
- #'[staticoso:Page:Description]': Description,
- #'': Description,
- #'': SiteDomain,
- #'[staticoso:Site:Name]': SiteName,
- #'': SiteName,
- #'[staticoso:Site:AbsoluteRoot]': SiteRoot,
- #'': SiteRoot,
- #'[staticoso:Site:RelativeRoot]': RelativeRoot,
- #'': RelativeRoot,
# #DEPRECATION #
'[staticoso:Page:Title]': Title,
'[staticoso:Page:Description]': Description,
diff --git a/TODO b/TODO
index cb494ec..bce004c 100644
--- a/TODO
+++ b/TODO
@@ -1,3 +1,4 @@
+- Put more metadata in the generated HTML (classes, data- attribs., ecc..) for CSS purposes
- .html input pages bug: // metadata lines not being removed from final file after parsing
- Multi-line metadata flags
- Category-based feeds
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..ab90481
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+lxml