diff --git a/daemon.py b/daemon.py index cf12ea415..9d21dfd7b 100644 --- a/daemon.py +++ b/daemon.py @@ -1697,7 +1697,7 @@ class PubServer(BaseHTTPRequestHandler): self._write(msg.encode('utf-8')) return - if self.path.startswith('/about'): + if self.path.endswith('/about'): if callingDomain.endswith('.onion'): msg = \ htmlAbout(self.server.baseDir, 'http', @@ -1840,36 +1840,6 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 16) - # login screen background image - if self.path == '/login-background.png': - mediaFilename = \ - self.server.baseDir + '/accounts/login-background.png' - if os.path.isfile(mediaFilename): - if self._etag_exists(mediaFilename): - # The file has not changed - self._304() - return - - tries = 0 - mediaBinary = None - while tries < 5: - try: - with open(mediaFilename, 'rb') as avFile: - mediaBinary = avFile.read() - break - except Exception as e: - print(e) - time.sleep(1) - tries += 1 - if mediaBinary: - self._set_headers_etag(mediaFilename, 'image/png', - mediaBinary, cookie, - callingDomain) - self._write(mediaBinary) - return - self._404() - return - # QR code for account handle if '/users/' in self.path and \ self.path.endswith('/qrcode.png'): @@ -1941,33 +1911,40 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 17) - # follow screen background image - if self.path == '/follow-background.png': - mediaFilename = \ - self.server.baseDir + '/accounts/follow-background.png' - if os.path.isfile(mediaFilename): - if self._etag_exists(mediaFilename): - # The file has not changed - self._304() - return + if '-background.' in self.path: + for ext in ('webp', 'gif', 'jpg', 'png'): + for bg in ('follow', 'options', 'login'): + # follow screen background image + if self.path.endswith('/' + bg + '-background.' + ext): + bgFilename = \ + self.server.baseDir + '/accounts/' + \ + bg + '-background.' + ext + if os.path.isfile(bgFilename): + if self._etag_exists(bgFilename): + # The file has not changed + self._304() + return - tries = 0 - mediaBinary = None - while tries < 5: - try: - with open(mediaFilename, 'rb') as avFile: - mediaBinary = avFile.read() - break - except Exception as e: - print(e) - time.sleep(1) - tries += 1 - if mediaBinary: - self._set_headers_etag(mediaFilename, 'image/png', - mediaBinary, cookie, - callingDomain) - self._write(mediaBinary) - return + tries = 0 + bgBinary = None + while tries < 5: + try: + with open(bgFilename, 'rb') as avFile: + bgBinary = avFile.read() + break + except Exception as e: + print(e) + time.sleep(1) + tries += 1 + if bgBinary: + if ext == 'jpg': + ext = 'jpeg' + self._set_headers_etag(bgFilename, + 'image/' + ext, + bgBinary, cookie, + callingDomain) + self._write(bgBinary) + return self._404() return diff --git a/epicyon-follow.css b/epicyon-follow.css index a9f8a5333..2f7ec22f1 100644 --- a/epicyon-follow.css +++ b/epicyon-follow.css @@ -75,7 +75,12 @@ a:link { } .follow { - background-image: url("follow-background.png"); + background-image: url("follow-background.jpg"); + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + background-repeat: no-repeat; + background-position: center; height: 100%; background-position: center; background-repeat: no-repeat; diff --git a/epicyon-login.css b/epicyon-login.css index bda7b678a..09b583a2f 100644 --- a/epicyon-login.css +++ b/epicyon-login.css @@ -33,7 +33,12 @@ body, html { background-color: var(--main-bg-color); color: var(--main-fg-color); - background-image: url("/login-background.png"); + background-image: url("/login-background.jpg"); + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + background-repeat: no-repeat; + background-position: center; height: 100%; font-family: Arial, Helvetica, sans-serif; max-width: 60%; @@ -125,7 +130,12 @@ span.psw { background-color: var(--main-bg-color); color: var(--main-fg-color); - background-image: url("/login-background.png"); + background-image: url("/login-background.jpg"); + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + background-repeat: no-repeat; + background-position: center; height: 100%; font-family: Arial, Helvetica, sans-serif; max-width: 60%; @@ -168,7 +178,12 @@ span.psw { background-color: var(--main-bg-color); color: var(--main-fg-color); - background-image: url("/login-background.png"); + background-image: url("/login-background.jpg"); + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + background-repeat: no-repeat; + background-position: center; height: 100%; font-family: Arial, Helvetica, sans-serif; max-width: 95%; diff --git a/epicyon-options.css b/epicyon-options.css new file mode 100644 index 000000000..1e7c24c49 --- /dev/null +++ b/epicyon-options.css @@ -0,0 +1,232 @@ +@charset "UTF-8"; + +:root { + --main-bg-color: #282c37; + --link-bg-color: #282c37; + --main-fg-color: #dddddd; + --main-link-color: #999; + --main-visited-color: #888; + --border-color: #505050; + --font-size-header: 18px; + --font-color-header: #ccc; + --font-size: 40px; + --font-size2: 24px; + --font-size3: 38px; + --font-size4: 22px; + --font-size5: 20px; + --text-entry-foreground: #ccc; + --text-entry-background: #111; + --time-color: #aaa; + --button-text: #FFFFFF; + --button-background: #999; + --button-selected: #666; + --hashtag-margin: 2%; + --hashtag-vertical-spacing1: 50px; + --hashtag-vertical-spacing2: 100px; + --hashtag-vertical-spacing3: 100px; + --hashtag-vertical-spacing4: 150px; + --hashtag-size1: 30px; + --hashtag-size2: 40px; + --follow-text-size1: 24px; + --follow-text-size2: 40px; + --follow-text-entry-width: 90%; +} + +@font-face { + font-family: 'Bedstead'; + font-style: normal; + font-weight: normal; + font-display: block; + src: url('./fonts/bedstead.otf') format('opentype'); +} + +body, html { + background-image: url("options-background.jpg"); + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + background-repeat: no-repeat; + background-position: center; + background-color: var(--main-bg-color); + color: var(--main-fg-color); + + height: 100%; + font-family: Arial, Helvetica, sans-serif; + max-width: 100%; + min-width: 600px; + margin: 5% auto; +} + +a, u { + color: var(--main-fg-color); +} + +a:visited{ + color: var(--main-visited-color); + background: var(--link-bg-color); + font-weight: bold; +} + +a:link { + color: var(--main-link-color); + background: var(--link-bg-color); + font-weight: bold; +} + +.follow { + height: 100%; + position: relative; + background-color: var(--main-bg-color); +} + +.followAvatar { + margin: 0% 0; +} + +.followAvatar img { + border-radius: 10%; + width: 20%; + min-width: 200px; +} + +.followText { + font-size: var(--font-size); + font-family: Arial, Helvetica, sans-serif; +} + +.imText { + font-size: var(--font-size4); + font-family: Arial, Helvetica, sans-serif; + color: var(--main-link-color); + background: var(--link-bg-color); +} + +.pgp { + font-size: var(--font-size5); + font-family: Arial, Helvetica, sans-serif; + color: var(--main-link-color); + background: var(--link-bg-color); + font-family: 'monospace'; +} + +.button { + border-radius: 4px; + background-color: var(--button-background); + border: none; + color: var(--button-text); + text-align: center; + padding: 10px; + font-size: var(--font-size); + font-family: Arial, Helvetica, sans-serif; + width: 20%; + max-width: 200px; + min-width: 100px; + cursor: pointer; + margin: 30px; +} + +.button:hover { + background-color: #555; + color: white; +} + +input[type=text] { + width: var(--follow-text-entry-width); + clear: both; + font-size: var(--font-size); + font-family: Arial, Helvetica, sans-serif; + text-align: center; + color: var(--text-entry-foreground); + background-color: var(--text-entry-background); +} + +.options { + font-size: var(--font-size); + font-family: Arial, Helvetica, sans-serif; +} + +.options img { + width: 15%; +} + +@media screen and (min-width: 400px) { + .followText { + font-size: var(--follow-text-size1); + font-family: Arial, Helvetica, sans-serif; + } + input[type=text] { + width: var(--follow-text-entry-width); + clear: both; + font-size: 24px; + font-family: Arial, Helvetica, sans-serif; + text-align: center; + color: var(--text-entry-foreground); + background-color: var(--text-entry-background); + } + .button { + border-radius: 4px; + background-color: var(--button-background); + border: none; + color: var(--button-text); + text-align: center; + padding: 10px; + font-size: 24px; + font-family: Arial, Helvetica, sans-serif; + width: 20%; + max-width: 200px; + min-width: 100px; + cursor: pointer; + margin: 30px; + } + input[type=checkbox] + { + -ms-transform: scale(2); + -moz-transform: scale(2); + -webkit-transform: scale(2); + -o-transform: scale(2); + transform: scale(2); + padding: 10px; + margin: 20px 30px; + } +} + +@media screen and (max-width: 1000px) { + .followText { + font-size: var(--follow-text-size2); + font-family: Arial, Helvetica, sans-serif; + } + input[type=text] { + width: var(--follow-text-entry-width); + clear: both; + font-size: 40px; + font-family: Arial, Helvetica, sans-serif; + text-align: center; + color: var(--text-entry-foreground); + background-color: var(--text-entry-background); + } + .button { + border-radius: 4px; + background-color: var(--button-background); + border: none; + color: var(--button-text); + text-align: center; + padding: 10px; + font-size: 40px; + font-family: Arial, Helvetica, sans-serif; + width: 20%; + max-width: 200px; + min-width: 100px; + cursor: pointer; + margin: 30px; + } + input[type=checkbox] + { + -ms-transform: scale(4); + -moz-transform: scale(4); + -webkit-transform: scale(4); + -o-transform: scale(4); + transform: scale(4); + padding: 20px; + margin: 30px 40px; + } +} diff --git a/img/follow_background_starlight.jpg b/img/follow_background_starlight.jpg new file mode 100644 index 000000000..de3be58df Binary files /dev/null and b/img/follow_background_starlight.jpg differ diff --git a/img/login_background_starlight.jpg b/img/login_background_starlight.jpg new file mode 100644 index 000000000..de3be58df Binary files /dev/null and b/img/login_background_starlight.jpg differ diff --git a/img/options_background_starlight.jpg b/img/options_background_starlight.jpg new file mode 100644 index 000000000..de3be58df Binary files /dev/null and b/img/options_background_starlight.jpg differ diff --git a/theme.py b/theme.py index c1a323c17..b9a283fb3 100644 --- a/theme.py +++ b/theme.py @@ -14,7 +14,8 @@ from shutil import copyfile def getThemeFiles() -> []: return ('epicyon.css', 'login.css', 'follow.css', - 'suspended.css', 'calendar.css', 'blog.css') + 'suspended.css', 'calendar.css', 'blog.css', + 'options.css') def getThemesList() -> []: @@ -88,7 +89,8 @@ def setCSSparam(css: str, param: str, value: str) -> str: return newcss.strip() -def setThemeFromDict(baseDir: str, name: str, themeParams: {}) -> None: +def setThemeFromDict(baseDir: str, name: str, + themeParams: {}, bgParams: {}) -> None: """Uses a dictionary to set a theme """ if name: @@ -108,6 +110,29 @@ def setThemeFromDict(baseDir: str, name: str, themeParams: {}) -> None: with open(filename, 'w+') as cssfile: cssfile.write(css) + if bgParams.get('login'): + setBackgroundFormat(baseDir, name, 'login', bgParams['login']) + if bgParams.get('follow'): + setBackgroundFormat(baseDir, name, 'login', bgParams['follow']) + if bgParams.get('options'): + setBackgroundFormat(baseDir, name, 'login', bgParams['options']) + + +def setBackgroundFormat(baseDir: str, name: str, + backgroundType: str, extension: str) -> None: + """Sets the background file extension + """ + if extension == 'jpg': + return + cssFilename = baseDir + '/' + backgroundType + '.css' + if not os.path.isfile(cssFilename): + return + with open(cssFilename, 'r') as cssfile: + css = cssfile.read() + css = css.replace('background.jpg', 'background.' + extension) + with open(cssFilename, 'w+') as cssfile2: + cssfile2.write(css) + def enableGrayscale(baseDir: str) -> None: """Enables grayscale for the current theme @@ -192,17 +217,24 @@ def setCustomFont(baseDir: str): def setThemeDefault(baseDir: str): + name = 'default' removeTheme(baseDir) - setThemeInConfig(baseDir, 'default') + setThemeInConfig(baseDir, name) themeParams = { "dummyValue": "1234" } - setThemeFromDict(baseDir, 'default', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeBlue(baseDir: str): + name = 'blue' removeTheme(baseDir) - setThemeInConfig(baseDir, 'blue') + setThemeInConfig(baseDir, name) themeParams = { "font-size-header": "22px", "font-size-header-mobile": "32px", @@ -225,12 +257,18 @@ def setThemeBlue(baseDir: str): "*font-family": "'Domestic_Manners'", "*src": "url('./fonts/Domestic_Manners.woff2') format('woff2')" } - setThemeFromDict(baseDir, 'blue', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeNight(baseDir: str): + name = 'night' removeTheme(baseDir) - setThemeInConfig(baseDir, 'night') + setThemeInConfig(baseDir, name) fontStr = \ "url('./fonts/CheGuevaraTextSans-Regular.woff2') format('woff2')" themeParams = { @@ -263,12 +301,18 @@ def setThemeNight(baseDir: str): "*font-family": "'CheGuevaraTextSans-Regular'", "*src": fontStr } - setThemeFromDict(baseDir, 'night', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeStarlight(baseDir: str): + name = 'starlight' removeTheme(baseDir) - setThemeInConfig(baseDir, 'starlight') + setThemeInConfig(baseDir, name) themeParams = { "font-size-button-mobile": "36px", "font-size": "32px", @@ -310,12 +354,18 @@ def setThemeStarlight(baseDir: str): "*font-family": "'bgrove'", "*src": "url('fonts/bgrove.woff2') format('woff2')" } - setThemeFromDict(baseDir, 'starlight', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeHenge(baseDir: str): + name = 'henge' removeTheme(baseDir) - setThemeInConfig(baseDir, 'henge') + setThemeInConfig(baseDir, name) themeParams = { "font-size-button-mobile": "36px", "font-size": "32px", @@ -354,12 +404,18 @@ def setThemeHenge(baseDir: str): "*font-family": "'bgrove'", "*src": "url('fonts/bgrove.woff2') format('woff2')" } - setThemeFromDict(baseDir, 'henge', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeZen(baseDir: str): + name = 'zen' removeTheme(baseDir) - setThemeInConfig(baseDir, 'zen') + setThemeInConfig(baseDir, name) themeParams = { "main-bg-color": "#5c4e41", "text-entry-background": "#5c4e41", @@ -378,10 +434,16 @@ def setThemeZen(baseDir: str): "dropdown-bg-color": "#504e41", "dropdown-bg-color-hover": "#444" } - setThemeFromDict(baseDir, 'zen', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeHighVis(baseDir: str): + name = 'highvis' themeParams = { "font-size-header": "22px", "font-size-header-mobile": "32px", @@ -398,10 +460,16 @@ def setThemeHighVis(baseDir: str): "*font-family": "'LinBiolinum_Rah'", "*src": "url('./fonts/LinBiolinum_Rah.woff2') format('woff2')" } - setThemeFromDict(baseDir, 'highvis', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeLCD(baseDir: str): + name = 'lcd' themeParams = { "main-bg-color": "#9fb42b", "link-bg-color": "#33390d", @@ -454,10 +522,16 @@ def setThemeLCD(baseDir: str): "*font-family": "'LcdSolid'", "*src": "url('./fonts/LcdSolid.woff2') format('woff2')" } - setThemeFromDict(baseDir, 'lcd', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemePurple(baseDir: str): + name = 'purple' fontStr = \ "url('./fonts/CheGuevaraTextSans-Regular.woff2') format('woff2')" themeParams = { @@ -497,10 +571,16 @@ def setThemePurple(baseDir: str): "*font-family": "'CheGuevaraTextSans-Regular'", "*src": fontStr } - setThemeFromDict(baseDir, 'purple', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeHacker(baseDir: str): + name = 'hacker' themeParams = { "main-bg-color": "black", "link-bg-color": "black", @@ -536,10 +616,16 @@ def setThemeHacker(baseDir: str): "event-color": "#00ff00", "image-corners": "0%" } - setThemeFromDict(baseDir, 'hacker', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeLight(baseDir: str): + name = 'light' themeParams = { "font-size-button-mobile": "36px", "font-size": "32px", @@ -582,7 +668,12 @@ def setThemeLight(baseDir: str): "*font-family": "'ElectrumADFExp-Regular'", "*src": "url('./fonts/ElectrumADFExp-Regular.otf') format('opentype')" } - setThemeFromDict(baseDir, 'light', themeParams) + bgParams = { + "login": 'jpg', + "follow": 'jpg', + "options": 'jpg' + } + setThemeFromDict(baseDir, name, themeParams, bgParams) def setThemeImages(baseDir: str, name: str) -> None: @@ -605,18 +696,53 @@ def setThemeImages(baseDir: str, name: str) -> None: baseDir + '/img/banner_' + themeNameLower + '.png' searchBannerFilename = \ baseDir + '/img/search_banner_' + themeNameLower + '.png' - if os.path.isfile(profileImageFilename) and \ - os.path.isfile(bannerFilename): - for subdir, dirs, files in os.walk(baseDir + - '/accounts'): - for acct in dirs: - if '@' not in acct: - continue - if 'inbox@' in acct: - continue - accountDir = \ - os.path.join(baseDir + '/accounts', acct) + backgroundNames = ('login', 'shares', 'delete', 'follow', + 'options', 'block', 'search', 'calendar') + extensions = ('webp', 'gif', 'jpg', 'png') + + for subdir, dirs, files in os.walk(baseDir + '/accounts'): + for acct in dirs: + if '@' not in acct: + continue + if 'inbox@' in acct: + continue + accountDir = \ + os.path.join(baseDir + '/accounts', acct) + + for backgroundType in backgroundNames: + for ext in extensions: + if themeNameLower == 'default': + backgroundImageFilename = \ + baseDir + '/img/' + backgroundType + \ + '-background.' + ext + else: + backgroundImageFilename = \ + baseDir + '/img/' + backgroundType + \ + '_background_' + themeNameLower + '.' + ext + + if os.path.isfile(backgroundImageFilename): + try: + copyfile(backgroundImageFilename, + baseDir + '/accounts/' + backgroundType + + '-background.' + ext) + continue + except BaseException: + pass + # background image was not found + # so remove any existing file + if os.path.isfile(baseDir + '/accounts/' + + backgroundType + + '-background.' + ext): + try: + os.remove(baseDir + '/accounts/' + + backgroundType + + '-background.' + ext) + except BaseException: + pass + + if os.path.isfile(profileImageFilename) and \ + os.path.isfile(bannerFilename): try: copyfile(profileImageFilename, accountDir + '/image.png') diff --git a/webinterface.py b/webinterface.py index eb640354e..5095074d1 100644 --- a/webinterface.py +++ b/webinterface.py @@ -1580,10 +1580,11 @@ def htmlLogin(translate: {}, baseDir: str, autocomplete=True) -> str: if not loginImageFilename: loginImageFilename = baseDir + '/accounts/' + loginImage copyfile(baseDir + '/img/login.png', loginImageFilename) - if os.path.isfile(baseDir + '/img/login-background.png'): - if not os.path.isfile(baseDir + '/accounts/login-background.png'): - copyfile(baseDir + '/img/login-background.png', - baseDir + '/accounts/login-background.png') + + if os.path.isfile(baseDir + '/accounts/login-background-custom.jpg'): + if not os.path.isfile(baseDir + '/accounts/login-background.jpg'): + copyfile(baseDir + '/accounts/login-background-custom.jpg', + baseDir + '/accounts/login-background.jpg') if accounts > 0: loginText = \ @@ -1661,7 +1662,7 @@ def htmlLogin(translate: {}, baseDir: str, autocomplete=True) -> str: ' ' - loginForm += registerButtonStr + loginButtonStr + loginForm += loginButtonStr + registerButtonStr loginForm += ' ' loginForm += '' loginForm += \ @@ -1680,10 +1681,11 @@ def htmlTermsOfService(baseDir: str, httpPrefix: str, domainFull: str) -> str: if not os.path.isfile(baseDir + '/accounts/tos.txt'): copyfile(baseDir + '/default_tos.txt', baseDir + '/accounts/tos.txt') - if os.path.isfile(baseDir + '/img/login-background.png'): - if not os.path.isfile(baseDir + '/accounts/login-background.png'): - copyfile(baseDir + '/img/login-background.png', - baseDir + '/accounts/login-background.png') + + if os.path.isfile(baseDir + '/accounts/login-background-custom.jpg'): + if not os.path.isfile(baseDir + '/accounts/login-background.jpg'): + copyfile(baseDir + '/accounts/login-background-custom.jpg', + baseDir + '/accounts/login-background.jpg') TOSText = 'Terms of Service go here.' if os.path.isfile(baseDir + '/accounts/tos.txt'): @@ -1720,35 +1722,35 @@ def htmlAbout(baseDir: str, httpPrefix: str, if not os.path.isfile(baseDir + '/accounts/about.txt'): copyfile(baseDir + '/default_about.txt', baseDir + '/accounts/about.txt') - if os.path.isfile(baseDir + '/img/login-background.png'): - if not os.path.isfile(baseDir + '/accounts/login-background.png'): - copyfile(baseDir + '/img/login-background.png', - baseDir + '/accounts/login-background.png') + + if os.path.isfile(baseDir + '/accounts/login-background-custom.jpg'): + if not os.path.isfile(baseDir + '/accounts/login-background.jpg'): + copyfile(baseDir + '/accounts/login-background-custom.jpg', + baseDir + '/accounts/login-background.jpg') aboutText = 'Information about this instance goes here.' if os.path.isfile(baseDir + '/accounts/about.txt'): - with open(baseDir + '/accounts/about.txt', 'r') as file: - aboutText = file.read() + with open(baseDir + '/accounts/about.txt', 'r') as aboutFile: + aboutText = aboutFile.read() aboutForm = '' cssFilename = baseDir + '/epicyon-profile.css' if os.path.isfile(baseDir + '/epicyon.css'): cssFilename = baseDir + '/epicyon.css' with open(cssFilename, 'r') as cssFile: - termsCSS = cssFile.read() + aboutCSS = cssFile.read() if httpPrefix != 'http': - termsCSS = termsCSS.replace('https://', + aboutCSS = aboutCSS.replace('https://', httpPrefix + '://') - aboutForm = htmlHeader(cssFilename, termsCSS) + aboutForm = htmlHeader(cssFilename, aboutCSS) aboutForm += '
' + \ 'http://' + onionDomain + '
Administered by ' - cssFilename = baseDir + '/epicyon-follow.css' - if os.path.isfile(baseDir + '/follow.css'): - cssFilename = baseDir + '/follow.css' + cssFilename = baseDir + '/epicyon-options.css' + if os.path.isfile(baseDir + '/options.css'): + cssFilename = baseDir + '/options.css' with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() profileStyle = \ @@ -5501,61 +5503,63 @@ def htmlPersonOptions(translate: {}, baseDir: str, translate['Donate'] + '' optionsStr = htmlHeader(cssFilename, profileStyle) - optionsStr += '
\n' optionsStr += htmlFooter() return optionsStr