mirror of
https://gitlab.com/octtspacc/staticoso
synced 2025-03-12 01:00:10 +01:00
Some updates to classes in HTML generation
This commit is contained in:
parent
9551342b74
commit
8436f03ec7
@ -289,6 +289,16 @@ def Main(Args, FeedEntries):
|
||||
else:
|
||||
shutil.copytree('Assets', OutDir, dirs_exist_ok=True)
|
||||
|
||||
#def DoSiteBuild(Arg=None):
|
||||
# #try:
|
||||
# # SiteEditObserver.stop()
|
||||
# # SiteEditObserver.join()
|
||||
# #except:
|
||||
# # pass
|
||||
# Main(Args=Args, FeedEntries=FeedEntries)
|
||||
# logging.info(f"✅ Done! ({round(time.time()-StartTime, 3)}s)")
|
||||
# #SiteEditObserver.start()
|
||||
|
||||
if __name__ == '__main__':
|
||||
StartTime = time.time()
|
||||
|
||||
@ -341,7 +351,26 @@ if __name__ == '__main__':
|
||||
logging.warning("⚠ Can't load the XML libraries. XML Feeds Generation is Disabled. Make sure the 'lxml' library is installed.")
|
||||
FeedEntries = 0
|
||||
|
||||
Main(
|
||||
Args=Args,
|
||||
FeedEntries=FeedEntries)
|
||||
#from watchdog.observers import Observer
|
||||
#from watchdog.events import LoggingEventHandler
|
||||
#SiteEditEvent = LoggingEventHandler()
|
||||
#SiteEditEvent.on_created = DoSiteBuild
|
||||
#SiteEditEvent.on_deleted = DoSiteBuild
|
||||
#SiteEditEvent.on_modified = DoSiteBuild
|
||||
#SiteEditEvent.on_moved = DoSiteBuild
|
||||
#SiteEditObserver = Observer()
|
||||
#SiteEditObserver.schedule(SiteEditEvent, ".", recursive=True)
|
||||
#SiteEditObserver.start()
|
||||
|
||||
Main(Args=Args, FeedEntries=FeedEntries)
|
||||
logging.info(f"✅ Done! ({round(time.time()-StartTime, 3)}s)")
|
||||
#DoSiteBuild()
|
||||
|
||||
#try:
|
||||
# while True:
|
||||
# pass
|
||||
#except KeyboardInterrupt:
|
||||
# logging.info("Stopped.")
|
||||
#finally:
|
||||
# SiteEditObserver.stop()
|
||||
# SiteEditObserver.join()
|
||||
|
@ -33,11 +33,11 @@ RedirectPageTemplate = """\
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>{TitlePrefix}Redirect</title>
|
||||
<link rel="canonical" href="{SiteDomain}/{DestURL}">
|
||||
<meta http-equiv="refresh" content="0; url='{DestURL}'">
|
||||
<link rel="canonical" href="{SiteDomain}/{DestURL}"/>
|
||||
<meta http-equiv="refresh" content="0; url='{DestURL}'"/>
|
||||
</head>
|
||||
<body>
|
||||
<p><a href="{DestURL}">{StrClick}</a> {StrRedirect}.</p>
|
||||
@ -46,15 +46,15 @@ RedirectPageTemplate = """\
|
||||
"""
|
||||
HTMLCommentsBlock = '<br><h3>{StrComments}</h3><a href="{URL}" rel="noopener" target="_blank">{StrOpen} <span class="twa twa-↗️"><span>↗️</span></span></a>'
|
||||
|
||||
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 \\ <li>Item 1<ul>
|
||||
# .:Item 2 ============\\ <li>Item 2<ul>
|
||||
# ..:Item 3 ============// <li>Item 3</li></ul></li></ul></li>
|
||||
# :Item 4 // <li>Item 4</li>
|
||||
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'</li>\n</{Type}>' * (CurDepth - NextDepth) + '</li>'
|
||||
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'<span class="staticoso-ContentHeader-Index" id="staticoso-ContentHeader-Index"><span class="staticoso-Value">{Locale["Unlisted"]}</span></span><br>'
|
||||
return f'<p>{Header}</p>'
|
||||
|
||||
def MakeCategoryLine(File, Meta):
|
||||
def MakeCategoryLine(File:str, Meta:dict):
|
||||
Categories = ''
|
||||
for Cat in Meta['Categories']:
|
||||
Categories += f' <a href="{GetPathLevels(File)}Categories/{Cat}.html">{html.escape(Cat)}</a> '
|
||||
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'<a href="{Href}">{Title}</a>'
|
||||
#else:
|
||||
# Title = f'<span class="staticoso-ListItem-Plain">{Title}</span>'
|
||||
if Meta['Type'] == 'Post':
|
||||
CreatedOn = Meta['CreatedOn'] if Meta['CreatedOn'] else '?'
|
||||
Title = f"[<time>{CreatedOn}</time>] {Title}"
|
||||
Title = f"<span>[<time>{CreatedOn}</time>]</span> {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):
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>{Title}</title>
|
||||
<link rel="canonical" href="{URL}">
|
||||
<link rel="canonical" href="{URL}"/>
|
||||
{Redirect}
|
||||
</head>
|
||||
<body>
|
||||
|
@ -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 += ' <span>' + Title + '</span> '
|
||||
List += f' <span>{Title}</span> '
|
||||
else:
|
||||
List += Levels + Title + '\n'
|
||||
List += f'{Levels}<span>{Title}</span>\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('<p>').removesuffix('<p>')
|
||||
else:
|
||||
Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', SiteRoot, BlogName, PathPrefix)
|
||||
Title = MakeListTitle(File, Meta, Titles, 'HTMLTitle', BlogName, PathPrefix)
|
||||
if SingleLine:
|
||||
List += ' <span>' + Title + '</span> '
|
||||
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,
|
||||
#'<staticoso:SiteMenu>': HTMLPagesList,
|
||||
#'[staticoso:Page:Lang]': Meta['Language'] if Meta['Language'] else SiteLang,
|
||||
#'<staticoso:PageLang>': Meta['Language'] if Meta['Language'] else SiteLang,
|
||||
#'<staticoso:PageLanguage>': Meta['Language'] if Meta['Language'] else SiteLang,
|
||||
#'[staticoso:Page:Chapters]': HTMLTitles,
|
||||
#'<staticoso:PageSections>': HTMLTitles,
|
||||
#'[staticoso:Page:Title]': Title,
|
||||
#'<staticoso:PageTitle>': Title,
|
||||
#'[staticoso:Page:Description]': Description,
|
||||
#'<staticoso:PageDescription>': Description,
|
||||
#'[staticoso:Page:Image]': Image,
|
||||
#'<staticoso:PageImage>': Image,
|
||||
#'[staticoso:Page:Path]': PagePath,
|
||||
#'<staticoso:PagePath>': PagePath,
|
||||
#'[staticoso:PageHead]': Meta['Head'],
|
||||
#'<staticoso:PageHead>': Meta['Head'],
|
||||
#'[staticoso:Page:Style]': Meta['Style'],
|
||||
#'<staticoso:PageStyle>': 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,
|
||||
#'<staticoso:PageContent>': Content,
|
||||
#'[staticoso:Page:ContentInfo]': ContentHeader,
|
||||
#'<staticoso:PageContentInfo>': ContentHeader,
|
||||
#'[staticoso:BuildTime]': TimeNow,
|
||||
#'<staticoso:BuildTime>': TimeNow,
|
||||
#'<staticoso:SiteDomain>': SiteDomain,
|
||||
#'[staticoso:Site:Name]': SiteName,
|
||||
#'<staticoso:SiteName>': SiteName,
|
||||
#'[staticoso:Site:AbsoluteRoot]': SiteRoot,
|
||||
#'<staticoso:SiteAbsoluteRoot>': SiteRoot,
|
||||
#'[staticoso:Site:RelativeRoot]': RelativeRoot,
|
||||
#'<staticoso:SiteRelativeRoot>': 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,
|
||||
#'<staticoso:PageTitle>': Title,
|
||||
#'[staticoso:Page:Description]': Description,
|
||||
#'<staticoso:PageDescription>': Description,
|
||||
#'<staticoso:SiteDomain>': SiteDomain,
|
||||
#'[staticoso:Site:Name]': SiteName,
|
||||
#'<staticoso:SiteName>': SiteName,
|
||||
#'[staticoso:Site:AbsoluteRoot]': SiteRoot,
|
||||
#'<staticoso:SiteAbsoluteRoot>': SiteRoot,
|
||||
#'[staticoso:Site:RelativeRoot]': RelativeRoot,
|
||||
#'<staticoso:SiteRelativeRoot>': RelativeRoot,
|
||||
# #DEPRECATION #
|
||||
'[staticoso:Page:Title]': Title,
|
||||
'[staticoso:Page:Description]': Description,
|
||||
|
1
TODO
1
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
|
||||
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
lxml
|
Loading…
x
Reference in New Issue
Block a user