2021-04-22 21:46:02 +00:00
|
|
|
__filename__ = "webapp_accesskeys.py"
|
|
|
|
__author__ = "Bob Mottram"
|
|
|
|
__license__ = "AGPL3+"
|
|
|
|
__version__ = "1.2.0"
|
|
|
|
__maintainer__ = "Bob Mottram"
|
|
|
|
__email__ = "bob@freedombone.net"
|
|
|
|
__status__ = "Production"
|
2021-06-26 11:27:14 +00:00
|
|
|
__module_group__ = "Accessibility"
|
2021-04-22 21:46:02 +00:00
|
|
|
|
|
|
|
import os
|
2021-06-07 09:10:52 +00:00
|
|
|
from utils import isAccountDir
|
2021-04-22 21:46:02 +00:00
|
|
|
from utils import loadJson
|
|
|
|
from utils import getConfigParam
|
2021-07-13 21:59:53 +00:00
|
|
|
from utils import acctDir
|
2021-04-22 21:46:02 +00:00
|
|
|
from webapp_utils import htmlHeaderWithExternalStyle
|
|
|
|
from webapp_utils import htmlFooter
|
|
|
|
|
|
|
|
|
2021-04-23 17:29:18 +00:00
|
|
|
def loadAccessKeysForAccounts(baseDir: str, keyShortcuts: {},
|
|
|
|
accessKeysTemplate: {}) -> None:
|
2021-04-22 21:46:02 +00:00
|
|
|
"""Loads key shortcuts for each account
|
|
|
|
"""
|
|
|
|
for subdir, dirs, files in os.walk(baseDir + '/accounts'):
|
|
|
|
for acct in dirs:
|
2021-06-07 09:10:52 +00:00
|
|
|
if not isAccountDir(acct):
|
2021-04-22 21:46:02 +00:00
|
|
|
continue
|
|
|
|
accountDir = os.path.join(baseDir + '/accounts', acct)
|
|
|
|
accessKeysFilename = accountDir + '/accessKeys.json'
|
|
|
|
if not os.path.isfile(accessKeysFilename):
|
|
|
|
continue
|
|
|
|
nickname = acct.split('@')[0]
|
|
|
|
accessKeys = loadJson(accessKeysFilename)
|
|
|
|
if accessKeys:
|
2021-04-23 17:29:18 +00:00
|
|
|
keyShortcuts[nickname] = accessKeysTemplate.copy()
|
|
|
|
for variableName, key in accessKeysTemplate.items():
|
|
|
|
if accessKeys.get(variableName):
|
|
|
|
keyShortcuts[nickname][variableName] = \
|
|
|
|
accessKeys[variableName]
|
2021-04-22 21:46:02 +00:00
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
def htmlAccessKeys(cssCache: {}, baseDir: str,
|
|
|
|
nickname: str, domain: str,
|
|
|
|
translate: {}, accessKeys: {},
|
2021-04-22 22:28:16 +00:00
|
|
|
defaultAccessKeys: {},
|
|
|
|
defaultTimeline: str) -> str:
|
2021-04-22 21:46:02 +00:00
|
|
|
"""Show and edit key shortcuts
|
|
|
|
"""
|
|
|
|
accessKeysFilename = \
|
2021-07-13 21:59:53 +00:00
|
|
|
acctDir(baseDir, nickname, domain) + '/accessKeys.json'
|
2021-04-22 21:46:02 +00:00
|
|
|
if os.path.isfile(accessKeysFilename):
|
|
|
|
accessKeysFromFile = loadJson(accessKeysFilename)
|
|
|
|
if accessKeysFromFile:
|
|
|
|
accessKeys = accessKeysFromFile
|
|
|
|
|
|
|
|
accessKeysForm = ''
|
|
|
|
cssFilename = baseDir + '/epicyon-profile.css'
|
|
|
|
if os.path.isfile(baseDir + '/epicyon.css'):
|
|
|
|
cssFilename = baseDir + '/epicyon.css'
|
|
|
|
|
|
|
|
instanceTitle = \
|
|
|
|
getConfigParam(baseDir, 'instanceTitle')
|
|
|
|
accessKeysForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
|
|
|
|
accessKeysForm += '<div class="container">\n'
|
|
|
|
|
|
|
|
accessKeysForm += \
|
|
|
|
' <h1>' + translate['Key Shortcuts'] + '</h1>\n'
|
2021-04-23 19:59:55 +00:00
|
|
|
accessKeysForm += \
|
|
|
|
'<p>' + translate['These access keys may be used'] + \
|
|
|
|
'<label class="labels"></label></p>'
|
2021-04-22 21:46:02 +00:00
|
|
|
|
|
|
|
accessKeysForm += ' <form method="POST" action="' + \
|
|
|
|
'/users/' + nickname + '/changeAccessKeys">\n'
|
|
|
|
|
2021-04-23 09:15:53 +00:00
|
|
|
timelineKey = accessKeys['menuTimeline']
|
|
|
|
submitKey = accessKeys['submitButton']
|
2021-04-22 21:46:02 +00:00
|
|
|
accessKeysForm += \
|
2021-04-22 22:28:16 +00:00
|
|
|
' <center>\n' + \
|
2021-04-22 22:37:52 +00:00
|
|
|
' <button type="submit" class="button" ' + \
|
2021-04-23 09:15:53 +00:00
|
|
|
'name="submitAccessKeysCancel" accesskey="' + timelineKey + '">' + \
|
2021-04-22 22:37:52 +00:00
|
|
|
translate['Go Back'] + '</button>\n' + \
|
2021-04-23 09:15:53 +00:00
|
|
|
' <button type="submit" class="button" ' + \
|
|
|
|
'name="submitAccessKeys" accesskey="' + submitKey + '">' + \
|
2021-04-22 22:28:16 +00:00
|
|
|
translate['Submit'] + '</button>\n </center>\n'
|
2021-04-22 21:46:02 +00:00
|
|
|
|
|
|
|
accessKeysForm += ' <table class="accesskeys">\n'
|
|
|
|
accessKeysForm += ' <colgroup>\n'
|
|
|
|
accessKeysForm += ' <col span="1" class="accesskeys-left">\n'
|
|
|
|
accessKeysForm += ' <col span="1" class="accesskeys-center">\n'
|
|
|
|
accessKeysForm += ' </colgroup>\n'
|
|
|
|
accessKeysForm += ' <tbody>\n'
|
|
|
|
|
|
|
|
for variableName, key in defaultAccessKeys.items():
|
|
|
|
if not translate.get(variableName):
|
|
|
|
continue
|
|
|
|
keyStr = '<tr>'
|
|
|
|
keyStr += \
|
|
|
|
'<td><label class="labels">' + \
|
|
|
|
translate[variableName] + '</label></td>'
|
|
|
|
if accessKeys.get(variableName):
|
|
|
|
key = accessKeys[variableName]
|
2021-04-23 14:21:57 +00:00
|
|
|
if len(key) > 1:
|
|
|
|
key = key[0]
|
2021-04-22 21:46:02 +00:00
|
|
|
keyStr += \
|
2021-04-23 14:21:57 +00:00
|
|
|
'<td><input type="text" ' + \
|
|
|
|
'name="' + variableName.replace(' ', '_') + '" ' + \
|
|
|
|
'value="' + key + '">'
|
2021-04-22 22:15:25 +00:00
|
|
|
keyStr += '</td></tr>\n'
|
2021-04-22 22:01:25 +00:00
|
|
|
accessKeysForm += keyStr
|
2021-04-22 21:46:02 +00:00
|
|
|
|
|
|
|
accessKeysForm += ' </tbody>\n'
|
|
|
|
accessKeysForm += ' </table>\n'
|
|
|
|
accessKeysForm += ' </form>\n'
|
|
|
|
accessKeysForm += '</div>\n'
|
|
|
|
accessKeysForm += htmlFooter()
|
|
|
|
return accessKeysForm
|