forked from indymedia/epicyon
				
			Multi CSS; Alter HTML generation
							parent
							
								
									5d34e0d4be
								
							
						
					
					
						commit
						2171fd07a1
					
				|  | @ -8,13 +8,16 @@ __status__ = "Production" | |||
| 
 | ||||
| import os | ||||
| from utils import isPublicPostFromUrl | ||||
| from utils import getConfigParam | ||||
| from utils import getNicknameFromActor | ||||
| from utils import getDomainFromActor | ||||
| from utils import getImageFormats | ||||
| from utils import getMediaFormats | ||||
| from webapp_utils import getBannerFile | ||||
| from webapp_utils import htmlHeaderWithExternalStyle | ||||
| from webapp_utils import htmlHeaderWithExternalStyles | ||||
| from webapp_utils import htmlFooter | ||||
| from webapp_headerbuttons import headerButtonsTimeline, headerNewsTabs | ||||
| from posts import isModerator | ||||
| 
 | ||||
| 
 | ||||
| def _htmlFollowingDataList(baseDir: str, nickname: str, | ||||
|  | @ -250,9 +253,21 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {}, | |||
|             newPostText = \ | ||||
|                 '<p>' + file.read() + '</p>\n' | ||||
| 
 | ||||
|     cssFilename = baseDir + '/epicyon-profile.css' | ||||
|     cssFiles = [] | ||||
| 
 | ||||
|     cssFiles.append(baseDir + '/epicyon-profile.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: | ||||
|         path = path.split('?')[0] | ||||
|  | @ -555,16 +570,39 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {}, | |||
|             dateAndLocation += '<input type="text" name="category">\n' | ||||
|         dateAndLocation += '</div>\n' | ||||
| 
 | ||||
|     newPostForm = htmlHeaderWithExternalStyle(cssFilename) | ||||
|     newPostForm = htmlHeaderWithExternalStyles(cssFiles) | ||||
| 
 | ||||
|     newPostForm += \ | ||||
|         '<header>\n' + \ | ||||
|         '<a href="/users/' + nickname + '/' + defaultTimeline + '" title="' + \ | ||||
|         translate['Switch to timeline view'] + '" alt="' + \ | ||||
|         translate['Switch to timeline view'] + '">\n' | ||||
|     newPostForm += '<img loading="lazy" class="timeline-banner" src="' + \ | ||||
|         '/users/' + nickname + '/' + bannerFile + '" /></a>\n' + \ | ||||
|         '</header>\n' | ||||
|     usersPath = '/users/' + nickname | ||||
| 
 | ||||
|     newPostForm += '<div class="header">\n' | ||||
| 
 | ||||
|     if not defaultTimeline == 'tlfeatures': | ||||
|         newPostForm += (f"\t<a class=\"timeline-banner hidden-text\" href=\"/users/{nickname}/{defaultTimeline}\" " | ||||
|                         f"style=\"background-image: url('{usersPath}/{bannerFile}');\">" | ||||
|                         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 = '' | ||||
|     for m in mentions: | ||||
|  | @ -638,6 +676,24 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {}, | |||
|             # reporting a post to moderator | ||||
|             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 += \ | ||||
|         '<form enctype="multipart/form-data" method="POST" ' + \ | ||||
|         'accept-charset="UTF-8" action="' + \ | ||||
|  | @ -742,6 +798,9 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {}, | |||
|     newPostForm += '  </div>\n' | ||||
|     newPostForm += '</form>\n' | ||||
| 
 | ||||
|     # Close "section" and "page" div | ||||
|     newPostForm += '</div><!-- div main -->\n</div><!-- div page -->\n' | ||||
| 
 | ||||
|     if not reportUrl: | ||||
|         newPostForm = \ | ||||
|             newPostForm.replace('<body>', '<body onload="focusOnMessage()">') | ||||
|  |  | |||
|  | @ -352,6 +352,7 @@ def headerButtonsTimeline(defaultTimeline: str, | |||
|         navIconStr += '\t\t\t</ul>\n\t\t</div>\n' | ||||
| 
 | ||||
|     # benchmark 5 | ||||
|     if timelineStartTime: | ||||
|         timeDiff = int((time.time() - timelineStartTime) * 1000) | ||||
|         if timeDiff > 100: | ||||
|             print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff)) | ||||
|  |  | |||
|  | @ -195,6 +195,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, | |||
|         # Close banner div | ||||
|         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 | ||||
|     tlStr += '<div class="timeline">\n' | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue