Multi CSS; Alter HTML generation

alt-html-css
Admin 2020-12-03 11:41:10 +00:00
parent 5d34e0d4be
commit 2171fd07a1
3 changed files with 77 additions and 15 deletions

View File

@ -8,13 +8,16 @@ __status__ = "Production"
import os import os
from utils import isPublicPostFromUrl from utils import isPublicPostFromUrl
from utils import getConfigParam
from utils import getNicknameFromActor from utils import getNicknameFromActor
from utils import getDomainFromActor from utils import getDomainFromActor
from utils import getImageFormats from utils import getImageFormats
from utils import getMediaFormats from utils import getMediaFormats
from webapp_utils import getBannerFile from webapp_utils import getBannerFile
from webapp_utils import htmlHeaderWithExternalStyle from webapp_utils import htmlHeaderWithExternalStyles
from webapp_utils import htmlFooter from webapp_utils import htmlFooter
from webapp_headerbuttons import headerButtonsTimeline, headerNewsTabs
from posts import isModerator
def _htmlFollowingDataList(baseDir: str, nickname: str, def _htmlFollowingDataList(baseDir: str, nickname: str,
@ -250,9 +253,21 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
newPostText = \ newPostText = \
'<p>' + file.read() + '</p>\n' '<p>' + file.read() + '</p>\n'
cssFilename = baseDir + '/epicyon-profile.css' cssFiles = []
cssFiles.append(baseDir + '/epicyon-profile.css')
if os.path.isfile(baseDir + '/epicyon.css'): if os.path.isfile(baseDir + '/epicyon.css'):
cssFilename = baseDir + '/epicyon.css' cssFiles[0] = baseDir + '/epicyon.css'
# TODO: Clean up and remove this override
cssFiles[0] = 'base.css'
# Get theme-specific css if exists - must be named '<theme-name>.css'
themeName = getConfigParam(baseDir, 'theme')
themePath = f'{baseDir}/theme/{themeName}.css'
if os.path.isfile(themePath):
cssFiles.append('theme/' + themeName + '.css')
if '?' in path: if '?' in path:
path = path.split('?')[0] path = path.split('?')[0]
@ -555,16 +570,39 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
dateAndLocation += '<input type="text" name="category">\n' dateAndLocation += '<input type="text" name="category">\n'
dateAndLocation += '</div>\n' dateAndLocation += '</div>\n'
newPostForm = htmlHeaderWithExternalStyle(cssFilename) newPostForm = htmlHeaderWithExternalStyles(cssFiles)
newPostForm += \ usersPath = '/users/' + nickname
'<header>\n' + \
'<a href="/users/' + nickname + '/' + defaultTimeline + '" title="' + \ newPostForm += '<div class="header">\n'
translate['Switch to timeline view'] + '" alt="' + \
translate['Switch to timeline view'] + '">\n' if not defaultTimeline == 'tlfeatures':
newPostForm += '<img loading="lazy" class="timeline-banner" src="' + \ newPostForm += (f"\t<a class=\"timeline-banner hidden-text\" href=\"/users/{nickname}/{defaultTimeline}\" "
'/users/' + nickname + '/' + bannerFile + '" /></a>\n' + \ f"style=\"background-image: url('{usersPath}/{bannerFile}');\">"
'</header>\n' f"{translate['Switch to timeline view']}</a>\n")
else:
# TODO: News instances should ignore personalised banners
# Currently uses the 'news' actor banner - as it remains unchanged
newPostForm += (f"\t<a class=\"timeline-banner hidden-text\" href=\"/users/{nickname}/tlfeatures\">"
f"{translate['Features']}</a>\n"
f"\t<div class=\"title\">\n"
f"\t\t<span>#IndymediaBack</span>\n"
f"\t</div>\n")
# Certain Epciyon pages should only be accessible via the 'User' page for News instances
# TODO: Better solution - Currently this is a duplicate of list created in 'webapp_timeline.py'
userPages = ['inbox', 'outbox', 'dm', 'tlreplies', 'tlblogs', 'tlmedia', 'tlshares', \
'tlsaves', 'tlevents', 'tlbookmarks', 'moderation', 'search', \
'followers', 'newfollowers', 'newdm', 'newpost', 'newblog', 'newevent']
# Full row "navbar"
if defaultTimeline == 'tlfeatures':
# Show "tab" links instead of standard "buttons"
# NOTE: "inbox" is used as a generic boxName, as with 'User' pages
newPostForm += headerNewsTabs('inbox', translate, usersPath, baseDir, userPages)
# Close banner div
newPostForm += '</div>\n'
mentionsStr = '' mentionsStr = ''
for m in mentions: for m in mentions:
@ -638,6 +676,24 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
# reporting a post to moderator # reporting a post to moderator
mentionsStr = 'Re: ' + reportUrl + '\n\n' + mentionsStr mentionsStr = 'Re: ' + reportUrl + '\n\n' + mentionsStr
# TODO: Place form inside a "page" div for 'News' instances
newPostForm += '<div class="page">\n'
moderator = isModerator(baseDir, nickname)
# TODO: Add "User" links
if defaultTimeline == 'tlfeatures':
# NOTE: It appears that 'endpoint' is effectively 'boxName'
newPostForm += \
headerButtonsTimeline(defaultTimeline, endpoint, pageNumber,
translate, usersPath,
False, moderator,
False,
baseDir, nickname,
domain, None,
True, userPages)
newPostForm += '<div class="section main">\n'
newPostForm += \ newPostForm += \
'<form enctype="multipart/form-data" method="POST" ' + \ '<form enctype="multipart/form-data" method="POST" ' + \
'accept-charset="UTF-8" action="' + \ 'accept-charset="UTF-8" action="' + \
@ -742,6 +798,9 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
newPostForm += ' </div>\n' newPostForm += ' </div>\n'
newPostForm += '</form>\n' newPostForm += '</form>\n'
# Close "section" and "page" div
newPostForm += '</div><!-- div main -->\n</div><!-- div page -->\n'
if not reportUrl: if not reportUrl:
newPostForm = \ newPostForm = \
newPostForm.replace('<body>', '<body onload="focusOnMessage()">') newPostForm.replace('<body>', '<body onload="focusOnMessage()">')

View File

@ -352,9 +352,10 @@ def headerButtonsTimeline(defaultTimeline: str,
navIconStr += '\t\t\t</ul>\n\t\t</div>\n' navIconStr += '\t\t\t</ul>\n\t\t</div>\n'
# benchmark 5 # benchmark 5
timeDiff = int((time.time() - timelineStartTime) * 1000) if timelineStartTime:
if timeDiff > 100: timeDiff = int((time.time() - timelineStartTime) * 1000)
print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff)) if timeDiff > 100:
print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff))
# Compile HTML parts # Compile HTML parts

View File

@ -195,6 +195,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
# Close banner div # Close banner div
tlStr += '</div>\n' tlStr += '</div>\n'
# TODO: Should probably use a more generic class, easier to re-use and help simplify CSS
# NOTE: Related also to class "page" added to 'webapp_create_post.py'
# start the timeline # start the timeline
tlStr += '<div class="timeline">\n' tlStr += '<div class="timeline">\n'