mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Semantic markup for blog posts
							parent
							
								
									121f625dd4
								
							
						
					
					
						commit
						818a920365
					
				
							
								
								
									
										29
									
								
								blog.py
								
								
								
								
							
							
						
						
									
										29
									
								
								blog.py
								
								
								
								
							| 
						 | 
				
			
			@ -11,9 +11,11 @@ from datetime import datetime
 | 
			
		|||
 | 
			
		||||
from content import replaceEmojiFromTags
 | 
			
		||||
from webapp_utils import htmlHeaderWithExternalStyle
 | 
			
		||||
from webapp_utils import htmlHeaderWithBlogMarkup
 | 
			
		||||
from webapp_utils import htmlFooter
 | 
			
		||||
from webapp_utils import getPostAttachmentsAsHtml
 | 
			
		||||
from webapp_media import addEmbeddedElements
 | 
			
		||||
from utils import removeHtml
 | 
			
		||||
from utils import getConfigParam
 | 
			
		||||
from utils import getFullDomain
 | 
			
		||||
from utils import getMediaFormats
 | 
			
		||||
| 
						 | 
				
			
			@ -375,11 +377,28 @@ def _htmlBlogRemoveCwButton(blogStr: str, translate: {}) -> str:
 | 
			
		|||
    return blogStr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _getSnippetFromBlogContent(postJsonObject: {}) -> str:
 | 
			
		||||
    """Returns a snippet of text from the blog post as a preview
 | 
			
		||||
    """
 | 
			
		||||
    content = postJsonObject['object']['content']
 | 
			
		||||
    if len(content) < 256:
 | 
			
		||||
        return removeHtml(content)
 | 
			
		||||
    if '<p>' in content:
 | 
			
		||||
        content = content.split('<p>', 1)[1]
 | 
			
		||||
        if '</p>' in content:
 | 
			
		||||
            content = content.split('</p>', 1)[0]
 | 
			
		||||
    content = removeHtml(content)
 | 
			
		||||
    if len(content) >= 256:
 | 
			
		||||
        content = content[:252] + '...'
 | 
			
		||||
    return content
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def htmlBlogPost(authorized: bool,
 | 
			
		||||
                 baseDir: str, httpPrefix: str, translate: {},
 | 
			
		||||
                 nickname: str, domain: str, domainFull: str,
 | 
			
		||||
                 postJsonObject: {},
 | 
			
		||||
                 peertubeInstances: []) -> str:
 | 
			
		||||
                 peertubeInstances: [],
 | 
			
		||||
                 systemLanguage: str) -> str:
 | 
			
		||||
    """Returns a html blog post
 | 
			
		||||
    """
 | 
			
		||||
    blogStr = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -389,7 +408,13 @@ def htmlBlogPost(authorized: bool,
 | 
			
		|||
        cssFilename = baseDir + '/blog.css'
 | 
			
		||||
    instanceTitle = \
 | 
			
		||||
        getConfigParam(baseDir, 'instanceTitle')
 | 
			
		||||
    blogStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
 | 
			
		||||
    published = postJsonObject['object']['published']
 | 
			
		||||
    title = postJsonObject['object']['summary']
 | 
			
		||||
    snippet = _getSnippetFromBlogContent(postJsonObject)
 | 
			
		||||
    blogStr = htmlHeaderWithBlogMarkup(cssFilename, instanceTitle,
 | 
			
		||||
                                       httpPrefix, domainFull, nickname,
 | 
			
		||||
                                       systemLanguage, published,
 | 
			
		||||
                                       title, snippet)
 | 
			
		||||
    _htmlBlogRemoveCwButton(blogStr, translate)
 | 
			
		||||
 | 
			
		||||
    blogStr += _htmlBlogPostContent(authorized, baseDir,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11094,7 +11094,8 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
                                       nickname, self.server.domain,
 | 
			
		||||
                                       self.server.domainFull,
 | 
			
		||||
                                       postJsonObject,
 | 
			
		||||
                                       self.server.peertubeInstances)
 | 
			
		||||
                                       self.server.peertubeInstances,
 | 
			
		||||
                                       self.server.systemLanguage)
 | 
			
		||||
                    if msg is not None:
 | 
			
		||||
                        msg = msg.encode('utf-8')
 | 
			
		||||
                        msglen = len(msg)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -791,6 +791,42 @@ def htmlHeaderWithWebsiteMarkup(cssFilename: str, instanceTitle: str,
 | 
			
		|||
    return htmlStr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def htmlHeaderWithBlogMarkup(cssFilename: str, instanceTitle: str,
 | 
			
		||||
                             httpPrefix: str, domain: str, nickname: str,
 | 
			
		||||
                             systemLanguage: str, published: str,
 | 
			
		||||
                             title: str, snippet: str) -> str:
 | 
			
		||||
    """html header which includes blog post markup
 | 
			
		||||
    https://schema.org/BlogPosting
 | 
			
		||||
    """
 | 
			
		||||
    htmlStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle,
 | 
			
		||||
                                          systemLanguage)
 | 
			
		||||
 | 
			
		||||
    authorUrl = httpPrefix + '://' + domain + '/users/' + nickname
 | 
			
		||||
    blogMarkup = \
 | 
			
		||||
        '    <script type="application/ld+json">\n' + \
 | 
			
		||||
        '    {\n' + \
 | 
			
		||||
        '      "@context" : "http://schema.org",\n' + \
 | 
			
		||||
        '      "@type" : "BlogPosting",\n' + \
 | 
			
		||||
        '      "headline": "' + title + '",\n' + \
 | 
			
		||||
        '      "datePublished": "' + published + '",\n' + \
 | 
			
		||||
        '      "dateModified": "' + published + '",\n' + \
 | 
			
		||||
        '      "author": {\n' + \
 | 
			
		||||
        '        "@type": "Person",\n' + \
 | 
			
		||||
        '        "name": "' + nickname + '",\n' + \
 | 
			
		||||
        '        "url": "' + authorUrl + '"\n' + \
 | 
			
		||||
        '      },\n' + \
 | 
			
		||||
        '      "publisher": {\n' + \
 | 
			
		||||
        '        "@type": "WebSite",\n' + \
 | 
			
		||||
        '        "name": "' + instanceTitle + '",\n' + \
 | 
			
		||||
        '        "url": "' + httpPrefix + '://' + domain + '/about.html"\n' + \
 | 
			
		||||
        '      },\n' + \
 | 
			
		||||
        '      "description": "' + snippet + '"\n' + \
 | 
			
		||||
        '    }\n' + \
 | 
			
		||||
        '    </script>\n'
 | 
			
		||||
    htmlStr = htmlStr.replace('<head>\n', '<head>\n' + blogMarkup)
 | 
			
		||||
    return htmlStr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def htmlFooter() -> str:
 | 
			
		||||
    htmlStr = '  </body>\n'
 | 
			
		||||
    htmlStr += '</html>\n'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue