Merge
3
Makefile
|
|
@ -17,6 +17,9 @@ source:
|
||||||
clean:
|
clean:
|
||||||
rm -f *.*~ *~ *.dot
|
rm -f *.*~ *~ *.dot
|
||||||
rm -f orgs/*~
|
rm -f orgs/*~
|
||||||
|
rm -f defaultwelcome/*~
|
||||||
|
rm -f theme/indymediaclassic/welcome/*~
|
||||||
|
rm -f theme/indymediamodern/welcome/*~
|
||||||
rm -f website/EN/*~
|
rm -f website/EN/*~
|
||||||
rm -f gemini/EN/*~
|
rm -f gemini/EN/*~
|
||||||
rm -f scripts/*~
|
rm -f scripts/*~
|
||||||
|
|
|
||||||
46
daemon.py
|
|
@ -239,6 +239,7 @@ from cache import checkForChangedActor
|
||||||
from cache import storePersonInCache
|
from cache import storePersonInCache
|
||||||
from cache import getPersonFromCache
|
from cache import getPersonFromCache
|
||||||
from httpsig import verifyPostHeaders
|
from httpsig import verifyPostHeaders
|
||||||
|
from theme import isNewsThemeName
|
||||||
from theme import getTextModeBanner
|
from theme import getTextModeBanner
|
||||||
from theme import setNewsAvatar
|
from theme import setNewsAvatar
|
||||||
from theme import setTheme
|
from theme import setTheme
|
||||||
|
|
@ -3898,7 +3899,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
baseDir: str, httpPrefix: str,
|
baseDir: str, httpPrefix: str,
|
||||||
domain: str, domainFull: str,
|
domain: str, domainFull: str,
|
||||||
onionDomain: str, i2pDomain: str,
|
onionDomain: str, i2pDomain: str,
|
||||||
debug: bool, allowLocalNetworkAccess: bool) -> None:
|
debug: bool, allowLocalNetworkAccess: bool,
|
||||||
|
systemLanguage: str) -> None:
|
||||||
"""Updates your user profile after editing via the Edit button
|
"""Updates your user profile after editing via the Edit button
|
||||||
on the profile screen
|
on the profile screen
|
||||||
"""
|
"""
|
||||||
|
|
@ -4227,6 +4229,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
"mediaInstance",
|
"mediaInstance",
|
||||||
self.server.mediaInstance)
|
self.server.mediaInstance)
|
||||||
|
|
||||||
|
# is this a news theme?
|
||||||
|
if isNewsThemeName(self.server.baseDir,
|
||||||
|
self.server.themeName):
|
||||||
|
fields['newsInstance'] = 'on'
|
||||||
|
|
||||||
# change news instance status
|
# change news instance status
|
||||||
if fields.get('newsInstance'):
|
if fields.get('newsInstance'):
|
||||||
self.server.newsInstance = False
|
self.server.newsInstance = False
|
||||||
|
|
@ -4283,7 +4290,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if fields.get('themeDropdown'):
|
if fields.get('themeDropdown'):
|
||||||
self.server.themeName = fields['themeDropdown']
|
self.server.themeName = fields['themeDropdown']
|
||||||
setTheme(baseDir, self.server.themeName, domain,
|
setTheme(baseDir, self.server.themeName, domain,
|
||||||
allowLocalNetworkAccess)
|
allowLocalNetworkAccess, systemLanguage)
|
||||||
self.server.textModeBanner = \
|
self.server.textModeBanner = \
|
||||||
getTextModeBanner(self.server.baseDir)
|
getTextModeBanner(self.server.baseDir)
|
||||||
self.server.iconsCache = {}
|
self.server.iconsCache = {}
|
||||||
|
|
@ -4753,7 +4760,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if currTheme:
|
if currTheme:
|
||||||
self.server.themeName = currTheme
|
self.server.themeName = currTheme
|
||||||
setTheme(baseDir, currTheme, domain,
|
setTheme(baseDir, currTheme, domain,
|
||||||
self.server.allowLocalNetworkAccess)
|
self.server.allowLocalNetworkAccess,
|
||||||
|
systemLanguage)
|
||||||
self.server.textModeBanner = \
|
self.server.textModeBanner = \
|
||||||
getTextModeBanner(self.server.baseDir)
|
getTextModeBanner(self.server.baseDir)
|
||||||
self.server.iconsCache = {}
|
self.server.iconsCache = {}
|
||||||
|
|
@ -10800,7 +10808,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
msg = \
|
msg = \
|
||||||
htmlWelcomeScreen(self.server.baseDir, nickname,
|
htmlWelcomeScreen(self.server.baseDir, nickname,
|
||||||
self.server.systemLanguage,
|
self.server.systemLanguage,
|
||||||
self.server.translate)
|
self.server.translate,
|
||||||
|
self.server.themeName)
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
self._login_headers('text/html', msglen, callingDomain)
|
self._login_headers('text/html', msglen, callingDomain)
|
||||||
|
|
@ -10827,7 +10836,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix,
|
self.server.httpPrefix,
|
||||||
self.server.domainFull,
|
self.server.domainFull,
|
||||||
self.server.systemLanguage,
|
self.server.systemLanguage,
|
||||||
self.server.translate)
|
self.server.translate,
|
||||||
|
self.server.themeName)
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
self._login_headers('text/html', msglen, callingDomain)
|
self._login_headers('text/html', msglen, callingDomain)
|
||||||
|
|
@ -10854,7 +10864,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix,
|
self.server.httpPrefix,
|
||||||
self.server.domainFull,
|
self.server.domainFull,
|
||||||
self.server.systemLanguage,
|
self.server.systemLanguage,
|
||||||
self.server.translate)
|
self.server.translate,
|
||||||
|
self.server.themeName)
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
self._login_headers('text/html', msglen, callingDomain)
|
self._login_headers('text/html', msglen, callingDomain)
|
||||||
|
|
@ -13534,7 +13545,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.domainFull,
|
self.server.domainFull,
|
||||||
self.server.onionDomain,
|
self.server.onionDomain,
|
||||||
self.server.i2pDomain, self.server.debug,
|
self.server.i2pDomain, self.server.debug,
|
||||||
self.server.allowLocalNetworkAccess)
|
self.server.allowLocalNetworkAccess,
|
||||||
|
self.server.systemLanguage)
|
||||||
return
|
return
|
||||||
|
|
||||||
if authorized and self.path.endswith('/linksdata'):
|
if authorized and self.path.endswith('/linksdata'):
|
||||||
|
|
@ -14271,14 +14283,6 @@ def runDaemon(brochMode: bool,
|
||||||
httpd.i2pDomain = i2pDomain
|
httpd.i2pDomain = i2pDomain
|
||||||
httpd.mediaInstance = mediaInstance
|
httpd.mediaInstance = mediaInstance
|
||||||
httpd.blogsInstance = blogsInstance
|
httpd.blogsInstance = blogsInstance
|
||||||
httpd.newsInstance = newsInstance
|
|
||||||
httpd.defaultTimeline = 'inbox'
|
|
||||||
if mediaInstance:
|
|
||||||
httpd.defaultTimeline = 'tlmedia'
|
|
||||||
if blogsInstance:
|
|
||||||
httpd.defaultTimeline = 'tlblogs'
|
|
||||||
if newsInstance:
|
|
||||||
httpd.defaultTimeline = 'tlfeatures'
|
|
||||||
|
|
||||||
# load translations dictionary
|
# load translations dictionary
|
||||||
httpd.translate = {}
|
httpd.translate = {}
|
||||||
|
|
@ -14442,6 +14446,18 @@ def runDaemon(brochMode: bool,
|
||||||
httpd.themeName = getConfigParam(baseDir, 'theme')
|
httpd.themeName = getConfigParam(baseDir, 'theme')
|
||||||
if not httpd.themeName:
|
if not httpd.themeName:
|
||||||
httpd.themeName = 'default'
|
httpd.themeName = 'default'
|
||||||
|
if isNewsThemeName(baseDir, httpd.themeName):
|
||||||
|
newsInstance = True
|
||||||
|
|
||||||
|
httpd.newsInstance = newsInstance
|
||||||
|
httpd.defaultTimeline = 'inbox'
|
||||||
|
if mediaInstance:
|
||||||
|
httpd.defaultTimeline = 'tlmedia'
|
||||||
|
if blogsInstance:
|
||||||
|
httpd.defaultTimeline = 'tlblogs'
|
||||||
|
if newsInstance:
|
||||||
|
httpd.defaultTimeline = 'tlfeatures'
|
||||||
|
|
||||||
setNewsAvatar(baseDir,
|
setNewsAvatar(baseDir,
|
||||||
httpd.themeName,
|
httpd.themeName,
|
||||||
httpPrefix,
|
httpPrefix,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
This timeline contains any blogs written by you or anyone that you're following.
|
||||||
|
|
||||||
|
You can create a new blog post using the **publish** icon at the top of the right column.
|
||||||
|
|
||||||
|
Blog posts are different from ordinary fediverse posts. They use the ActivityPub *Article* type, which is intended for long-form writing. They can also have citations, selected from items in the newswire.
|
||||||
|
|
@ -2325,7 +2325,8 @@ if YTDomain:
|
||||||
if '.' in YTDomain:
|
if '.' in YTDomain:
|
||||||
args.YTReplacementDomain = YTDomain
|
args.YTReplacementDomain = YTDomain
|
||||||
|
|
||||||
if setTheme(baseDir, themeName, domain, args.allowLocalNetworkAccess):
|
if setTheme(baseDir, themeName, domain,
|
||||||
|
args.allowLocalNetworkAccess, args.language):
|
||||||
print('Theme set to ' + themeName)
|
print('Theme set to ' + themeName)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
35
theme.py
|
|
@ -23,6 +23,15 @@ def _getThemeFiles() -> []:
|
||||||
'welcome.css')
|
'welcome.css')
|
||||||
|
|
||||||
|
|
||||||
|
def isNewsThemeName(baseDir: str, themeName: str) -> bool:
|
||||||
|
"""Returns true if the given theme is a news instance
|
||||||
|
"""
|
||||||
|
themeDir = baseDir + '/theme/' + themeName
|
||||||
|
if os.path.isfile(themeDir + '/is_news_instance'):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def getThemesList(baseDir: str) -> []:
|
def getThemesList(baseDir: str) -> []:
|
||||||
"""Returns the list of available themes
|
"""Returns the list of available themes
|
||||||
Note that these should be capitalized, since they're
|
Note that these should be capitalized, since they're
|
||||||
|
|
@ -41,6 +50,29 @@ def getThemesList(baseDir: str) -> []:
|
||||||
return themes
|
return themes
|
||||||
|
|
||||||
|
|
||||||
|
def _copyThemeHelpFiles(baseDir: str, themeName: str,
|
||||||
|
systemLanguage: str) -> None:
|
||||||
|
"""Copies any theme specific help files from the welcome subdirectory
|
||||||
|
"""
|
||||||
|
if not systemLanguage:
|
||||||
|
systemLanguage = 'en'
|
||||||
|
themeDir = baseDir + '/theme/' + themeName + '/welcome'
|
||||||
|
if not os.path.isdir(themeDir):
|
||||||
|
themeDir = baseDir + '/defaultwelcome'
|
||||||
|
for subdir, dirs, files in os.walk(themeDir):
|
||||||
|
for helpMarkdownFile in files:
|
||||||
|
if not helpMarkdownFile.endswith('_' + systemLanguage + '.md'):
|
||||||
|
continue
|
||||||
|
destHelpMarkdownFile = \
|
||||||
|
helpMarkdownFile.replace('_' + systemLanguage + '.md', '.md')
|
||||||
|
if destHelpMarkdownFile == 'profile.md' or \
|
||||||
|
destHelpMarkdownFile == 'final.md':
|
||||||
|
destHelpMarkdownFile = 'welcome_' + destHelpMarkdownFile
|
||||||
|
copyfile(themeDir + '/' + helpMarkdownFile,
|
||||||
|
baseDir + '/accounts/' + destHelpMarkdownFile)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
def _setThemeInConfig(baseDir: str, name: str) -> bool:
|
def _setThemeInConfig(baseDir: str, name: str) -> bool:
|
||||||
"""Sets the theme with the given name within config.json
|
"""Sets the theme with the given name within config.json
|
||||||
"""
|
"""
|
||||||
|
|
@ -633,7 +665,7 @@ def _setClearCacheFlag(baseDir: str) -> None:
|
||||||
|
|
||||||
|
|
||||||
def setTheme(baseDir: str, name: str, domain: str,
|
def setTheme(baseDir: str, name: str, domain: str,
|
||||||
allowLocalNetworkAccess: bool) -> bool:
|
allowLocalNetworkAccess: bool, systemLanguage: str) -> bool:
|
||||||
"""Sets the theme with the given name as the current theme
|
"""Sets the theme with the given name as the current theme
|
||||||
"""
|
"""
|
||||||
result = False
|
result = False
|
||||||
|
|
@ -686,6 +718,7 @@ def setTheme(baseDir: str, name: str, domain: str,
|
||||||
else:
|
else:
|
||||||
disableGrayscale(baseDir)
|
disableGrayscale(baseDir)
|
||||||
|
|
||||||
|
_copyThemeHelpFiles(baseDir, name, systemLanguage)
|
||||||
_setThemeInConfig(baseDir, name)
|
_setThemeInConfig(baseDir, name)
|
||||||
_setClearCacheFlag(baseDir)
|
_setClearCacheFlag(baseDir)
|
||||||
return result
|
return result
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 976 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 17 KiB |
|
|
@ -18,14 +18,14 @@
|
||||||
"main-bg-color-reply": "#030202",
|
"main-bg-color-reply": "#030202",
|
||||||
"main-bg-color-report": "#050202",
|
"main-bg-color-report": "#050202",
|
||||||
"main-header-color-roles": "#1f192d",
|
"main-header-color-roles": "#1f192d",
|
||||||
"cw-color": "#00ff00",
|
"cw-color": "#9ad791",
|
||||||
"main-fg-color": "#00ff00",
|
"main-fg-color": "#9ad791",
|
||||||
"login-fg-color": "#00ff00",
|
"login-fg-color": "#9ad791",
|
||||||
"welcome-fg-color": "#00ff00",
|
"welcome-fg-color": "#9ad791",
|
||||||
"options-fg-color": "#00ff00",
|
"options-fg-color": "#9ad791",
|
||||||
"column-left-fg-color": "#00ff00",
|
"column-left-fg-color": "#9ad791",
|
||||||
"border-color": "#035103",
|
"border-color": "#035103",
|
||||||
"main-link-color": "#2fff2f",
|
"main-link-color": "#9ad791",
|
||||||
"main-link-color-hover": "#afff2f",
|
"main-link-color-hover": "#afff2f",
|
||||||
"options-main-link-color": "#2fff2f",
|
"options-main-link-color": "#2fff2f",
|
||||||
"options-main-link-color-hover": "#afff2f",
|
"options-main-link-color-hover": "#afff2f",
|
||||||
|
|
@ -34,14 +34,14 @@
|
||||||
"options-main-visited-color": "#3c8234",
|
"options-main-visited-color": "#3c8234",
|
||||||
"button-selected": "#063200",
|
"button-selected": "#063200",
|
||||||
"button-background-hover": "#a62200",
|
"button-background-hover": "#a62200",
|
||||||
"button-text-hover": "#00ff00",
|
"button-text-hover": "#9ad791",
|
||||||
"publish-button-background": "#062200",
|
"publish-button-background": "#062200",
|
||||||
"button-background": "#062200",
|
"button-background": "#062200",
|
||||||
"button-small-background": "#062200",
|
"button-small-background": "#062200",
|
||||||
"button-text": "#00ff00",
|
"button-text": "#9ad791",
|
||||||
"button-selected-text": "#00ff00",
|
"button-selected-text": "#9ad791",
|
||||||
"publish-button-text": "#00ff00",
|
"publish-button-text": "#9ad791",
|
||||||
"button-small-text": "#00ff00",
|
"button-small-text": "#9ad791",
|
||||||
"button-corner-radius": "4px",
|
"button-corner-radius": "4px",
|
||||||
"timeline-border-radius": "4px",
|
"timeline-border-radius": "4px",
|
||||||
"header-font": "'Bedstead'",
|
"header-font": "'Bedstead'",
|
||||||
|
|
@ -59,8 +59,8 @@
|
||||||
"title-text": "black",
|
"title-text": "black",
|
||||||
"title-background": "darkgreen",
|
"title-background": "darkgreen",
|
||||||
"gallery-text-color": "green",
|
"gallery-text-color": "green",
|
||||||
"time-color": "#00ff00",
|
"time-color": "#9ad791",
|
||||||
"place-color": "#00ff00",
|
"place-color": "#9ad791",
|
||||||
"event-color": "#00ff00",
|
"event-color": "#9ad791",
|
||||||
"image-corners": "0%"
|
"image-corners": "0%"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
"time-color": "grey",
|
"time-color": "grey",
|
||||||
"event-color": "white",
|
"event-color": "white",
|
||||||
"login-bg-color": "#567726",
|
"login-bg-color": "#567726",
|
||||||
"welcome-bg-color": "#567726",
|
"welcome-bg-color": "#ccc",
|
||||||
"login-fg-color": "black",
|
"login-fg-color": "black",
|
||||||
"welcome-fg-color": "black",
|
"welcome-fg-color": "black",
|
||||||
"options-bg-color": "black",
|
"options-bg-color": "black",
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|

|
||||||
|
### You are now a journalist!
|
||||||
|
Welcome onboard the team. This is a moderated news instance, so please ensure that anything you write is in accordance with our [editorial policy](/terms).
|
||||||
|
|
||||||
|
#### Hints
|
||||||
|
Use the **magnifier** icon 🔍 to search for fediverse handles and follow people.
|
||||||
|
|
||||||
|
Selecting the **banner at the top** of the screen switches between timeline view and your profile.
|
||||||
|
|
||||||
|
The screen will not automatically refresh when articles arrive, so use **F5** or the **Features** button to refresh.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
This timeline contains any articles published by you or anyone that you're following.
|
||||||
|
|
||||||
|
You can create a new article using the **publish** icon at the top of the newswire column, or on mobile via the newswire icon.
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
### Journalist Setup
|
||||||
|
Select your avatar image and add your name and description. Use a small avatar image (eg. 128x128 pixels) so that it's quick to download.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|

|
||||||
|
### Welcome to INSTANCE
|
||||||
|
This is an ActivityPub server designed for publishing in the Indymedia network. It can run on low power single board computers or old laptops.
|
||||||
|
|
||||||
|
Don't complain about the media. *Be the media*.
|
||||||
|
|
||||||
|
Now, lets get going...
|
||||||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|

|
||||||
|
### You are now a journalist!
|
||||||
|
Welcome onboard the team. This is a moderated news instance, so please ensure that anything you write is in accordance with our [editorial policy](/terms).
|
||||||
|
|
||||||
|
#### Hints
|
||||||
|
Use the **magnifier** icon 🔍 to search for fediverse handles and follow people.
|
||||||
|
|
||||||
|
Selecting the **banner at the top** of the screen switches between timeline view and your profile.
|
||||||
|
|
||||||
|
The screen will not automatically refresh when articles arrive, so use **F5** or the **Features** button to refresh.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
This timeline contains any articles published by you or anyone that you're following.
|
||||||
|
|
||||||
|
You can create a new article using the **publish** icon at the top of the newswire column, or on mobile via the newswire icon.
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
### Journalist Setup
|
||||||
|
Select your avatar image and add your name and description. Use a small avatar image (eg. 128x128 pixels) so that it's quick to download.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|

|
||||||
|
### Welcome to INSTANCE
|
||||||
|
This is an ActivityPub server designed for publishing in the Indymedia network. It can run on low power single board computers or old laptops.
|
||||||
|
|
||||||
|
Don't complain about the media. *Be the media*.
|
||||||
|
|
||||||
|
Now, lets get going...
|
||||||
|
After Width: | Height: | Size: 59 KiB |
|
|
@ -55,6 +55,16 @@ def _getHelpForTimeline(baseDir: str, boxName: str) -> str:
|
||||||
getConfigParam(baseDir, 'language')
|
getConfigParam(baseDir, 'language')
|
||||||
if not language:
|
if not language:
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
themeName = \
|
||||||
|
getConfigParam(baseDir, 'theme')
|
||||||
|
defaultFilename = None
|
||||||
|
if themeName:
|
||||||
|
defaultFilename = \
|
||||||
|
baseDir + '/theme/' + themeName + '/welcome/' + \
|
||||||
|
'help_' + boxName + '_' + language + '.md'
|
||||||
|
if not os.path.isfile(defaultFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if not defaultFilename:
|
||||||
defaultFilename = \
|
defaultFilename = \
|
||||||
baseDir + '/defaultwelcome/' + \
|
baseDir + '/defaultwelcome/' + \
|
||||||
'help_' + boxName + '_' + language + '.md'
|
'help_' + boxName + '_' + language + '.md'
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ def welcomeScreenIsComplete(baseDir: str,
|
||||||
|
|
||||||
def htmlWelcomeScreen(baseDir: str, nickname: str,
|
def htmlWelcomeScreen(baseDir: str, nickname: str,
|
||||||
language: str, translate: {},
|
language: str, translate: {},
|
||||||
|
themeName: str,
|
||||||
currScreen='welcome') -> str:
|
currScreen='welcome') -> str:
|
||||||
"""Returns the welcome screen
|
"""Returns the welcome screen
|
||||||
"""
|
"""
|
||||||
|
|
@ -53,8 +54,17 @@ def htmlWelcomeScreen(baseDir: str, nickname: str,
|
||||||
welcomeText = 'Welcome to Epicyon'
|
welcomeText = 'Welcome to Epicyon'
|
||||||
welcomeFilename = baseDir + '/accounts/' + currScreen + '.md'
|
welcomeFilename = baseDir + '/accounts/' + currScreen + '.md'
|
||||||
if not os.path.isfile(welcomeFilename):
|
if not os.path.isfile(welcomeFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if themeName:
|
||||||
defaultFilename = \
|
defaultFilename = \
|
||||||
baseDir + '/defaultwelcome/' + currScreen + '_' + language + '.md'
|
baseDir + '/theme/' + themeName + '/welcome/' + \
|
||||||
|
'welcome_' + language + '.md'
|
||||||
|
if not os.path.isfile(defaultFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if not defaultFilename:
|
||||||
|
defaultFilename = \
|
||||||
|
baseDir + '/defaultwelcome/' + \
|
||||||
|
currScreen + '_' + language + '.md'
|
||||||
if not os.path.isfile(defaultFilename):
|
if not os.path.isfile(defaultFilename):
|
||||||
defaultFilename = \
|
defaultFilename = \
|
||||||
baseDir + '/defaultwelcome/' + currScreen + '_en.md'
|
baseDir + '/defaultwelcome/' + currScreen + '_en.md'
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ from webapp_utils import markdownToHtml
|
||||||
|
|
||||||
def htmlWelcomeFinal(baseDir: str, nickname: str, domain: str,
|
def htmlWelcomeFinal(baseDir: str, nickname: str, domain: str,
|
||||||
httpPrefix: str, domainFull: str,
|
httpPrefix: str, domainFull: str,
|
||||||
language: str, translate: {}) -> str:
|
language: str, translate: {},
|
||||||
|
themeName: str) -> str:
|
||||||
"""Returns the final welcome screen after first login
|
"""Returns the final welcome screen after first login
|
||||||
"""
|
"""
|
||||||
# set a custom background for the welcome screen
|
# set a custom background for the welcome screen
|
||||||
|
|
@ -29,6 +30,14 @@ def htmlWelcomeFinal(baseDir: str, nickname: str, domain: str,
|
||||||
finalText = 'Welcome to Epicyon'
|
finalText = 'Welcome to Epicyon'
|
||||||
finalFilename = baseDir + '/accounts/welcome_final.md'
|
finalFilename = baseDir + '/accounts/welcome_final.md'
|
||||||
if not os.path.isfile(finalFilename):
|
if not os.path.isfile(finalFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if themeName:
|
||||||
|
defaultFilename = \
|
||||||
|
baseDir + '/theme/' + themeName + '/welcome/' + \
|
||||||
|
'final_' + language + '.md'
|
||||||
|
if not os.path.isfile(defaultFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if not defaultFilename:
|
||||||
defaultFilename = \
|
defaultFilename = \
|
||||||
baseDir + '/defaultwelcome/final_' + language + '.md'
|
baseDir + '/defaultwelcome/final_' + language + '.md'
|
||||||
if not os.path.isfile(defaultFilename):
|
if not os.path.isfile(defaultFilename):
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ from webapp_utils import markdownToHtml
|
||||||
|
|
||||||
def htmlWelcomeProfile(baseDir: str, nickname: str, domain: str,
|
def htmlWelcomeProfile(baseDir: str, nickname: str, domain: str,
|
||||||
httpPrefix: str, domainFull: str,
|
httpPrefix: str, domainFull: str,
|
||||||
language: str, translate: {}) -> str:
|
language: str, translate: {},
|
||||||
|
themeName: str) -> str:
|
||||||
"""Returns the welcome profile screen to set avatar and bio
|
"""Returns the welcome profile screen to set avatar and bio
|
||||||
"""
|
"""
|
||||||
# set a custom background for the welcome screen
|
# set a custom background for the welcome screen
|
||||||
|
|
@ -32,6 +33,14 @@ def htmlWelcomeProfile(baseDir: str, nickname: str, domain: str,
|
||||||
profileText = 'Welcome to Epicyon'
|
profileText = 'Welcome to Epicyon'
|
||||||
profileFilename = baseDir + '/accounts/welcome_profile.md'
|
profileFilename = baseDir + '/accounts/welcome_profile.md'
|
||||||
if not os.path.isfile(profileFilename):
|
if not os.path.isfile(profileFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if themeName:
|
||||||
|
defaultFilename = \
|
||||||
|
baseDir + '/theme/' + themeName + '/welcome/' + \
|
||||||
|
'profile_' + language + '.md'
|
||||||
|
if not os.path.isfile(defaultFilename):
|
||||||
|
defaultFilename = None
|
||||||
|
if not defaultFilename:
|
||||||
defaultFilename = \
|
defaultFilename = \
|
||||||
baseDir + '/defaultwelcome/profile_' + language + '.md'
|
baseDir + '/defaultwelcome/profile_' + language + '.md'
|
||||||
if not os.path.isfile(defaultFilename):
|
if not os.path.isfile(defaultFilename):
|
||||||
|
|
|
||||||