mirror of https://gitlab.com/bashrc2/epicyon
Separate header buttons
parent
1ea9aa18ac
commit
ec46767a27
|
@ -0,0 +1,330 @@
|
|||
__filename__ = "webapp_headerbuttons.py"
|
||||
__author__ = "Bob Mottram"
|
||||
__license__ = "AGPL3+"
|
||||
__version__ = "1.1.0"
|
||||
__maintainer__ = "Bob Mottram"
|
||||
__email__ = "bob@freedombone.net"
|
||||
__status__ = "Production"
|
||||
|
||||
|
||||
import time
|
||||
from datetime import datetime
|
||||
from happening import todaysEventsCheck
|
||||
from happening import thisWeeksEventsCheck
|
||||
from webapp_utils import htmlHighlightLabel
|
||||
|
||||
|
||||
def headerButtonsTimeline(defaultTimeline: str,
|
||||
boxName: str,
|
||||
pageNumber: int,
|
||||
translate: {},
|
||||
usersPath: str,
|
||||
mediaButton: str,
|
||||
blogsButton: str,
|
||||
newsButton: str,
|
||||
inboxButton: str,
|
||||
dmButton: str,
|
||||
newDM: str,
|
||||
repliesButton: str,
|
||||
newReply: str,
|
||||
minimal: bool,
|
||||
sentButton: str,
|
||||
sharesButtonStr: str,
|
||||
bookmarksButtonStr: str,
|
||||
eventsButtonStr: str,
|
||||
moderationButtonStr: str,
|
||||
newPostButtonStr: str,
|
||||
baseDir: str,
|
||||
nickname: str, domain: str,
|
||||
iconsPath: str,
|
||||
timelineStartTime,
|
||||
newCalendarEvent: bool,
|
||||
calendarPath: str,
|
||||
calendarImage: str,
|
||||
followApprovals: str,
|
||||
iconsAsButtons: bool) -> str:
|
||||
"""Returns the header at the top of the timeline, containing
|
||||
buttons for inbox, outbox, search, calendar, etc
|
||||
"""
|
||||
# start of the button header with inbox, outbox, etc
|
||||
tlStr = '<div class="containerHeader">\n'
|
||||
# first button
|
||||
if defaultTimeline == 'tlmedia':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlmedia"><button class="' + \
|
||||
mediaButton + '"><span>' + translate['Media'] + \
|
||||
'</span></button></a>'
|
||||
elif defaultTimeline == 'tlblogs':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlblogs"><button class="' + \
|
||||
blogsButton + '"><span>' + translate['Blogs'] + \
|
||||
'</span></button></a>'
|
||||
elif defaultTimeline == 'tlnews':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlnews"><button class="' + \
|
||||
newsButton + '"><span>' + translate['Features'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + \
|
||||
translate['Inbox'] + '</span></button></a>'
|
||||
|
||||
# if this is a news instance and we are viewing the news timeline
|
||||
newsHeader = False
|
||||
if defaultTimeline == 'tlnews' and boxName == 'tlnews':
|
||||
newsHeader = True
|
||||
|
||||
if not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/dm"><button class="' + dmButton + \
|
||||
'"><span>' + htmlHighlightLabel(translate['DM'], newDM) + \
|
||||
'</span></button></a>'
|
||||
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/tlreplies"><button class="' + \
|
||||
repliesButton + '"><span>' + \
|
||||
htmlHighlightLabel(translate['Replies'], newReply) + \
|
||||
'</span></button></a>'
|
||||
|
||||
# typically the media button
|
||||
if defaultTimeline != 'tlmedia':
|
||||
if not minimal and not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlmedia"><button class="' + \
|
||||
mediaButton + '"><span>' + translate['Media'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not minimal:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton+'"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
isFeaturesTimeline = \
|
||||
defaultTimeline == 'tlnews' and boxName == 'tlnews'
|
||||
|
||||
if not isFeaturesTimeline:
|
||||
# typically the blogs button
|
||||
# but may change if this is a blogging oriented instance
|
||||
if defaultTimeline != 'tlblogs':
|
||||
if not minimal and not isFeaturesTimeline:
|
||||
titleStr = translate['Blogs']
|
||||
if defaultTimeline == 'tlnews':
|
||||
titleStr = translate['Article']
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlblogs"><button class="' + \
|
||||
blogsButton + '"><span>' + titleStr + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not minimal:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# typically the news button
|
||||
# but may change if this is a news oriented instance
|
||||
if defaultTimeline != 'tlnews':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlnews"><button class="' + \
|
||||
newsButton + '"><span>' + translate['News'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# show todays events buttons on the first inbox page
|
||||
happeningStr = ''
|
||||
if boxName == 'inbox' and pageNumber == 1:
|
||||
if todaysEventsCheck(baseDir, nickname, domain):
|
||||
now = datetime.now()
|
||||
|
||||
# happening today button
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + '/calendar?year=' + \
|
||||
str(now.year) + '?month=' + str(now.month) + \
|
||||
'?day=' + str(now.day) + '">' + \
|
||||
'<button class="buttonevent">' + \
|
||||
translate['Happening Today'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + '/calendar?year=' + \
|
||||
str(now.year) + '?month=' + str(now.month) + \
|
||||
'?day=' + str(now.day) + '">' + \
|
||||
'<button class="button">' + \
|
||||
translate['Happening Today'] + '</button></a>'
|
||||
|
||||
# happening this week button
|
||||
if thisWeeksEventsCheck(baseDir, nickname, domain):
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="buttonevent">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="button">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
# happening this week button
|
||||
if thisWeeksEventsCheck(baseDir, nickname, domain):
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="buttonevent">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="button">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
# button for the outbox
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/outbox"><button class="' + \
|
||||
sentButton + '"><span>' + translate['Outbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# add other buttons
|
||||
tlStr += \
|
||||
sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \
|
||||
moderationButtonStr + happeningStr + newPostButtonStr
|
||||
|
||||
if not newsHeader:
|
||||
if not iconsAsButtons:
|
||||
# the search icon
|
||||
tlStr += \
|
||||
'<a class="imageAnchor" href="' + usersPath + \
|
||||
'/search"><img loading="lazy" src="/' + \
|
||||
iconsPath + '/search.png" title="' + \
|
||||
translate['Search and follow'] + '" alt="| ' + \
|
||||
translate['Search and follow'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# the search button
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/search"><button class="button">' + \
|
||||
'<span>' + translate['Search'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# benchmark 5
|
||||
timeDiff = int((time.time() - timelineStartTime) * 1000)
|
||||
if timeDiff > 100:
|
||||
print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff))
|
||||
|
||||
# the calendar button
|
||||
if not isFeaturesTimeline:
|
||||
calendarAltText = translate['Calendar']
|
||||
if newCalendarEvent:
|
||||
# indicate that the calendar icon is highlighted
|
||||
calendarAltText = '*' + calendarAltText + '*'
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
' <a class="imageAnchor" href="' + \
|
||||
usersPath + calendarPath + \
|
||||
'"><img loading="lazy" src="/' + iconsPath + '/' + \
|
||||
calendarImage + '" title="' + translate['Calendar'] + \
|
||||
'" alt="| ' + calendarAltText + \
|
||||
'" class="timelineicon"/></a>\n'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + calendarPath + \
|
||||
'"><button class="button">' + \
|
||||
'<span>' + translate['Calendar'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
# the show/hide button, for a simpler header appearance
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
' <a class="imageAnchor" href="' + \
|
||||
usersPath + '/minimal' + \
|
||||
'"><img loading="lazy" src="/' + iconsPath + \
|
||||
'/showhide.png" title="' + translate['Show/Hide Buttons'] + \
|
||||
'" alt="| ' + translate['Show/Hide Buttons'] + \
|
||||
'" class="timelineicon"/></a>\n'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/minimal' + \
|
||||
'"><button class="button">' + \
|
||||
'<span>' + translate['Show/Hide Buttons'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/inbox">' + \
|
||||
'<button class="button">' + \
|
||||
'<span>' + translate['User'] + '</span></button></a>'
|
||||
|
||||
# the newswire button to show right column links
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
'<a class="imageAnchorMobile" href="' + \
|
||||
usersPath + '/newswiremobile">' + \
|
||||
'<img loading="lazy" src="/' + iconsPath + \
|
||||
'/newswire.png" title="' + translate['News'] + \
|
||||
'" alt="| ' + translate['News'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# NOTE: deliberately no \n at end of line
|
||||
tlStr += \
|
||||
'<a href="' + \
|
||||
usersPath + '/newswiremobile' + \
|
||||
'"><button class="buttonMobile">' + \
|
||||
'<span>' + translate['Newswire'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# the links button to show left column links
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
'<a class="imageAnchorMobile" href="' + \
|
||||
usersPath + '/linksmobile">' + \
|
||||
'<img loading="lazy" src="/' + iconsPath + \
|
||||
'/links.png" title="' + translate['Edit Links'] + \
|
||||
'" alt="| ' + translate['Edit Links'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# NOTE: deliberately no \n at end of line
|
||||
tlStr += \
|
||||
'<a href="' + \
|
||||
usersPath + '/linksmobile' + \
|
||||
'"><button class="buttonMobile">' + \
|
||||
'<span>' + translate['Links'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/editprofile">' + \
|
||||
'<button class="buttonDesktop">' + \
|
||||
'<span>' + translate['Settings'] + '</span></button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
tlStr += followApprovals
|
||||
|
||||
if not iconsAsButtons:
|
||||
# end of headericons div
|
||||
tlStr += '</div>'
|
||||
|
||||
# end of the button header with inbox, outbox, etc
|
||||
tlStr += ' </div>\n'
|
||||
return tlStr
|
|
@ -7,23 +7,22 @@ __email__ = "bob@freedombone.net"
|
|||
__status__ = "Production"
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
import time
|
||||
from utils import removeIdEnding
|
||||
from follow import followerApprovalActive
|
||||
from person import isPersonSnoozed
|
||||
from happening import todaysEventsCheck
|
||||
from happening import thisWeeksEventsCheck
|
||||
from webapp_utils import getIconsWebPath
|
||||
from webapp_utils import htmlPostSeparator
|
||||
from webapp_utils import getBannerFile
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
from webapp_utils import sharesTimelineJson
|
||||
from webapp_utils import htmlHighlightLabel
|
||||
from webapp_post import preparePostFromHtmlCache
|
||||
from webapp_post import individualPostAsHtml
|
||||
from webapp_column_left import getLeftColumnContent
|
||||
from webapp_column_right import getRightColumnContent
|
||||
from webapp_headerbuttons import headerButtonsTimeline
|
||||
from posts import isModerator
|
||||
from posts import isEditor
|
||||
|
||||
|
@ -712,333 +711,6 @@ def htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int,
|
|||
return timelineStr
|
||||
|
||||
|
||||
def htmlHighlightLabel(label: str, highlight: bool) -> str:
|
||||
"""If the give text should be highlighted then return
|
||||
the appropriate markup.
|
||||
This is so that in shell browsers, like lynx, it's possible
|
||||
to see if the replies or DM button are highlighted.
|
||||
"""
|
||||
if not highlight:
|
||||
return label
|
||||
return '*' + str(label) + '*'
|
||||
|
||||
|
||||
def headerButtonsTimeline(defaultTimeline: str,
|
||||
boxName: str,
|
||||
pageNumber: int,
|
||||
translate: {},
|
||||
usersPath: str,
|
||||
mediaButton: str,
|
||||
blogsButton: str,
|
||||
newsButton: str,
|
||||
inboxButton: str,
|
||||
dmButton: str,
|
||||
newDM: str,
|
||||
repliesButton: str,
|
||||
newReply: str,
|
||||
minimal: bool,
|
||||
sentButton: str,
|
||||
sharesButtonStr: str,
|
||||
bookmarksButtonStr: str,
|
||||
eventsButtonStr: str,
|
||||
moderationButtonStr: str,
|
||||
newPostButtonStr: str,
|
||||
baseDir: str,
|
||||
nickname: str, domain: str,
|
||||
iconsPath: str,
|
||||
timelineStartTime,
|
||||
newCalendarEvent: bool,
|
||||
calendarPath: str,
|
||||
calendarImage: str,
|
||||
followApprovals: str,
|
||||
iconsAsButtons: bool) -> str:
|
||||
"""Returns the header at the top of the timeline, containing
|
||||
buttons for inbox, outbox, search, calendar, etc
|
||||
"""
|
||||
# start of the button header with inbox, outbox, etc
|
||||
tlStr = '<div class="containerHeader">\n'
|
||||
# first button
|
||||
if defaultTimeline == 'tlmedia':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlmedia"><button class="' + \
|
||||
mediaButton + '"><span>' + translate['Media'] + \
|
||||
'</span></button></a>'
|
||||
elif defaultTimeline == 'tlblogs':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlblogs"><button class="' + \
|
||||
blogsButton + '"><span>' + translate['Blogs'] + \
|
||||
'</span></button></a>'
|
||||
elif defaultTimeline == 'tlnews':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlnews"><button class="' + \
|
||||
newsButton + '"><span>' + translate['Features'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + \
|
||||
translate['Inbox'] + '</span></button></a>'
|
||||
|
||||
# if this is a news instance and we are viewing the news timeline
|
||||
newsHeader = False
|
||||
if defaultTimeline == 'tlnews' and boxName == 'tlnews':
|
||||
newsHeader = True
|
||||
|
||||
if not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/dm"><button class="' + dmButton + \
|
||||
'"><span>' + htmlHighlightLabel(translate['DM'], newDM) + \
|
||||
'</span></button></a>'
|
||||
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/tlreplies"><button class="' + \
|
||||
repliesButton + '"><span>' + \
|
||||
htmlHighlightLabel(translate['Replies'], newReply) + \
|
||||
'</span></button></a>'
|
||||
|
||||
# typically the media button
|
||||
if defaultTimeline != 'tlmedia':
|
||||
if not minimal and not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlmedia"><button class="' + \
|
||||
mediaButton + '"><span>' + translate['Media'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not minimal:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton+'"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
isFeaturesTimeline = \
|
||||
defaultTimeline == 'tlnews' and boxName == 'tlnews'
|
||||
|
||||
if not isFeaturesTimeline:
|
||||
# typically the blogs button
|
||||
# but may change if this is a blogging oriented instance
|
||||
if defaultTimeline != 'tlblogs':
|
||||
if not minimal and not isFeaturesTimeline:
|
||||
titleStr = translate['Blogs']
|
||||
if defaultTimeline == 'tlnews':
|
||||
titleStr = translate['Article']
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlblogs"><button class="' + \
|
||||
blogsButton + '"><span>' + titleStr + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not minimal:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# typically the news button
|
||||
# but may change if this is a news oriented instance
|
||||
if defaultTimeline != 'tlnews':
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/tlnews"><button class="' + \
|
||||
newsButton + '"><span>' + translate['News'] + \
|
||||
'</span></button></a>'
|
||||
else:
|
||||
if not newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/inbox"><button class="' + \
|
||||
inboxButton + '"><span>' + translate['Inbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# show todays events buttons on the first inbox page
|
||||
happeningStr = ''
|
||||
if boxName == 'inbox' and pageNumber == 1:
|
||||
if todaysEventsCheck(baseDir, nickname, domain):
|
||||
now = datetime.now()
|
||||
|
||||
# happening today button
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + '/calendar?year=' + \
|
||||
str(now.year) + '?month=' + str(now.month) + \
|
||||
'?day=' + str(now.day) + '">' + \
|
||||
'<button class="buttonevent">' + \
|
||||
translate['Happening Today'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + '/calendar?year=' + \
|
||||
str(now.year) + '?month=' + str(now.month) + \
|
||||
'?day=' + str(now.day) + '">' + \
|
||||
'<button class="button">' + \
|
||||
translate['Happening Today'] + '</button></a>'
|
||||
|
||||
# happening this week button
|
||||
if thisWeeksEventsCheck(baseDir, nickname, domain):
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="buttonevent">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="button">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
# happening this week button
|
||||
if thisWeeksEventsCheck(baseDir, nickname, domain):
|
||||
if not iconsAsButtons:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="buttonevent">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
else:
|
||||
happeningStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/calendar"><button class="button">' + \
|
||||
translate['Happening This Week'] + '</button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
# button for the outbox
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/outbox"><button class="' + \
|
||||
sentButton + '"><span>' + translate['Outbox'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# add other buttons
|
||||
tlStr += \
|
||||
sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \
|
||||
moderationButtonStr + happeningStr + newPostButtonStr
|
||||
|
||||
if not newsHeader:
|
||||
if not iconsAsButtons:
|
||||
# the search icon
|
||||
tlStr += \
|
||||
'<a class="imageAnchor" href="' + usersPath + \
|
||||
'/search"><img loading="lazy" src="/' + \
|
||||
iconsPath + '/search.png" title="' + \
|
||||
translate['Search and follow'] + '" alt="| ' + \
|
||||
translate['Search and follow'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# the search button
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + \
|
||||
'/search"><button class="button">' + \
|
||||
'<span>' + translate['Search'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# benchmark 5
|
||||
timeDiff = int((time.time() - timelineStartTime) * 1000)
|
||||
if timeDiff > 100:
|
||||
print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff))
|
||||
|
||||
# the calendar button
|
||||
if not isFeaturesTimeline:
|
||||
calendarAltText = translate['Calendar']
|
||||
if newCalendarEvent:
|
||||
# indicate that the calendar icon is highlighted
|
||||
calendarAltText = '*' + calendarAltText + '*'
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
' <a class="imageAnchor" href="' + \
|
||||
usersPath + calendarPath + \
|
||||
'"><img loading="lazy" src="/' + iconsPath + '/' + \
|
||||
calendarImage + '" title="' + translate['Calendar'] + \
|
||||
'" alt="| ' + calendarAltText + \
|
||||
'" class="timelineicon"/></a>\n'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + calendarPath + \
|
||||
'"><button class="button">' + \
|
||||
'<span>' + translate['Calendar'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
# the show/hide button, for a simpler header appearance
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
' <a class="imageAnchor" href="' + \
|
||||
usersPath + '/minimal' + \
|
||||
'"><img loading="lazy" src="/' + iconsPath + \
|
||||
'/showhide.png" title="' + translate['Show/Hide Buttons'] + \
|
||||
'" alt="| ' + translate['Show/Hide Buttons'] + \
|
||||
'" class="timelineicon"/></a>\n'
|
||||
else:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/minimal' + \
|
||||
'"><button class="button">' + \
|
||||
'<span>' + translate['Show/Hide Buttons'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/inbox">' + \
|
||||
'<button class="button">' + \
|
||||
'<span>' + translate['User'] + '</span></button></a>'
|
||||
|
||||
# the newswire button to show right column links
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
'<a class="imageAnchorMobile" href="' + \
|
||||
usersPath + '/newswiremobile">' + \
|
||||
'<img loading="lazy" src="/' + iconsPath + \
|
||||
'/newswire.png" title="' + translate['News'] + \
|
||||
'" alt="| ' + translate['News'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# NOTE: deliberately no \n at end of line
|
||||
tlStr += \
|
||||
'<a href="' + \
|
||||
usersPath + '/newswiremobile' + \
|
||||
'"><button class="buttonMobile">' + \
|
||||
'<span>' + translate['Newswire'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
# the links button to show left column links
|
||||
if not iconsAsButtons:
|
||||
tlStr += \
|
||||
'<a class="imageAnchorMobile" href="' + \
|
||||
usersPath + '/linksmobile">' + \
|
||||
'<img loading="lazy" src="/' + iconsPath + \
|
||||
'/links.png" title="' + translate['Edit Links'] + \
|
||||
'" alt="| ' + translate['Edit Links'] + \
|
||||
'" class="timelineicon"/></a>'
|
||||
else:
|
||||
# NOTE: deliberately no \n at end of line
|
||||
tlStr += \
|
||||
'<a href="' + \
|
||||
usersPath + '/linksmobile' + \
|
||||
'"><button class="buttonMobile">' + \
|
||||
'<span>' + translate['Links'] + \
|
||||
'</span></button></a>'
|
||||
|
||||
if newsHeader:
|
||||
tlStr += \
|
||||
'<a href="' + usersPath + '/editprofile">' + \
|
||||
'<button class="buttonDesktop">' + \
|
||||
'<span>' + translate['Settings'] + '</span></button></a>'
|
||||
|
||||
if not newsHeader:
|
||||
tlStr += followApprovals
|
||||
|
||||
if not iconsAsButtons:
|
||||
# end of headericons div
|
||||
tlStr += '</div>'
|
||||
|
||||
# end of the button header with inbox, outbox, etc
|
||||
tlStr += ' </div>\n'
|
||||
return tlStr
|
||||
|
||||
|
||||
def htmlShares(cssCache: {}, defaultTimeline: str,
|
||||
recentPostsCache: {}, maxRecentPosts: int,
|
||||
translate: {}, pageNumber: int, itemsPerPage: int,
|
||||
|
|
|
@ -808,3 +808,14 @@ def headerButtonsFrontScreen(translate: {},
|
|||
headerStr + \
|
||||
' </div>\n'
|
||||
return headerStr
|
||||
|
||||
|
||||
def htmlHighlightLabel(label: str, highlight: bool) -> str:
|
||||
"""If the given text should be highlighted then return
|
||||
the appropriate markup.
|
||||
This is so that in shell browsers, like lynx, it's possible
|
||||
to see if the replies or DM button are highlighted.
|
||||
"""
|
||||
if not highlight:
|
||||
return label
|
||||
return '*' + str(label) + '*'
|
||||
|
|
Loading…
Reference in New Issue