Merge branch 'main' of gitlab.com:bashrc2/epicyon

merge-requests/30/head
Bob Mottram 2021-11-12 21:33:31 +00:00
commit 3af1ddedbd
6 changed files with 143 additions and 18 deletions

View File

@ -2550,7 +2550,26 @@ class PubServer(BaseHTTPRequestHandler):
self.server.themeName,
True, accessKeys,
customSubmitText,
conversationId).encode('utf-8')
conversationId,
self.server.recentPostsCache,
self.server.maxRecentPosts,
self.server.session,
self.server.cachedWebfingers,
self.server.personCache,
self.server.port,
None,
self.server.projectVersion,
self.server.YTReplacementDomain,
self.server.twitterReplacementDomain,
self.server.showPublishedDateOnly,
self.server.peertubeInstances,
self.server.allowLocalNetworkAccess,
self.server.systemLanguage,
self.server.maxLikeCount,
self.server.signingPrivateKeyPem,
self.server.CWlists,
self.server.listsEnabled,
self.server.defaultTimeline).encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
cookie, callingDomain, False)
@ -2665,7 +2684,26 @@ class PubServer(BaseHTTPRequestHandler):
self.server.themeName,
True, accessKeys,
customSubmitText,
conversationId).encode('utf-8')
conversationId,
self.server.recentPostsCache,
self.server.maxRecentPosts,
self.server.session,
self.server.cachedWebfingers,
self.server.personCache,
self.server.port,
None,
self.server.projectVersion,
self.server.YTReplacementDomain,
self.server.twitterReplacementDomain,
self.server.showPublishedDateOnly,
self.server.peertubeInstances,
self.server.allowLocalNetworkAccess,
self.server.systemLanguage,
self.server.maxLikeCount,
self.server.signingPrivateKeyPem,
self.server.CWlists,
self.server.listsEnabled,
self.server.defaultTimeline).encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
cookie, callingDomain, False)
@ -8186,7 +8224,7 @@ class PubServer(BaseHTTPRequestHandler):
'actor': undoActor,
'to': [actorReaction],
'object': {
'type': 'EmojiReaction',
'type': 'EmojiReact',
'actor': undoActor,
'to': [actorReaction],
'object': reactionUrl2
@ -8217,8 +8255,8 @@ class PubServer(BaseHTTPRequestHandler):
undoReactionCollectionEntry(recentPostsCache,
baseDir,
reactionPostFilename, reactionUrl,
undoActor, domain, debug, None,
emojiContent)
undoActor, domain, debug,
reactionPostJson, emojiContent)
if debug:
print('Regenerating html post for changed ' +
'emoji reaction collection')
@ -8259,6 +8297,7 @@ class PubServer(BaseHTTPRequestHandler):
else:
print('WARN: Unreaction post not found: ' +
reactionPostFilename)
self.server.GETbusy = False
actorAbsolute = self._getInstanceUrl(callingDomain) + actor
actorPathStr = \
@ -8353,7 +8392,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.signingPrivateKeyPem,
self.server.CWlists,
self.server.listsEnabled,
self.server.defaultTimeline)
timelineStr, pageNumber)
msg = msg.encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
@ -12518,6 +12557,13 @@ class PubServer(BaseHTTPRequestHandler):
customSubmitText = getConfigParam(baseDir, 'customSubmitText')
postJsonObject = None
if inReplyToUrl:
replyPostFilename = \
locatePost(baseDir, nickname, domain, inReplyToUrl)
if replyPostFilename:
postJsonObject = loadJson(replyPostFilename)
msg = htmlNewPost(self.server.cssCache,
mediaInstance,
translate,
@ -12535,7 +12581,26 @@ class PubServer(BaseHTTPRequestHandler):
self.server.themeName,
noDropDown, accessKeys,
customSubmitText,
conversationId).encode('utf-8')
conversationId,
self.server.recentPostsCache,
self.server.maxRecentPosts,
self.server.session,
self.server.cachedWebfingers,
self.server.personCache,
self.server.port,
postJsonObject,
self.server.projectVersion,
self.server.YTReplacementDomain,
self.server.twitterReplacementDomain,
self.server.showPublishedDateOnly,
self.server.peertubeInstances,
self.server.allowLocalNetworkAccess,
self.server.systemLanguage,
self.server.maxLikeCount,
self.server.signingPrivateKeyPem,
self.server.CWlists,
self.server.listsEnabled,
self.server.defaultTimeline).encode('utf-8')
if not msg:
print('Error replying to ' + inReplyToUrl)
self._404()
@ -14903,7 +14968,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug)
# emoji reaction from the web interface icon
if authorized and htmlGET and '?react=' in self.path:
if authorized and htmlGET and \
'?react=' in self.path and \
'?actor=' in self.path:
self._reactionButton(callingDomain, self.path,
self.server.baseDir,
self.server.httpPrefix,
@ -14922,7 +14989,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug)
# undo an emoji reaction from the web interface icon
if authorized and htmlGET and '?unreact=' in self.path:
if authorized and htmlGET and \
'?unreact=' in self.path and \
'?actor=' in self.path:
self._undoReactionButton(callingDomain, self.path,
self.server.baseDir,
self.server.httpPrefix,

View File

@ -345,6 +345,10 @@ a:visited:hover {
filter: brightness(var(--icon-brightness-change));
}
.rlab:hover {
text-decoration: underline;
}
a:focus {
border: 2px solid var(--focus-color);
}

View File

@ -51,7 +51,7 @@ def validEmojiContent(emojiContent: str) -> bool:
"""
if not emojiContent:
return False
if len(emojiContent) > 1:
if len(emojiContent) > 2:
return False
if len(emojiRegex.findall(emojiContent)) == 0:
return False
@ -514,11 +514,14 @@ def updateReactionCollection(recentPostsCache: {},
def htmlEmojiReactions(postJsonObject: {}, interactive: bool,
actor: str, maxReactionTypes: int) -> str:
actor: str, maxReactionTypes: int,
boxName: str, pageNumber: int) -> str:
"""html containing row of emoji reactions
"""
if not hasObjectDict(postJsonObject):
return ''
if not postJsonObject.get('actor'):
return ''
if not postJsonObject['object'].get('reactions'):
return ''
if not postJsonObject['object']['reactions'].get('items'):
@ -542,9 +545,13 @@ def htmlEmojiReactions(postJsonObject: {}, interactive: bool,
htmlStr = '<div class="emojiReactionBar">\n'
for emojiContent, count in reactions.items():
if emojiContent not in reactedToByThisActor:
baseUrl = actor + '?react=' + reactBy + '?emojreact='
baseUrl = actor + '?react=' + reactBy
else:
baseUrl = actor + '?unreact=' + reactBy + '?emojreact='
baseUrl = actor + '?unreact=' + reactBy
baseUrl += '?actor=' + postJsonObject['actor']
baseUrl += '?tl=' + boxName
baseUrl += '?page=' + str(pageNumber)
baseUrl += '?emojreact='
htmlStr += ' <div class="emojiReactionButton">\n'
if count < 100:

View File

@ -5914,7 +5914,7 @@ def _testValidEmojiContent() -> None:
assert not validEmojiContent(None)
assert not validEmojiContent(' ')
assert not validEmojiContent('j')
assert not validEmojiContent('😀😀')
assert not validEmojiContent('😀😀😀')
assert validEmojiContent('😀')
assert validEmojiContent('😄')

View File

@ -23,6 +23,7 @@ from webapp_utils import htmlFooter
from webapp_utils import editTextField
from webapp_utils import editNumberField
from webapp_utils import editCurrencyField
from webapp_post import individualPostAsHtml
def _htmlFollowingDataList(baseDir: str, nickname: str,
@ -195,7 +196,21 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
defaultTimeline: str, newswire: {},
theme: str, noDropDown: bool,
accessKeys: {}, customSubmitText: str,
conversationId: str) -> str:
conversationId: str,
recentPostsCache: {}, maxRecentPosts: int,
session, cachedWebfingers: {},
personCache: {}, port: int,
postJsonObject: {},
projectVersion: str,
YTReplacementDomain: str,
twitterReplacementDomain: str,
showPublishedDateOnly: bool,
peertubeInstances: [],
allowLocalNetworkAccess: bool,
systemLanguage: str,
maxLikeCount: int, signingPrivateKeyPem: str,
CWlists: {}, listsEnabled: str,
boxName: str) -> str:
"""New post screen
"""
replyStr = ''
@ -242,6 +257,31 @@ def htmlNewPost(cssCache: {}, mediaInstance: bool, translate: {},
'" rel="nofollow noopener noreferrer" ' + \
'target="_blank">' + \
translate['this post'] + '</a></p>\n'
if postJsonObject:
newPostText += \
individualPostAsHtml(signingPrivateKeyPem,
True, recentPostsCache,
maxRecentPosts,
translate, None,
baseDir, session,
cachedWebfingers,
personCache,
nickname, domain, port,
postJsonObject,
None, True, False,
httpPrefix, projectVersion,
boxName,
YTReplacementDomain,
twitterReplacementDomain,
showPublishedDateOnly,
peertubeInstances,
allowLocalNetworkAccess,
theme, systemLanguage,
maxLikeCount,
False, False, False,
False, False, False,
CWlists, listsEnabled)
replyStr = '<input type="hidden" ' + \
'name="replyTo" value="' + inReplyTo + '">\n'

View File

@ -1937,7 +1937,8 @@ def individualPostAsHtml(signingPrivateKeyPem: str,
if showIcons:
reactionStr = \
htmlEmojiReactions(postJsonObject, True, personUrl,
maxReactionTypes)
maxReactionTypes,
boxName, pageNumber)
if postIsSensitive and reactionStr:
reactionStr = '<br>' + reactionStr
postHtml = ' <div id="' + timelinePostBookmark + \
@ -2196,7 +2197,7 @@ def htmlEmojiReactionPicker(cssCache: {},
themeName: str, systemLanguage: str,
maxLikeCount: int, signingPrivateKeyPem: str,
CWlists: {}, listsEnabled: str,
defaultTimeline: str) -> str:
boxName: str, pageNumber: int) -> str:
"""Returns the emoji picker screen
"""
reactedToPostStr = \
@ -2234,6 +2235,9 @@ def htmlEmojiReactionPicker(cssCache: {},
emojiContentEncoded = urllib.parse.quote_plus(emojiContent)
emojiUrl = \
baseUrl + '?react=' + postId + \
'?actor=' + postJsonObject['actor'] + \
'?tl=' + boxName + \
'?page=' + str(pageNumber) + \
'?emojreact=' + emojiContentEncoded
emojiLabel = '<label class="rlab">' + emojiContent + '</label>'
emojiPicksStr += \
@ -2256,7 +2260,8 @@ def htmlEmojiReactionPicker(cssCache: {},
# banner
headerStr += \
'<header>\n' + \
'<a href="/users/' + nickname + '/' + defaultTimeline + '" title="' + \
'<a href="/users/' + nickname + '/' + boxName + \
'?page=' + str(pageNumber) + '" title="' + \
translate['Switch to timeline view'] + '" alt="' + \
translate['Switch to timeline view'] + '">\n'
headerStr += '<img loading="lazy" class="timeline-banner" ' + \