Add description and HTML to feed

This commit is contained in:
octospacc 2022-06-24 21:22:37 +02:00
parent d1445da3d9
commit 477a217c57
1 changed files with 48 additions and 28 deletions

View File

@ -239,7 +239,7 @@ def MakeCategoryLine(Meta, Reserved):
Categories += '[{}]({}{}.html) '.format(i, GetLevels(Reserved['Categories']) + Reserved['Categories'], i) Categories += '[{}]({}{}.html) '.format(i, GetLevels(Reserved['Categories']) + Reserved['Categories'], i)
return Categories return Categories
def PatchHTML(Template, PartsText, ContextParts, ContextPartsText, HTMLPagesList, PagePath, Content, Titles, Meta, SiteRoot, FolderRoots, Categories, Locale, Reserved): def PatchHTML(Base, PartsText, ContextParts, ContextPartsText, HTMLPagesList, PagePath, Content, Titles, Meta, SiteRoot, FolderRoots, Categories, Locale, Reserved):
HTMLTitles = FormatTitles(Titles) HTMLTitles = FormatTitles(Titles)
BodyDescription, BodyImage = '', '' BodyDescription, BodyImage = '', ''
Parse = BeautifulSoup(Content, 'html.parser') Parse = BeautifulSoup(Content, 'html.parser')
@ -248,7 +248,11 @@ def PatchHTML(Template, PartsText, ContextParts, ContextPartsText, HTMLPagesList
if not BodyImage and Parse.img and Parse.img['src']: if not BodyImage and Parse.img and Parse.img['src']:
BodyImage = Parse.img['src'] BodyImage = Parse.img['src']
for Line in Template.splitlines(): Title = GetTitle(Meta, Titles, 'MetaTitle')
Description = GetDescription(Meta, BodyDescription, 'MetaDescription')
Image = GetImage(Meta, BodyImage, 'MetaImage')
for Line in Base.splitlines():
Line = Line.lstrip().rstrip() Line = Line.lstrip().rstrip()
if Line.startswith('[HTML:ContextPart:') and Line.endswith(']'): if Line.startswith('[HTML:ContextPart:') and Line.endswith(']'):
Path = Line[len('[HTML:ContextPart:'):-1] Path = Line[len('[HTML:ContextPart:'):-1]
@ -263,25 +267,31 @@ def PatchHTML(Template, PartsText, ContextParts, ContextPartsText, HTMLPagesList
Text = ContextPartsText['{}/{}'.format(Path, Part)] Text = ContextPartsText['{}/{}'.format(Path, Part)]
else: else:
Text = '' Text = ''
Template = Template.replace('[HTML:ContextPart:{}]'.format(Path), Text) Base = Base.replace('[HTML:ContextPart:{}]'.format(Path), Text)
for i in PartsText: for i in PartsText:
Template = Template.replace('[HTML:Part:{}]'.format(i), PartsText[i]) Base = Base.replace('[HTML:Part:{}]'.format(i), PartsText[i])
Template = Template.replace('[HTML:Page:LeftBox]', HTMLPagesList) Base = Base.replace('[HTML:Page:LeftBox]', HTMLPagesList)
Template = Template.replace('[HTML:Page:RightBox]', HTMLTitles) Base = Base.replace('[HTML:Page:RightBox]', HTMLTitles)
Template = Template.replace('[HTML:Page:Title]', GetTitle(Meta, Titles, 'MetaTitle')) Base = Base.replace('[HTML:Page:Title]', Title)
Template = Template.replace('[HTML:Page:Description]', GetDescription(Meta, BodyDescription, 'MetaDescription')) Base = Base.replace('[HTML:Page:Description]', Description)
Template = Template.replace('[HTML:Page:Image]', GetImage(Meta, BodyImage, 'MetaImage')) Base = Base.replace('[HTML:Page:Image]', Image)
Template = Template.replace('[HTML:Page:Path]', PagePath) Base = Base.replace('[HTML:Page:Path]', PagePath)
Template = Template.replace('[HTML:Page:Style]', Meta['Style']) Base = Base.replace('[HTML:Page:Style]', Meta['Style'])
Template = Template.replace('[HTML:Page:Content]', Content) Base = Base.replace('[HTML:Page:Content]', Content)
Template = Template.replace('[HTML:Page:ContentHeader]', MakeContentHeader(Meta, Locale, MakeCategoryLine(Meta, Reserved))) Base = Base.replace('[HTML:Page:ContentHeader]', MakeContentHeader(Meta, Locale, MakeCategoryLine(Meta, Reserved)))
Template = Template.replace('[HTML:Site:AbsoluteRoot]', SiteRoot) Base = Base.replace('[HTML:Site:AbsoluteRoot]', SiteRoot)
Template = Template.replace('[HTML:Site:RelativeRoot]', GetLevels(PagePath)) Base = Base.replace('[HTML:Site:RelativeRoot]', GetLevels(PagePath))
for i in FolderRoots: for i in FolderRoots:
Template = Template.replace('[HTML:Folder:{}:AbsoluteRoot]'.format(i), FolderRoots[i]) Base = Base.replace('[HTML:Folder:{}:AbsoluteRoot]'.format(i), FolderRoots[i])
for i in Categories: for i in Categories:
Template = Template.replace('<span>[HTML:Category:{}]</span>'.format(i), Categories[i]) Base = Base.replace('<span>[HTML:Category:{}]</span>'.format(i), Categories[i])
return Template
Content = Content.replace('[HTML:Site:AbsoluteRoot]', SiteRoot)
Content = Content.replace('[HTML:Site:RelativeRoot]', GetLevels(PagePath))
for i in FolderRoots:
Content = Content.replace('[HTML:Folder:{}:AbsoluteRoot]'.format(i), FolderRoots[i])
return Base, Content, Description, Image
def FileToStr(File, Truncate=''): def FileToStr(File, Truncate=''):
return str(File)[len(Truncate):] return str(File)[len(Truncate):]
@ -364,7 +374,7 @@ def DoMinify(HTML):
keep_pre=True) keep_pre=True)
def MakeSite(TemplatesText, PartsText, ContextParts, ContextPartsText, SiteName, SiteTagline, SiteDomain, SiteRoot, FolderRoots, Reserved, Locale, Minify, Sorting): def MakeSite(TemplatesText, PartsText, ContextParts, ContextPartsText, SiteName, SiteTagline, SiteDomain, SiteRoot, FolderRoots, Reserved, Locale, Minify, Sorting):
PagesPaths, PostsPaths, Pages, Categories = [], [], [], {} PagesPaths, PostsPaths, Pages, MadePages, Categories = [], [], [], [], {}
for Ext in Extensions['Pages']: for Ext in Extensions['Pages']:
for File in Path('Pages').rglob('*.{}'.format(Ext)): for File in Path('Pages').rglob('*.{}'.format(Ext)):
PagesPaths += [FileToStr(File, 'Pages/')] PagesPaths += [FileToStr(File, 'Pages/')]
@ -416,8 +426,8 @@ def MakeSite(TemplatesText, PartsText, ContextParts, ContextPartsText, SiteName,
Content = markdown(Content, extensions=['attr_list']) Content = markdown(Content, extensions=['attr_list'])
elif File.endswith('.pug'): elif File.endswith('.pug'):
Content = ReadFile(PagePath) Content = ReadFile(PagePath)
HTML = PatchHTML( HTML, HTMLContent, Description, Image = PatchHTML(
Template=TemplatesText[Meta['Template']], Base=TemplatesText[Meta['Template']],
PartsText=PartsText, PartsText=PartsText,
ContextParts=ContextParts, ContextParts=ContextParts,
ContextPartsText=ContextPartsText, ContextPartsText=ContextPartsText,
@ -434,8 +444,9 @@ def MakeSite(TemplatesText, PartsText, ContextParts, ContextPartsText, SiteName,
if Minify not in ('False', 'None'): if Minify not in ('False', 'None'):
HTML = DoMinify(HTML) HTML = DoMinify(HTML)
WriteFile(PagePath, HTML) WriteFile(PagePath, HTML)
MadePages += [[File, Content, Titles, Meta, HTMLContent, Description, Image]]
return Pages return MadePages
def GetFullDate(Date): def GetFullDate(Date):
if not Date: if not Date:
@ -466,23 +477,32 @@ def MakeFeed(Pages, SiteName, SiteTagline, SiteDomain, MaxEntries, Lang, Minify=
Feed.id(Link) Feed.id(Link)
Feed.title(SiteName if SiteName else ' ') Feed.title(SiteName if SiteName else ' ')
Feed.link(href=Link, rel='alternate') Feed.link(href=Link, rel='alternate')
Feed.subtitle(SiteTagline if SiteTagline else ' ') Feed.description(SiteTagline if SiteTagline else ' ')
if SiteDomain: if SiteDomain:
Feed.logo(SiteDomain.rstrip('/') + '/favicon.png') Feed.logo(SiteDomain.rstrip('/') + '/favicon.png')
Feed.language(Lang) Feed.language(Lang)
for File, Content, Titles, Meta in Pages: DoPages = []
#print(Meta['Image']) for e in Pages:
#print(Meta['Title']) if MaxEntries != 0 and e[3]['Type'] == 'Post':
#print(Meta['Description']) DoPages += [e]
MaxEntries -= 1
DoPages.reverse()
for File, Content, Titles, Meta, HTMLContent, Description, Image in DoPages:
if Meta['Type'] == 'Post': if Meta['Type'] == 'Post':
Entry = Feed.add_entry() Entry = Feed.add_entry()
Link = '{}/{}.html'.format(SiteDomain, StripExt(File)) if SiteDomain else ' ' File = '{}.html'.format(StripExt(File))
Content = ReadFile('public/'+File)
Link = SiteDomain+'/'+File if SiteDomain else ' '
CreatedOn = GetFullDate(Meta['CreatedOn']) CreatedOn = GetFullDate(Meta['CreatedOn'])
EditedOn = GetFullDate(Meta['EditedOn']) EditedOn = GetFullDate(Meta['EditedOn'])
Entry.id(Link) Entry.id(Link)
Entry.title(Meta['Title'] if Meta['Title'] else ' ') Entry.title(Meta['Title'] if Meta['Title'] else ' ')
Entry.description(Description)
Entry.link(href=Link, rel='alternate') Entry.link(href=Link, rel='alternate')
Entry.content(HTMLContent, type='html')
if CreatedOn: if CreatedOn:
Entry.pubDate(CreatedOn) Entry.pubDate(CreatedOn)
EditedOn = EditedOn if EditedOn else CreatedOn if CreatedOn and not EditedOn else '1970-01-01T00:00+00:00' EditedOn = EditedOn if EditedOn else CreatedOn if CreatedOn and not EditedOn else '1970-01-01T00:00+00:00'