forked from indymedia/epicyon
Move to external css
parent
96ed5f2696
commit
c9ef1cccb1
126
webapp.py
126
webapp.py
|
@ -8,7 +8,6 @@ __status__ = "Production"
|
|||
|
||||
import os
|
||||
from shutil import copyfile
|
||||
from utils import getCSS
|
||||
from utils import getNicknameFromActor
|
||||
from utils import getDomainFromActor
|
||||
from utils import locatePost
|
||||
|
@ -16,7 +15,7 @@ from utils import loadJson
|
|||
from shares import getValidSharedItemID
|
||||
from webapp_utils import getAltPath
|
||||
from webapp_utils import getIconsDir
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
from webapp_post import individualPostAsHtml
|
||||
|
||||
|
@ -34,15 +33,13 @@ def htmlFollowingList(cssCache: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
profileCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileCSS:
|
||||
followingListHtml = htmlHeader(cssFilename, profileCSS)
|
||||
for followingAddress in followingList:
|
||||
if followingAddress:
|
||||
followingListHtml += \
|
||||
'<h3>@' + followingAddress + '</h3>'
|
||||
followingListHtml += htmlFooter()
|
||||
msg = followingListHtml
|
||||
followingListHtml = htmlHeaderWithExternalStyle(cssFilename)
|
||||
for followingAddress in followingList:
|
||||
if followingAddress:
|
||||
followingListHtml += \
|
||||
'<h3>@' + followingAddress + '</h3>'
|
||||
followingListHtml += htmlFooter()
|
||||
msg = followingListHtml
|
||||
return msg
|
||||
return ''
|
||||
|
||||
|
@ -55,18 +52,16 @@ def htmlHashtagBlocked(cssCache: {}, baseDir: str, translate: {}) -> str:
|
|||
if os.path.isfile(baseDir + '/suspended.css'):
|
||||
cssFilename = baseDir + '/suspended.css'
|
||||
|
||||
blockedHashtagCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if blockedHashtagCSS:
|
||||
blockedHashtagForm = htmlHeader(cssFilename, blockedHashtagCSS)
|
||||
blockedHashtagForm += '<div><center>\n'
|
||||
blockedHashtagForm += \
|
||||
' <p class="screentitle">' + \
|
||||
translate['Hashtag Blocked'] + '</p>\n'
|
||||
blockedHashtagForm += \
|
||||
' <p>See <a href="/terms">' + \
|
||||
translate['Terms of Service'] + '</a></p>\n'
|
||||
blockedHashtagForm += '</center></div>\n'
|
||||
blockedHashtagForm += htmlFooter()
|
||||
blockedHashtagForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
blockedHashtagForm += '<div><center>\n'
|
||||
blockedHashtagForm += \
|
||||
' <p class="screentitle">' + \
|
||||
translate['Hashtag Blocked'] + '</p>\n'
|
||||
blockedHashtagForm += \
|
||||
' <p>See <a href="/terms">' + \
|
||||
translate['Terms of Service'] + '</a></p>\n'
|
||||
blockedHashtagForm += '</center></div>\n'
|
||||
blockedHashtagForm += htmlFooter()
|
||||
return blockedHashtagForm
|
||||
|
||||
|
||||
|
@ -108,8 +103,7 @@ def htmlRemoveSharedItem(cssCache: {}, translate: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/follow.css'):
|
||||
cssFilename = baseDir + '/follow.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
sharesStr = htmlHeader(cssFilename, profileStyle)
|
||||
sharesStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
sharesStr += '<div class="follow">\n'
|
||||
sharesStr += ' <div class="followAvatar">\n'
|
||||
sharesStr += ' <center>\n'
|
||||
|
@ -179,45 +173,40 @@ def htmlDeletePost(cssCache: {},
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileStyle:
|
||||
if httpPrefix != 'https':
|
||||
profileStyle = profileStyle.replace('https://',
|
||||
httpPrefix + '://')
|
||||
deletePostStr = htmlHeader(cssFilename, profileStyle)
|
||||
deletePostStr += \
|
||||
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
||||
iconsDir, translate, pageNumber,
|
||||
baseDir, session, wfRequest, personCache,
|
||||
nickname, domain, port, postJsonObject,
|
||||
None, True, False,
|
||||
httpPrefix, projectVersion, 'outbox',
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly,
|
||||
False, False, False, False, False)
|
||||
deletePostStr += '<center>'
|
||||
deletePostStr += \
|
||||
' <p class="followText">' + \
|
||||
translate['Delete this post?'] + '</p>'
|
||||
deletePostStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
deletePostStr += \
|
||||
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
||||
iconsDir, translate, pageNumber,
|
||||
baseDir, session, wfRequest, personCache,
|
||||
nickname, domain, port, postJsonObject,
|
||||
None, True, False,
|
||||
httpPrefix, projectVersion, 'outbox',
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly,
|
||||
False, False, False, False, False)
|
||||
deletePostStr += '<center>'
|
||||
deletePostStr += \
|
||||
' <p class="followText">' + \
|
||||
translate['Delete this post?'] + '</p>'
|
||||
|
||||
postActor = getAltPath(actor, domainFull, callingDomain)
|
||||
deletePostStr += \
|
||||
' <form method="POST" action="' + postActor + '/rmpost">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="pageNumber" value="' + \
|
||||
str(pageNumber) + '">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="messageId" value="' + \
|
||||
messageId + '">\n'
|
||||
deletePostStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Yes'] + '</button>\n'
|
||||
deletePostStr += \
|
||||
' <a href="' + actor + '/inbox"><button class="button">' + \
|
||||
translate['No'] + '</button></a>\n'
|
||||
deletePostStr += ' </form>\n'
|
||||
deletePostStr += '</center>\n'
|
||||
deletePostStr += htmlFooter()
|
||||
postActor = getAltPath(actor, domainFull, callingDomain)
|
||||
deletePostStr += \
|
||||
' <form method="POST" action="' + postActor + '/rmpost">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="pageNumber" value="' + \
|
||||
str(pageNumber) + '">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="messageId" value="' + \
|
||||
messageId + '">\n'
|
||||
deletePostStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Yes'] + '</button>\n'
|
||||
deletePostStr += \
|
||||
' <a href="' + actor + '/inbox"><button class="button">' + \
|
||||
translate['No'] + '</button></a>\n'
|
||||
deletePostStr += ' </form>\n'
|
||||
deletePostStr += '</center>\n'
|
||||
deletePostStr += htmlFooter()
|
||||
return deletePostStr
|
||||
|
||||
|
||||
|
@ -238,8 +227,7 @@ def htmlFollowConfirm(cssCache: {}, translate: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/follow.css'):
|
||||
cssFilename = baseDir + '/follow.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
followStr = htmlHeader(cssFilename, profileStyle)
|
||||
followStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
followStr += '<div class="follow">\n'
|
||||
followStr += ' <div class="followAvatar">\n'
|
||||
followStr += ' <center>\n'
|
||||
|
@ -283,9 +271,7 @@ def htmlUnfollowConfirm(cssCache: {}, translate: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/follow.css'):
|
||||
cssFilename = baseDir + '/follow.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
|
||||
followStr = htmlHeader(cssFilename, profileStyle)
|
||||
followStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
followStr += '<div class="follow">\n'
|
||||
followStr += ' <div class="followAvatar">\n'
|
||||
followStr += ' <center>\n'
|
||||
|
@ -330,9 +316,7 @@ def htmlUnblockConfirm(cssCache: {}, translate: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/follow.css'):
|
||||
cssFilename = baseDir + '/follow.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
|
||||
blockStr = htmlHeader(cssFilename, profileStyle)
|
||||
blockStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
blockStr += '<div class="block">\n'
|
||||
blockStr += ' <div class="blockAvatar">\n'
|
||||
blockStr += ' <center>\n'
|
||||
|
|
|
@ -8,9 +8,8 @@ __status__ = "Production"
|
|||
|
||||
import os
|
||||
from shutil import copyfile
|
||||
from utils import getCSS
|
||||
from utils import getConfigParam
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -38,25 +37,19 @@ def htmlAbout(cssCache: {}, baseDir: str, httpPrefix: str,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
aboutCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if aboutCSS:
|
||||
if httpPrefix != 'http':
|
||||
aboutCSS = aboutCSS.replace('https://',
|
||||
httpPrefix + '://')
|
||||
|
||||
aboutForm = htmlHeader(cssFilename, aboutCSS)
|
||||
aboutForm += '<div class="container">' + aboutText + '</div>'
|
||||
if onionDomain:
|
||||
aboutForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">' + \
|
||||
'http://' + onionDomain + '</p>\n</center></div>\n'
|
||||
if adminNickname:
|
||||
adminActor = '/users/' + adminNickname
|
||||
aboutForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">Administered by <a href="' + \
|
||||
adminActor + '">' + adminNickname + '</a></p>\n' + \
|
||||
'</center></div>\n'
|
||||
aboutForm += htmlFooter()
|
||||
aboutForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
aboutForm += '<div class="container">' + aboutText + '</div>'
|
||||
if onionDomain:
|
||||
aboutForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">' + \
|
||||
'http://' + onionDomain + '</p>\n</center></div>\n'
|
||||
if adminNickname:
|
||||
adminActor = '/users/' + adminNickname
|
||||
aboutForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">Administered by <a href="' + \
|
||||
adminActor + '">' + adminNickname + '</a></p>\n' + \
|
||||
'</center></div>\n'
|
||||
aboutForm += htmlFooter()
|
||||
return aboutForm
|
||||
|
|
|
@ -14,11 +14,10 @@ from utils import getNicknameFromActor
|
|||
from utils import getDomainFromActor
|
||||
from utils import locatePost
|
||||
from utils import loadJson
|
||||
from utils import getCSS
|
||||
from utils import weekDayOfMonthStart
|
||||
from happening import getTodaysEvents
|
||||
from happening import getCalendarEvents
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
from webapp_utils import getAltPath
|
||||
from webapp_utils import getIconsDir
|
||||
|
@ -54,45 +53,40 @@ def htmlCalendarDeleteConfirm(cssCache: {}, translate: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileStyle:
|
||||
if httpPrefix != 'https':
|
||||
profileStyle = profileStyle.replace('https://',
|
||||
httpPrefix + '://')
|
||||
deletePostStr = htmlHeader(cssFilename, profileStyle)
|
||||
deletePostStr += \
|
||||
'<center><h1>' + postTime + ' ' + str(year) + '/' + \
|
||||
str(monthNumber) + \
|
||||
'/' + str(dayNumber) + '</h1></center>'
|
||||
deletePostStr += '<center>'
|
||||
deletePostStr += ' <p class="followText">' + \
|
||||
translate['Delete this event'] + '</p>'
|
||||
deletePostStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
deletePostStr += \
|
||||
'<center><h1>' + postTime + ' ' + str(year) + '/' + \
|
||||
str(monthNumber) + \
|
||||
'/' + str(dayNumber) + '</h1></center>'
|
||||
deletePostStr += '<center>'
|
||||
deletePostStr += ' <p class="followText">' + \
|
||||
translate['Delete this event'] + '</p>'
|
||||
|
||||
postActor = getAltPath(actor, domainFull, callingDomain)
|
||||
deletePostStr += \
|
||||
' <form method="POST" action="' + postActor + '/rmpost">\n'
|
||||
deletePostStr += ' <input type="hidden" name="year" value="' + \
|
||||
str(year) + '">\n'
|
||||
deletePostStr += ' <input type="hidden" name="month" value="' + \
|
||||
str(monthNumber) + '">\n'
|
||||
deletePostStr += ' <input type="hidden" name="day" value="' + \
|
||||
str(dayNumber) + '">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="pageNumber" value="1">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="messageId" value="' + \
|
||||
messageId + '">\n'
|
||||
deletePostStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Yes'] + '</button>\n'
|
||||
deletePostStr += \
|
||||
' <a href="' + actor + '/calendar?year=' + \
|
||||
str(year) + '?month=' + \
|
||||
str(monthNumber) + '"><button class="button">' + \
|
||||
translate['No'] + '</button></a>\n'
|
||||
deletePostStr += ' </form>\n'
|
||||
deletePostStr += '</center>\n'
|
||||
deletePostStr += htmlFooter()
|
||||
postActor = getAltPath(actor, domainFull, callingDomain)
|
||||
deletePostStr += \
|
||||
' <form method="POST" action="' + postActor + '/rmpost">\n'
|
||||
deletePostStr += ' <input type="hidden" name="year" value="' + \
|
||||
str(year) + '">\n'
|
||||
deletePostStr += ' <input type="hidden" name="month" value="' + \
|
||||
str(monthNumber) + '">\n'
|
||||
deletePostStr += ' <input type="hidden" name="day" value="' + \
|
||||
str(dayNumber) + '">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="pageNumber" value="1">\n'
|
||||
deletePostStr += \
|
||||
' <input type="hidden" name="messageId" value="' + \
|
||||
messageId + '">\n'
|
||||
deletePostStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Yes'] + '</button>\n'
|
||||
deletePostStr += \
|
||||
' <a href="' + actor + '/calendar?year=' + \
|
||||
str(year) + '?month=' + \
|
||||
str(monthNumber) + '"><button class="button">' + \
|
||||
translate['No'] + '</button></a>\n'
|
||||
deletePostStr += ' </form>\n'
|
||||
deletePostStr += '</center>\n'
|
||||
deletePostStr += htmlFooter()
|
||||
return deletePostStr
|
||||
|
||||
|
||||
|
@ -112,13 +106,11 @@ def htmlCalendarDay(cssCache: {}, translate: {},
|
|||
if os.path.isfile(baseDir + '/calendar.css'):
|
||||
cssFilename = baseDir + '/calendar.css'
|
||||
|
||||
calendarStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
|
||||
calActor = actor
|
||||
if '/users/' in actor:
|
||||
calActor = '/users/' + actor.split('/users/')[1]
|
||||
|
||||
calendarStr = htmlHeader(cssFilename, calendarStyle)
|
||||
calendarStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
calendarStr += '<main><table class="calendar">\n'
|
||||
calendarStr += '<caption class="calendar__banner--month">\n'
|
||||
calendarStr += \
|
||||
|
@ -298,13 +290,11 @@ def htmlCalendar(cssCache: {}, translate: {},
|
|||
if os.path.isfile(baseDir + '/calendar.css'):
|
||||
cssFilename = baseDir + '/calendar.css'
|
||||
|
||||
calendarStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
|
||||
calActor = actor
|
||||
if '/users/' in actor:
|
||||
calActor = '/users/' + actor.split('/users/')[1]
|
||||
|
||||
calendarStr = htmlHeader(cssFilename, calendarStyle)
|
||||
calendarStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
calendarStr += '<main><table class="calendar">\n'
|
||||
calendarStr += '<caption class="calendar__banner--month">\n'
|
||||
calendarStr += \
|
||||
|
|
|
@ -11,8 +11,7 @@ import time
|
|||
from shutil import copyfile
|
||||
from utils import getConfigParam
|
||||
from utils import noOfAccounts
|
||||
from utils import getCSS
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -100,11 +99,6 @@ def htmlLogin(cssCache: {}, translate: {},
|
|||
if os.path.isfile(baseDir + '/login.css'):
|
||||
cssFilename = baseDir + '/login.css'
|
||||
|
||||
loginCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if not loginCSS:
|
||||
print('ERROR: login css file missing ' + cssFilename)
|
||||
return None
|
||||
|
||||
# show the register button
|
||||
registerButtonStr = ''
|
||||
if getConfigParam(baseDir, 'registration') == 'open':
|
||||
|
@ -135,7 +129,7 @@ def htmlLogin(cssCache: {}, translate: {},
|
|||
if not autocomplete:
|
||||
autocompleteStr = 'autocomplete="off" value=""'
|
||||
|
||||
loginForm = htmlHeader(cssFilename, loginCSS)
|
||||
loginForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
loginForm += '<br>\n'
|
||||
loginForm += '<form method="POST" action="/login">\n'
|
||||
loginForm += ' <div class="imgcontainer">\n'
|
||||
|
|
|
@ -7,9 +7,8 @@ __email__ = "bob@freedombone.net"
|
|||
__status__ = "Production"
|
||||
|
||||
import os
|
||||
from utils import getCSS
|
||||
from webapp_timeline import htmlTimeline
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -56,56 +55,51 @@ def htmlModerationInfo(cssCache: {}, translate: {},
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
infoCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if infoCSS:
|
||||
if httpPrefix != 'https':
|
||||
infoCSS = infoCSS.replace('https://',
|
||||
httpPrefix + '://')
|
||||
infoForm = htmlHeader(cssFilename, infoCSS)
|
||||
infoForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
|
||||
infoForm += \
|
||||
'<center><h1>' + \
|
||||
translate['Moderation Information'] + \
|
||||
'</h1></center>'
|
||||
infoForm += \
|
||||
'<center><h1>' + \
|
||||
translate['Moderation Information'] + \
|
||||
'</h1></center>'
|
||||
|
||||
infoShown = False
|
||||
suspendedFilename = baseDir + '/accounts/suspended.txt'
|
||||
if os.path.isfile(suspendedFilename):
|
||||
with open(suspendedFilename, "r") as f:
|
||||
suspendedStr = f.read()
|
||||
infoForm += '<div class="container">'
|
||||
infoForm += ' <br><b>' + \
|
||||
translate['Suspended accounts'] + '</b>'
|
||||
infoForm += ' <br>' + \
|
||||
translate['These are currently suspended']
|
||||
infoForm += \
|
||||
' <textarea id="message" ' + \
|
||||
'name="suspended" style="height:200px">' + \
|
||||
suspendedStr + '</textarea>'
|
||||
infoForm += '</div>'
|
||||
infoShown = True
|
||||
|
||||
blockingFilename = baseDir + '/accounts/blocking.txt'
|
||||
if os.path.isfile(blockingFilename):
|
||||
with open(blockingFilename, "r") as f:
|
||||
blockedStr = f.read()
|
||||
infoForm += '<div class="container">'
|
||||
infoForm += \
|
||||
' <br><b>' + \
|
||||
translate['Blocked accounts and hashtags'] + '</b>'
|
||||
infoForm += \
|
||||
' <br>' + \
|
||||
translate[msgStr1]
|
||||
infoForm += \
|
||||
' <textarea id="message" ' + \
|
||||
'name="blocked" style="height:700px">' + \
|
||||
blockedStr + '</textarea>'
|
||||
infoForm += '</div>'
|
||||
infoShown = True
|
||||
if not infoShown:
|
||||
infoShown = False
|
||||
suspendedFilename = baseDir + '/accounts/suspended.txt'
|
||||
if os.path.isfile(suspendedFilename):
|
||||
with open(suspendedFilename, "r") as f:
|
||||
suspendedStr = f.read()
|
||||
infoForm += '<div class="container">'
|
||||
infoForm += ' <br><b>' + \
|
||||
translate['Suspended accounts'] + '</b>'
|
||||
infoForm += ' <br>' + \
|
||||
translate['These are currently suspended']
|
||||
infoForm += \
|
||||
'<center><p>' + \
|
||||
translate[msgStr2] + \
|
||||
'</p></center>'
|
||||
infoForm += htmlFooter()
|
||||
' <textarea id="message" ' + \
|
||||
'name="suspended" style="height:200px">' + \
|
||||
suspendedStr + '</textarea>'
|
||||
infoForm += '</div>'
|
||||
infoShown = True
|
||||
|
||||
blockingFilename = baseDir + '/accounts/blocking.txt'
|
||||
if os.path.isfile(blockingFilename):
|
||||
with open(blockingFilename, "r") as f:
|
||||
blockedStr = f.read()
|
||||
infoForm += '<div class="container">'
|
||||
infoForm += \
|
||||
' <br><b>' + \
|
||||
translate['Blocked accounts and hashtags'] + '</b>'
|
||||
infoForm += \
|
||||
' <br>' + \
|
||||
translate[msgStr1]
|
||||
infoForm += \
|
||||
' <textarea id="message" ' + \
|
||||
'name="blocked" style="height:700px">' + \
|
||||
blockedStr + '</textarea>'
|
||||
infoForm += '</div>'
|
||||
infoShown = True
|
||||
if not infoShown:
|
||||
infoForm += \
|
||||
'<center><p>' + \
|
||||
translate[msgStr2] + \
|
||||
'</p></center>'
|
||||
infoForm += htmlFooter()
|
||||
return infoForm
|
||||
|
|
|
@ -13,11 +13,10 @@ from person import isPersonSnoozed
|
|||
from posts import isModerator
|
||||
from utils import getDomainFromActor
|
||||
from utils import getNicknameFromActor
|
||||
from utils import getCSS
|
||||
from blocking import isBlocked
|
||||
from follow import isFollowingActor
|
||||
from followingCalendar import receivingCalendarEvents
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -83,19 +82,6 @@ def htmlPersonOptions(defaultTimeline: str,
|
|||
if os.path.isfile(baseDir + '/options.css'):
|
||||
cssFilename = baseDir + '/options.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileStyle:
|
||||
profileStyle = \
|
||||
profileStyle.replace('--follow-text-entry-width: 90%;',
|
||||
'--follow-text-entry-width: 20%;')
|
||||
|
||||
if not os.path.isfile(baseDir + '/accounts/' +
|
||||
'options-background.jpg'):
|
||||
profileStyle = \
|
||||
profileStyle.replace('background-image: ' +
|
||||
'url("options-background.jpg");',
|
||||
'background-image: none;')
|
||||
|
||||
# To snooze, or not to snooze? That is the question
|
||||
snoozeButtonStr = 'Snooze'
|
||||
if nickname:
|
||||
|
@ -109,7 +95,7 @@ def htmlPersonOptions(defaultTimeline: str,
|
|||
'"><button class="button" name="submitDonate">' + \
|
||||
translate['Donate'] + '</button></a>\n'
|
||||
|
||||
optionsStr = htmlHeader(cssFilename, profileStyle)
|
||||
optionsStr = htmlHeaderWithExternalStyle(cssFilename)
|
||||
optionsStr += '<br><br>\n'
|
||||
optionsStr += '<div class="options">\n'
|
||||
optionsStr += ' <div class="optionsAvatar">\n'
|
||||
|
|
|
@ -25,7 +25,6 @@ from posts import downloadAnnounce
|
|||
from posts import populateRepliesJson
|
||||
from utils import locatePost
|
||||
from utils import loadJson
|
||||
from utils import getCSS
|
||||
from utils import getCachedPostDirectory
|
||||
from utils import getCachedPostFilename
|
||||
from utils import getProtocolPrefixes
|
||||
|
@ -55,7 +54,7 @@ from webapp_utils import postContainsPublic
|
|||
from webapp_utils import getContentWarningButton
|
||||
from webapp_utils import getPostAttachmentsAsHtml
|
||||
from webapp_utils import getIconsDir
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
from webapp_media import addEmbeddedElements
|
||||
from webapp_question import insertQuestion
|
||||
|
@ -1338,12 +1337,7 @@ def htmlIndividualPost(cssCache: {},
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
postsCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if postsCSS:
|
||||
if httpPrefix != 'https':
|
||||
postsCSS = postsCSS.replace('https://',
|
||||
httpPrefix + '://')
|
||||
return htmlHeader(cssFilename, postsCSS) + postStr + htmlFooter()
|
||||
return htmlHeaderWithExternalStyle(cssFilename) + postStr + htmlFooter()
|
||||
|
||||
|
||||
def htmlPostReplies(cssCache: {},
|
||||
|
@ -1376,9 +1370,4 @@ def htmlPostReplies(cssCache: {},
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
postsCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if postsCSS:
|
||||
if httpPrefix != 'https':
|
||||
postsCSS = postsCSS.replace('https://',
|
||||
httpPrefix + '://')
|
||||
return htmlHeader(cssFilename, postsCSS) + repliesStr + htmlFooter()
|
||||
return htmlHeaderWithExternalStyle(cssFilename) + repliesStr + htmlFooter()
|
||||
|
|
|
@ -10,7 +10,6 @@ import os
|
|||
from pprint import pprint
|
||||
from utils import getNicknameFromActor
|
||||
from utils import getDomainFromActor
|
||||
from utils import getCSS
|
||||
from utils import isSystemAccount
|
||||
from utils import removeHtml
|
||||
from utils import loadJson
|
||||
|
@ -34,7 +33,7 @@ from tox import getToxAddress
|
|||
from webapp_utils import scheduledPostsExist
|
||||
from webapp_utils import getPersonAvatarUrl
|
||||
from webapp_utils import getIconsDir
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
from webapp_utils import addEmojiToDisplayName
|
||||
from webapp_utils import headerButtonsFrontScreen
|
||||
|
@ -108,171 +107,165 @@ def htmlProfileAfterSearch(cssCache: {},
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileStyle:
|
||||
wf = \
|
||||
webfingerHandle(session,
|
||||
searchNickname + '@' + searchDomainFull,
|
||||
httpPrefix, cachedWebfingers,
|
||||
domain, projectVersion)
|
||||
if not wf:
|
||||
print('DEBUG: Unable to webfinger ' +
|
||||
searchNickname + '@' + searchDomainFull)
|
||||
print('DEBUG: cachedWebfingers ' + str(cachedWebfingers))
|
||||
print('DEBUG: httpPrefix ' + httpPrefix)
|
||||
print('DEBUG: domain ' + domain)
|
||||
return None
|
||||
if not isinstance(wf, dict):
|
||||
print('WARN: Webfinger search for ' +
|
||||
searchNickname + '@' + searchDomainFull +
|
||||
' did not return a dict. ' +
|
||||
str(wf))
|
||||
return None
|
||||
wf = \
|
||||
webfingerHandle(session,
|
||||
searchNickname + '@' + searchDomainFull,
|
||||
httpPrefix, cachedWebfingers,
|
||||
domain, projectVersion)
|
||||
if not wf:
|
||||
print('DEBUG: Unable to webfinger ' +
|
||||
searchNickname + '@' + searchDomainFull)
|
||||
print('DEBUG: cachedWebfingers ' + str(cachedWebfingers))
|
||||
print('DEBUG: httpPrefix ' + httpPrefix)
|
||||
print('DEBUG: domain ' + domain)
|
||||
return None
|
||||
if not isinstance(wf, dict):
|
||||
print('WARN: Webfinger search for ' +
|
||||
searchNickname + '@' + searchDomainFull +
|
||||
' did not return a dict. ' +
|
||||
str(wf))
|
||||
return None
|
||||
|
||||
personUrl = None
|
||||
if wf.get('errors'):
|
||||
personUrl = httpPrefix + '://' + \
|
||||
searchDomainFull + '/users/' + searchNickname
|
||||
personUrl = None
|
||||
if wf.get('errors'):
|
||||
personUrl = httpPrefix + '://' + \
|
||||
searchDomainFull + '/users/' + searchNickname
|
||||
|
||||
profileStr = 'https://www.w3.org/ns/activitystreams'
|
||||
profileStr = 'https://www.w3.org/ns/activitystreams'
|
||||
asHeader = {
|
||||
'Accept': 'application/activity+json; profile="' + profileStr + '"'
|
||||
}
|
||||
if not personUrl:
|
||||
personUrl = getUserUrl(wf)
|
||||
if not personUrl:
|
||||
# try single user instance
|
||||
asHeader = {
|
||||
'Accept': 'application/activity+json; profile="' + profileStr + '"'
|
||||
'Accept': 'application/ld+json; profile="' + profileStr + '"'
|
||||
}
|
||||
personUrl = httpPrefix + '://' + searchDomainFull
|
||||
profileJson = \
|
||||
getJson(session, personUrl, asHeader, None,
|
||||
projectVersion, httpPrefix, domain)
|
||||
if not profileJson:
|
||||
asHeader = {
|
||||
'Accept': 'application/ld+json; profile="' + profileStr + '"'
|
||||
}
|
||||
if not personUrl:
|
||||
personUrl = getUserUrl(wf)
|
||||
if not personUrl:
|
||||
# try single user instance
|
||||
asHeader = {
|
||||
'Accept': 'application/ld+json; profile="' + profileStr + '"'
|
||||
}
|
||||
personUrl = httpPrefix + '://' + searchDomainFull
|
||||
profileJson = \
|
||||
getJson(session, personUrl, asHeader, None,
|
||||
projectVersion, httpPrefix, domain)
|
||||
if not profileJson:
|
||||
asHeader = {
|
||||
'Accept': 'application/ld+json; profile="' + profileStr + '"'
|
||||
}
|
||||
profileJson = \
|
||||
getJson(session, personUrl, asHeader, None,
|
||||
projectVersion, httpPrefix, domain)
|
||||
if not profileJson:
|
||||
print('DEBUG: No actor returned from ' + personUrl)
|
||||
return None
|
||||
avatarUrl = ''
|
||||
if profileJson.get('icon'):
|
||||
if profileJson['icon'].get('url'):
|
||||
avatarUrl = profileJson['icon']['url']
|
||||
if not avatarUrl:
|
||||
avatarUrl = getPersonAvatarUrl(baseDir, personUrl,
|
||||
personCache, True)
|
||||
displayName = searchNickname
|
||||
if profileJson.get('name'):
|
||||
displayName = profileJson['name']
|
||||
profileDescription = ''
|
||||
if profileJson.get('summary'):
|
||||
profileDescription = profileJson['summary']
|
||||
outboxUrl = None
|
||||
if not profileJson.get('outbox'):
|
||||
if debug:
|
||||
pprint(profileJson)
|
||||
print('DEBUG: No outbox found')
|
||||
return None
|
||||
outboxUrl = profileJson['outbox']
|
||||
profileBackgroundImage = ''
|
||||
if profileJson.get('image'):
|
||||
if profileJson['image'].get('url'):
|
||||
profileBackgroundImage = profileJson['image']['url']
|
||||
if not profileJson:
|
||||
print('DEBUG: No actor returned from ' + personUrl)
|
||||
return None
|
||||
avatarUrl = ''
|
||||
if profileJson.get('icon'):
|
||||
if profileJson['icon'].get('url'):
|
||||
avatarUrl = profileJson['icon']['url']
|
||||
if not avatarUrl:
|
||||
avatarUrl = getPersonAvatarUrl(baseDir, personUrl,
|
||||
personCache, True)
|
||||
displayName = searchNickname
|
||||
if profileJson.get('name'):
|
||||
displayName = profileJson['name']
|
||||
profileDescription = ''
|
||||
if profileJson.get('summary'):
|
||||
profileDescription = profileJson['summary']
|
||||
outboxUrl = None
|
||||
if not profileJson.get('outbox'):
|
||||
if debug:
|
||||
pprint(profileJson)
|
||||
print('DEBUG: No outbox found')
|
||||
return None
|
||||
outboxUrl = profileJson['outbox']
|
||||
|
||||
profileStyle = profileStyle.replace('image.png',
|
||||
profileBackgroundImage)
|
||||
if httpPrefix != 'https':
|
||||
profileStyle = profileStyle.replace('https://',
|
||||
httpPrefix + '://')
|
||||
# url to return to
|
||||
backUrl = path
|
||||
if not backUrl.endswith('/inbox'):
|
||||
backUrl += '/inbox'
|
||||
# profileBackgroundImage = ''
|
||||
# if profileJson.get('image'):
|
||||
# if profileJson['image'].get('url'):
|
||||
# profileBackgroundImage = profileJson['image']['url']
|
||||
|
||||
profileDescriptionShort = profileDescription
|
||||
if '\n' in profileDescription:
|
||||
if len(profileDescription.split('\n')) > 2:
|
||||
profileDescriptionShort = ''
|
||||
else:
|
||||
if '<br>' in profileDescription:
|
||||
if len(profileDescription.split('<br>')) > 2:
|
||||
profileDescriptionShort = ''
|
||||
# keep the profile description short
|
||||
if len(profileDescriptionShort) > 256:
|
||||
# url to return to
|
||||
backUrl = path
|
||||
if not backUrl.endswith('/inbox'):
|
||||
backUrl += '/inbox'
|
||||
|
||||
profileDescriptionShort = profileDescription
|
||||
if '\n' in profileDescription:
|
||||
if len(profileDescription.split('\n')) > 2:
|
||||
profileDescriptionShort = ''
|
||||
# remove formatting from profile description used on title
|
||||
avatarDescription = ''
|
||||
if profileJson.get('summary'):
|
||||
if isinstance(profileJson['summary'], str):
|
||||
avatarDescription = \
|
||||
profileJson['summary'].replace('<br>', '\n')
|
||||
avatarDescription = avatarDescription.replace('<p>', '')
|
||||
avatarDescription = avatarDescription.replace('</p>', '')
|
||||
if '<' in avatarDescription:
|
||||
avatarDescription = removeHtml(avatarDescription)
|
||||
profileStr = ' <div class="hero-image">\n'
|
||||
profileStr += ' <div class="hero-text">\n'
|
||||
if avatarUrl:
|
||||
profileStr += \
|
||||
' <img loading="lazy" src="' + avatarUrl + \
|
||||
'" alt="' + avatarDescription + '" title="' + \
|
||||
avatarDescription + '" class="title">\n'
|
||||
profileStr += ' <h1>' + displayName + '</h1>\n'
|
||||
profileStr += ' <p><b>@' + searchNickname + '@' + \
|
||||
searchDomainFull + '</b></p>\n'
|
||||
profileStr += ' <p>' + profileDescriptionShort + '</p>\n'
|
||||
profileStr += ' </div>\n'
|
||||
profileStr += '</div>\n'
|
||||
profileStr += '<div class="container">\n'
|
||||
profileStr += ' <form method="POST" action="' + \
|
||||
backUrl + '/followconfirm">\n'
|
||||
profileStr += ' <center>\n'
|
||||
else:
|
||||
if '<br>' in profileDescription:
|
||||
if len(profileDescription.split('<br>')) > 2:
|
||||
profileDescriptionShort = ''
|
||||
# keep the profile description short
|
||||
if len(profileDescriptionShort) > 256:
|
||||
profileDescriptionShort = ''
|
||||
# remove formatting from profile description used on title
|
||||
avatarDescription = ''
|
||||
if profileJson.get('summary'):
|
||||
if isinstance(profileJson['summary'], str):
|
||||
avatarDescription = \
|
||||
profileJson['summary'].replace('<br>', '\n')
|
||||
avatarDescription = avatarDescription.replace('<p>', '')
|
||||
avatarDescription = avatarDescription.replace('</p>', '')
|
||||
if '<' in avatarDescription:
|
||||
avatarDescription = removeHtml(avatarDescription)
|
||||
profileStr = ' <div class="hero-image">\n'
|
||||
profileStr += ' <div class="hero-text">\n'
|
||||
if avatarUrl:
|
||||
profileStr += \
|
||||
' <input type="hidden" name="actor" value="' + \
|
||||
personUrl + '">\n'
|
||||
profileStr += \
|
||||
' <a href="' + backUrl + '"><button class="button">' + \
|
||||
translate['Go Back'] + '</button></a>\n'
|
||||
profileStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Follow'] + '</button>\n'
|
||||
profileStr += \
|
||||
' <button type="submit" class="button" name="submitView">' + \
|
||||
translate['View'] + '</button>\n'
|
||||
profileStr += ' </center>\n'
|
||||
profileStr += ' </form>\n'
|
||||
profileStr += '</div>\n'
|
||||
' <img loading="lazy" src="' + avatarUrl + \
|
||||
'" alt="' + avatarDescription + '" title="' + \
|
||||
avatarDescription + '" class="title">\n'
|
||||
profileStr += ' <h1>' + displayName + '</h1>\n'
|
||||
profileStr += ' <p><b>@' + searchNickname + '@' + \
|
||||
searchDomainFull + '</b></p>\n'
|
||||
profileStr += ' <p>' + profileDescriptionShort + '</p>\n'
|
||||
profileStr += ' </div>\n'
|
||||
profileStr += '</div>\n'
|
||||
profileStr += '<div class="container">\n'
|
||||
profileStr += ' <form method="POST" action="' + \
|
||||
backUrl + '/followconfirm">\n'
|
||||
profileStr += ' <center>\n'
|
||||
profileStr += \
|
||||
' <input type="hidden" name="actor" value="' + \
|
||||
personUrl + '">\n'
|
||||
profileStr += \
|
||||
' <a href="' + backUrl + '"><button class="button">' + \
|
||||
translate['Go Back'] + '</button></a>\n'
|
||||
profileStr += \
|
||||
' <button type="submit" class="button" name="submitYes">' + \
|
||||
translate['Follow'] + '</button>\n'
|
||||
profileStr += \
|
||||
' <button type="submit" class="button" name="submitView">' + \
|
||||
translate['View'] + '</button>\n'
|
||||
profileStr += ' </center>\n'
|
||||
profileStr += ' </form>\n'
|
||||
profileStr += '</div>\n'
|
||||
|
||||
iconsDir = getIconsDir(baseDir)
|
||||
i = 0
|
||||
for item in parseUserFeed(session, outboxUrl, asHeader,
|
||||
projectVersion, httpPrefix, domain):
|
||||
if not item.get('type'):
|
||||
continue
|
||||
if item['type'] != 'Create' and item['type'] != 'Announce':
|
||||
continue
|
||||
if not item.get('object'):
|
||||
continue
|
||||
profileStr += \
|
||||
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
||||
iconsDir, translate, None, baseDir,
|
||||
session, cachedWebfingers, personCache,
|
||||
nickname, domain, port,
|
||||
item, avatarUrl, False, False,
|
||||
httpPrefix, projectVersion, 'inbox',
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly,
|
||||
False, False, False, False, False)
|
||||
i += 1
|
||||
if i >= 20:
|
||||
break
|
||||
iconsDir = getIconsDir(baseDir)
|
||||
i = 0
|
||||
for item in parseUserFeed(session, outboxUrl, asHeader,
|
||||
projectVersion, httpPrefix, domain):
|
||||
if not item.get('type'):
|
||||
continue
|
||||
if item['type'] != 'Create' and item['type'] != 'Announce':
|
||||
continue
|
||||
if not item.get('object'):
|
||||
continue
|
||||
profileStr += \
|
||||
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
||||
iconsDir, translate, None, baseDir,
|
||||
session, cachedWebfingers, personCache,
|
||||
nickname, domain, port,
|
||||
item, avatarUrl, False, False,
|
||||
httpPrefix, projectVersion, 'inbox',
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly,
|
||||
False, False, False, False, False)
|
||||
i += 1
|
||||
if i >= 20:
|
||||
break
|
||||
|
||||
return htmlHeader(cssFilename, profileStyle) + profileStr + htmlFooter()
|
||||
return htmlHeaderWithExternalStyle(cssFilename) + profileStr + htmlFooter()
|
||||
|
||||
|
||||
def htmlProfile(rssIconAtTop: bool,
|
||||
|
@ -566,84 +559,79 @@ def htmlProfile(rssIconAtTop: bool,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
profileStyle = getCSS(baseDir, cssFilename, cssCache)
|
||||
if profileStyle:
|
||||
profileStyle = \
|
||||
profileStyle.replace('image.png',
|
||||
profileJson['image']['url'])
|
||||
if isSystemAccount(nickname):
|
||||
bannerFile, bannerFilename = \
|
||||
getBannerFile(baseDir, nickname, domain)
|
||||
profileStyle = \
|
||||
profileStyle.replace('banner.png',
|
||||
'/users/' + nickname + '/' + bannerFile)
|
||||
if isSystemAccount(nickname):
|
||||
bannerFile, bannerFilename = \
|
||||
getBannerFile(baseDir, nickname, domain)
|
||||
# profileStyle = \
|
||||
# profileStyle.replace('banner.png',
|
||||
# '/users/' + nickname + '/' + bannerFile)
|
||||
|
||||
licenseStr = \
|
||||
'<a href="https://gitlab.com/bashrc2/epicyon">' + \
|
||||
'<img loading="lazy" class="license" alt="' + \
|
||||
translate['Get the source code'] + '" title="' + \
|
||||
translate['Get the source code'] + '" src="/icons/agpl.png" /></a>'
|
||||
licenseStr = \
|
||||
'<a href="https://gitlab.com/bashrc2/epicyon">' + \
|
||||
'<img loading="lazy" class="license" alt="' + \
|
||||
translate['Get the source code'] + '" title="' + \
|
||||
translate['Get the source code'] + '" src="/icons/agpl.png" /></a>'
|
||||
|
||||
if selected == 'posts':
|
||||
profileStr += \
|
||||
htmlProfilePosts(recentPostsCache, maxRecentPosts,
|
||||
translate,
|
||||
baseDir, httpPrefix, authorized,
|
||||
nickname, domain, port,
|
||||
session, wfRequest, personCache,
|
||||
projectVersion,
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly) + licenseStr
|
||||
if selected == 'following':
|
||||
profileStr += \
|
||||
htmlProfileFollowing(translate, baseDir, httpPrefix,
|
||||
authorized, nickname,
|
||||
domain, port, session,
|
||||
wfRequest, personCache, extraJson,
|
||||
projectVersion, ["unfollow"], selected,
|
||||
usersPath, pageNumber, maxItemsPerPage)
|
||||
if selected == 'followers':
|
||||
profileStr += \
|
||||
htmlProfileFollowing(translate, baseDir, httpPrefix,
|
||||
authorized, nickname,
|
||||
domain, port, session,
|
||||
wfRequest, personCache, extraJson,
|
||||
projectVersion, ["block"],
|
||||
selected, usersPath, pageNumber,
|
||||
maxItemsPerPage)
|
||||
if selected == 'roles':
|
||||
profileStr += \
|
||||
htmlProfileRoles(translate, nickname, domainFull, extraJson)
|
||||
if selected == 'skills':
|
||||
profileStr += \
|
||||
htmlProfileSkills(translate, nickname, domainFull, extraJson)
|
||||
if selected == 'shares':
|
||||
profileStr += \
|
||||
htmlProfileShares(actor, translate,
|
||||
nickname, domainFull,
|
||||
extraJson) + licenseStr
|
||||
if selected == 'posts':
|
||||
profileStr += \
|
||||
htmlProfilePosts(recentPostsCache, maxRecentPosts,
|
||||
translate,
|
||||
baseDir, httpPrefix, authorized,
|
||||
nickname, domain, port,
|
||||
session, wfRequest, personCache,
|
||||
projectVersion,
|
||||
YTReplacementDomain,
|
||||
showPublishedDateOnly) + licenseStr
|
||||
if selected == 'following':
|
||||
profileStr += \
|
||||
htmlProfileFollowing(translate, baseDir, httpPrefix,
|
||||
authorized, nickname,
|
||||
domain, port, session,
|
||||
wfRequest, personCache, extraJson,
|
||||
projectVersion, ["unfollow"], selected,
|
||||
usersPath, pageNumber, maxItemsPerPage)
|
||||
if selected == 'followers':
|
||||
profileStr += \
|
||||
htmlProfileFollowing(translate, baseDir, httpPrefix,
|
||||
authorized, nickname,
|
||||
domain, port, session,
|
||||
wfRequest, personCache, extraJson,
|
||||
projectVersion, ["block"],
|
||||
selected, usersPath, pageNumber,
|
||||
maxItemsPerPage)
|
||||
if selected == 'roles':
|
||||
profileStr += \
|
||||
htmlProfileRoles(translate, nickname, domainFull, extraJson)
|
||||
if selected == 'skills':
|
||||
profileStr += \
|
||||
htmlProfileSkills(translate, nickname, domainFull, extraJson)
|
||||
if selected == 'shares':
|
||||
profileStr += \
|
||||
htmlProfileShares(actor, translate,
|
||||
nickname, domainFull,
|
||||
extraJson) + licenseStr
|
||||
|
||||
# Footer which is only used for system accounts
|
||||
profileFooterStr = ''
|
||||
if isSystemAccount(nickname):
|
||||
profileFooterStr = ' </td>\n'
|
||||
profileFooterStr += ' <td valign="top" class="col-right">\n'
|
||||
iconsDir = getIconsDir(baseDir)
|
||||
profileFooterStr += \
|
||||
getRightColumnContent(baseDir, 'news', domainFull,
|
||||
httpPrefix, translate,
|
||||
iconsDir, False, False,
|
||||
newswire, False,
|
||||
False, None, False, False,
|
||||
False, True, authorized, True)
|
||||
profileFooterStr += ' </td>\n'
|
||||
profileFooterStr += ' </tr>\n'
|
||||
profileFooterStr += ' </tbody>\n'
|
||||
profileFooterStr += '</table>\n'
|
||||
# Footer which is only used for system accounts
|
||||
profileFooterStr = ''
|
||||
if isSystemAccount(nickname):
|
||||
profileFooterStr = ' </td>\n'
|
||||
profileFooterStr += ' <td valign="top" class="col-right">\n'
|
||||
iconsDir = getIconsDir(baseDir)
|
||||
profileFooterStr += \
|
||||
getRightColumnContent(baseDir, 'news', domainFull,
|
||||
httpPrefix, translate,
|
||||
iconsDir, False, False,
|
||||
newswire, False,
|
||||
False, None, False, False,
|
||||
False, True, authorized, True)
|
||||
profileFooterStr += ' </td>\n'
|
||||
profileFooterStr += ' </tr>\n'
|
||||
profileFooterStr += ' </tbody>\n'
|
||||
profileFooterStr += '</table>\n'
|
||||
|
||||
profileStr = \
|
||||
htmlHeader(cssFilename, profileStyle) + \
|
||||
profileStr + profileFooterStr + htmlFooter()
|
||||
profileStr = \
|
||||
htmlHeaderWithExternalStyle(cssFilename) + \
|
||||
profileStr + profileFooterStr + htmlFooter()
|
||||
return profileStr
|
||||
|
||||
|
||||
|
@ -989,12 +977,6 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
editProfileCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if editProfileCSS:
|
||||
if httpPrefix != 'https':
|
||||
editProfileCSS = \
|
||||
editProfileCSS.replace('https://', httpPrefix + '://')
|
||||
|
||||
moderatorsStr = ''
|
||||
themesDropdown = ''
|
||||
instanceStr = ''
|
||||
|
@ -1114,7 +1096,7 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str,
|
|||
'<option value="' + themeName +
|
||||
'" selected>')
|
||||
|
||||
editProfileForm = htmlHeader(cssFilename, editProfileCSS)
|
||||
editProfileForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
|
||||
# top banner
|
||||
editProfileForm += \
|
||||
|
|
|
@ -7,8 +7,7 @@ __email__ = "bob@freedombone.net"
|
|||
__status__ = "Production"
|
||||
|
||||
import os
|
||||
from utils import getCSS
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -20,12 +19,10 @@ def htmlSuspended(cssCache: {}, baseDir: str) -> str:
|
|||
if os.path.isfile(baseDir + '/suspended.css'):
|
||||
cssFilename = baseDir + '/suspended.css'
|
||||
|
||||
suspendedCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if suspendedCSS:
|
||||
suspendedForm = htmlHeader(cssFilename, suspendedCSS)
|
||||
suspendedForm += '<div><center>\n'
|
||||
suspendedForm += ' <p class="screentitle">Account Suspended</p>\n'
|
||||
suspendedForm += ' <p>See <a href="/terms">Terms of Service</a></p>\n'
|
||||
suspendedForm += '</center></div>\n'
|
||||
suspendedForm += htmlFooter()
|
||||
suspendedForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
suspendedForm += '<div><center>\n'
|
||||
suspendedForm += ' <p class="screentitle">Account Suspended</p>\n'
|
||||
suspendedForm += ' <p>See <a href="/terms">Terms of Service</a></p>\n'
|
||||
suspendedForm += '</center></div>\n'
|
||||
suspendedForm += htmlFooter()
|
||||
return suspendedForm
|
||||
|
|
|
@ -8,9 +8,8 @@ __status__ = "Production"
|
|||
|
||||
import os
|
||||
from shutil import copyfile
|
||||
from utils import getCSS
|
||||
from utils import getConfigParam
|
||||
from webapp_utils import htmlHeader
|
||||
from webapp_utils import htmlHeaderWithExternalStyle
|
||||
from webapp_utils import htmlFooter
|
||||
|
||||
|
||||
|
@ -38,20 +37,15 @@ def htmlTermsOfService(cssCache: {}, baseDir: str,
|
|||
if os.path.isfile(baseDir + '/epicyon.css'):
|
||||
cssFilename = baseDir + '/epicyon.css'
|
||||
|
||||
termsCSS = getCSS(baseDir, cssFilename, cssCache)
|
||||
if termsCSS:
|
||||
if httpPrefix != 'https':
|
||||
termsCSS = termsCSS.replace('https://', httpPrefix+'://')
|
||||
|
||||
TOSForm = htmlHeader(cssFilename, termsCSS)
|
||||
TOSForm += '<div class="container">' + TOSText + '</div>\n'
|
||||
if adminNickname:
|
||||
adminActor = httpPrefix + '://' + domainFull + \
|
||||
'/users/' + adminNickname
|
||||
TOSForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">Administered by <a href="' + \
|
||||
adminActor + '">' + adminNickname + '</a></p>\n' + \
|
||||
'</center></div>\n'
|
||||
TOSForm += htmlFooter()
|
||||
TOSForm = htmlHeaderWithExternalStyle(cssFilename)
|
||||
TOSForm += '<div class="container">' + TOSText + '</div>\n'
|
||||
if adminNickname:
|
||||
adminActor = httpPrefix + '://' + domainFull + \
|
||||
'/users/' + adminNickname
|
||||
TOSForm += \
|
||||
'<div class="container"><center>\n' + \
|
||||
'<p class="administeredby">Administered by <a href="' + \
|
||||
adminActor + '">' + adminNickname + '</a></p>\n' + \
|
||||
'</center></div>\n'
|
||||
TOSForm += htmlFooter()
|
||||
return TOSForm
|
||||
|
|
Loading…
Reference in New Issue