From b979ebc7a865959f1c26f3e45b13daa6b09821c4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 16:49:53 +0100 Subject: [PATCH 1/9] Structured data markup for profile screen --- webapp_profile.py | 3 ++- webapp_utils.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/webapp_profile.py b/webapp_profile.py index e02201a46..25a92cfc1 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -45,6 +45,7 @@ from webapp_utils import htmlHideFromScreenReader from webapp_utils import scheduledPostsExist from webapp_utils import getPersonAvatarUrl from webapp_utils import htmlHeaderWithExternalStyle +from webapp_utils import htmlHeaderWithPersonMarkup from webapp_utils import htmlFooter from webapp_utils import addEmojiToDisplayName from webapp_utils import getBannerFile @@ -888,7 +889,7 @@ def htmlProfile(rssIconAtTop: bool, instanceTitle = \ getConfigParam(baseDir, 'instanceTitle') profileStr = \ - htmlHeaderWithExternalStyle(cssFilename, instanceTitle) + \ + htmlHeaderWithPersonMarkup(cssFilename, instanceTitle, profileJson) + \ profileStr + htmlFooter() return profileStr diff --git a/webapp_utils.py b/webapp_utils.py index 6a9666a77..f6c6c6e7e 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -710,6 +710,45 @@ def htmlHeaderWithExternalStyle(cssFilename: str, instanceTitle: str, return htmlStr +def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, + actorJson: {}, lang='en') -> str: + """html header which includes person markup + https://schema.org/Person + """ + htmlStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle, lang) + if not actorJson: + return htmlStr + + skillsMarkup = '' + if actorJson.get('skills'): + skillsStr = '' + for skillName, skillValue in actorJson['skills'].items(): + if skillsStr: + skillsStr += ', ' + skillName + else: + skillsStr += skillName + if skillsStr: + skillsMarkup = \ + ' "hasOccupation": {\n' + \ + ' "skills": "' + skillsStr + '"\n' + \ + ' "},\n' + + personMarkup = \ + ' \n' + htmlStr = htmlStr.replace('\n', '\n' + personMarkup) + return htmlStr + + def htmlFooter() -> str: htmlStr = ' \n' htmlStr += '\n' From f54d8c226c7799d448452540c6557e6757612429 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 16:52:07 +0100 Subject: [PATCH 2/9] Newlines --- webapp_utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/webapp_utils.py b/webapp_utils.py index f6c6c6e7e..899785ab5 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -736,13 +736,13 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, personMarkup = \ ' \n' htmlStr = htmlStr.replace('\n', '\n' + personMarkup) From abb2342f084716f9dfe18ad8f99d35b5ba09d5b2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 18:57:57 +0100 Subject: [PATCH 3/9] Occupation --- person.py | 1 + webapp_utils.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/person.py b/person.py index 3d7f6d04e..389a36026 100644 --- a/person.py +++ b/person.py @@ -296,6 +296,7 @@ def _createPersonBase(baseDir: str, nickname: str, domain: str, port: int, 'tts': personId + '/speaker', 'shares': personId + '/shares', 'orgSchema': None, + 'occupation': "", 'skills': {}, 'roles': {}, 'availability': None, diff --git a/webapp_utils.py b/webapp_utils.py index 899785ab5..05c38c9ce 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -728,8 +728,14 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, else: skillsStr += skillName if skillsStr: + occupationStr = '' + if actorJson.get('occupation'): + occupationName = actorJson['occupation'] + occupationStr = ' "name": "' + occupationName + '",\n' skillsMarkup = \ ' "hasOccupation": {\n' + \ + ' "@type": "Occupation",\n' + \ + occupationStr + \ ' "skills": "' + skillsStr + '"\n' + \ ' "},\n' From d36df81824d368359b65eb37b1c0c16aba616919 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 18:58:48 +0100 Subject: [PATCH 4/9] Occupation name --- webapp_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp_utils.py b/webapp_utils.py index 05c38c9ce..65c68b87f 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -729,8 +729,8 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str, skillsStr += skillName if skillsStr: occupationStr = '' - if actorJson.get('occupation'): - occupationName = actorJson['occupation'] + if actorJson.get('occupationName'): + occupationName = actorJson['occupationName'] occupationStr = ' "name": "' + occupationName + '",\n' skillsMarkup = \ ' "hasOccupation": {\n' + \ From c4e367bd6d0c24a8454373814c859c862e8af0b9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 19:11:53 +0100 Subject: [PATCH 5/9] Occupation on edit profile screen --- daemon.py | 13 +++++++++++++ translations/ar.json | 3 ++- translations/ca.json | 3 ++- translations/cy.json | 3 ++- translations/de.json | 3 ++- translations/en.json | 3 ++- translations/es.json | 3 ++- translations/fr.json | 3 ++- translations/ga.json | 3 ++- translations/hi.json | 3 ++- translations/it.json | 3 ++- translations/ja.json | 3 ++- translations/ku.json | 3 ++- translations/oc.json | 3 ++- translations/pt.json | 3 ++- translations/ru.json | 3 ++- translations/zh.json | 3 ++- webapp_profile.py | 10 ++++++++++ 18 files changed, 55 insertions(+), 16 deletions(-) diff --git a/daemon.py b/daemon.py index 844a771fd..ee039a1db 100644 --- a/daemon.py +++ b/daemon.py @@ -4591,6 +4591,19 @@ class PubServer(BaseHTTPRequestHandler): del actorJson['movedTo'] actorChanged = True + # Other accounts (alsoKnownAs) + occupationName = "" + if actorJson.get('occupationName'): + occupationName = actorJson['occupationName'] + if fields.get('occupationName'): + if actorJson['occupationName'] != fields['occupationName']: + actorJson['occupationName'] = fields['occupationName'] + actorChanged = True + else: + if occupationName: + actorJson['occupationName'] = '' + actorChanged = True + # Other accounts (alsoKnownAs) alsoKnownAs = [] if actorJson.get('alsoKnownAs'): diff --git a/translations/ar.json b/translations/ar.json index 29042f88f..e06f1bf25 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "إظهار عدد الحسابات داخل البيانات الوصفية للمثيلات", "Show version number within instance metadata": "إظهار رقم الإصدار داخل البيانات الوصفية للمثيل", "Joined": "تاريخ الانضمام", - "City for spoofed GPS image metadata": "مدينة للبيانات الوصفية لصور GPS المخادعة" + "City for spoofed GPS image metadata": "مدينة للبيانات الوصفية لصور GPS المخادعة", + "Occupation": "الاحتلال" } diff --git a/translations/ca.json b/translations/ca.json index f16675caf..b7fbfdc6a 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Mostra el nombre de comptes a les metadades de la instància", "Show version number within instance metadata": "Mostra el número de versió a les metadades de la instància", "Joined": "Data d'unió", - "City for spoofed GPS image metadata": "Ciutat per a metadades d'imatges GPS falsificades" + "City for spoofed GPS image metadata": "Ciutat per a metadades d'imatges GPS falsificades", + "Occupation": "Ocupació" } diff --git a/translations/cy.json b/translations/cy.json index dde27f918..03a6dc09d 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Dangos nifer y cyfrifon o fewn metadata", "Show version number within instance metadata": "Dangos rhif y fersiwn o fewn metadata", "Joined": "Dyddiad ymuno", - "City for spoofed GPS image metadata": "Dinas ar gyfer metadata delwedd GPS spoofed" + "City for spoofed GPS image metadata": "Dinas ar gyfer metadata delwedd GPS spoofed", + "Occupation": "Ngalwedigaeth" } diff --git a/translations/de.json b/translations/de.json index e4f00a856..f193a603e 100644 --- a/translations/de.json +++ b/translations/de.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Anzahl der Konten in Instanzmetadaten anzeigen", "Show version number within instance metadata": "Versionsnummer in Instanzmetadaten anzeigen", "Joined": "Verbundenes Datum", - "City for spoofed GPS image metadata": "Stadt für gefälschte GPS-Bildmetadaten" + "City for spoofed GPS image metadata": "Stadt für gefälschte GPS-Bildmetadaten", + "Occupation": "Besetzung" } diff --git a/translations/en.json b/translations/en.json index 387101a1e..3216f1d53 100644 --- a/translations/en.json +++ b/translations/en.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Show numbers of accounts within instance metadata", "Show version number within instance metadata": "Show version number within instance metadata", "Joined": "Joined", - "City for spoofed GPS image metadata": "City for spoofed GPS image metadata" + "City for spoofed GPS image metadata": "City for spoofed GPS image metadata", + "Occupation": "Occupation" } diff --git a/translations/es.json b/translations/es.json index bded71c6b..b966a4777 100644 --- a/translations/es.json +++ b/translations/es.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Muestra el número de cuentas dentro de los metadatos de la instancia.", "Show version number within instance metadata": "Mostrar el número de versión dentro de los metadatos de la instancia", "Joined": "Fecha unida", - "City for spoofed GPS image metadata": "Ciudad para metadatos de imagen GPS falsificados" + "City for spoofed GPS image metadata": "Ciudad para metadatos de imagen GPS falsificados", + "Occupation": "Ocupación" } diff --git a/translations/fr.json b/translations/fr.json index 9f73c5ee2..197c319fa 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Afficher le nombre de comptes dans les métadonnées de l'instance", "Show version number within instance metadata": "Afficher le numéro de version dans les métadonnées de l'instance", "Joined": "Joint", - "City for spoofed GPS image metadata": "Ville pour les métadonnées d'image GPS falsifiées" + "City for spoofed GPS image metadata": "Ville pour les métadonnées d'image GPS falsifiées", + "Occupation": "Occupation" } diff --git a/translations/ga.json b/translations/ga.json index be92f6613..549abadce 100644 --- a/translations/ga.json +++ b/translations/ga.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Taispeáin líon na gcuntas laistigh de mheiteashonraí", "Show version number within instance metadata": "Taispeáin uimhir an leagain laistigh de mheiteashonraí", "Joined": "Dáta comhcheangailte", - "City for spoofed GPS image metadata": "Cathair le haghaidh meiteashonraí íomhá GPS spoofed" + "City for spoofed GPS image metadata": "Cathair le haghaidh meiteashonraí íomhá GPS spoofed", + "Occupation": "Slí bheatha" } diff --git a/translations/hi.json b/translations/hi.json index d2f1df28f..8d42d418c 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "उदाहरण मेटाडेटा के भीतर खातों की संख्या दिखाएं", "Show version number within instance metadata": "उदाहरण मेटाडेटा के भीतर संस्करण संख्या दिखाएं", "Joined": "दिनांक", - "City for spoofed GPS image metadata": "स्पूफ जीपीएस जीपीएस मेटाडेटा के लिए शहर" + "City for spoofed GPS image metadata": "स्पूफ जीपीएस जीपीएस मेटाडेटा के लिए शहर", + "Occupation": "व्यवसाय" } diff --git a/translations/it.json b/translations/it.json index 95f68e575..3557bbd26 100644 --- a/translations/it.json +++ b/translations/it.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Mostra il numero di account all'interno dei metadati dell'istanza", "Show version number within instance metadata": "Mostra il numero di versione nei metadati dell'istanza", "Joined": "Unito", - "City for spoofed GPS image metadata": "Città per metadati di immagini GPS falsificate" + "City for spoofed GPS image metadata": "Città per metadati di immagini GPS falsificate", + "Occupation": "Occupazione" } diff --git a/translations/ja.json b/translations/ja.json index 44aa8f38c..04de4d1fd 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "インスタンスメタデータ内のアカウント数を表示する", "Show version number within instance metadata": "インスタンスメタデータ内にバージョン番号を表示する", "Joined": "参加日", - "City for spoofed GPS image metadata": "なりすましGPS画像メタデータの都市" + "City for spoofed GPS image metadata": "なりすましGPS画像メタデータの都市", + "Occupation": "職業" } diff --git a/translations/ku.json b/translations/ku.json index 3f1295df3..bb69bf5e2 100644 --- a/translations/ku.json +++ b/translations/ku.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Di nav metadata mînakê de hejmarên hesaban nîşan bidin", "Show version number within instance metadata": "Di nav metadata mînakê de nimreya guhertoyê nîşan bide", "Joined": "Beşdarbûna Dîrokê", - "City for spoofed GPS image metadata": "Bajar ji bo metadata wêneya GPS ya xapînok" + "City for spoofed GPS image metadata": "Bajar ji bo metadata wêneya GPS ya xapînok", + "Occupation": "Sinet" } diff --git a/translations/oc.json b/translations/oc.json index 47b3ca685..f9d2fe53b 100644 --- a/translations/oc.json +++ b/translations/oc.json @@ -437,5 +437,6 @@ "Show numbers of accounts within instance metadata": "Show numbers of accounts within instance metadata", "Show version number within instance metadata": "Show version number within instance metadata", "Joined": "Joined", - "City for spoofed GPS image metadata": "City for spoofed GPS image metadata" + "City for spoofed GPS image metadata": "City for spoofed GPS image metadata", + "Occupation": "Occupation" } diff --git a/translations/pt.json b/translations/pt.json index a139c9f3d..956805c99 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Mostra o número de contas nos metadados da instância", "Show version number within instance metadata": "Mostrar o número da versão nos metadados da instância", "Joined": "Data juntada", - "City for spoofed GPS image metadata": "Cidade para metadados de imagem GPS falsificados" + "City for spoofed GPS image metadata": "Cidade para metadados de imagem GPS falsificados", + "Occupation": "Ocupação" } diff --git a/translations/ru.json b/translations/ru.json index 1d2b79ecc..6a29ea88b 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "Показать количество учетных записей в метаданных экземпляра", "Show version number within instance metadata": "Показать номер версии в метаданных экземпляра", "Joined": "Присоединенная дата", - "City for spoofed GPS image metadata": "Город для поддельных метаданных изображения GPS" + "City for spoofed GPS image metadata": "Город для поддельных метаданных изображения GPS", + "Occupation": "Занятие" } diff --git a/translations/zh.json b/translations/zh.json index cb3996ace..80222724e 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -441,5 +441,6 @@ "Show numbers of accounts within instance metadata": "显示实例元数据中的帐户数", "Show version number within instance metadata": "在实例元数据中显示版本号", "Joined": "加入日期", - "City for spoofed GPS image metadata": "欺骗性GPS影像元数据的城市" + "City for spoofed GPS image metadata": "欺骗性GPS影像元数据的城市", + "Occupation": "职业" } diff --git a/webapp_profile.py b/webapp_profile.py index 25a92cfc1..cfc61ec9a 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -1589,6 +1589,16 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, ' \n' + occupationName = '' + if actorJson.get('occupationName'): + occupationName = actorJson['occupationName'] + + editProfileForm += '
\n' + editProfileForm += \ + ' \n' + alsoKnownAsStr = '' if actorJson.get('alsoKnownAs'): alsoKnownAs = actorJson['alsoKnownAs'] From 68fe0ed4f8958439efdedf90fa9fb26c0a2dfb90 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 19:31:41 +0100 Subject: [PATCH 6/9] Show occupation on profile screen --- daemon.py | 6 ++++-- webapp_profile.py | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/daemon.py b/daemon.py index ee039a1db..bee3c8291 100644 --- a/daemon.py +++ b/daemon.py @@ -4596,8 +4596,10 @@ class PubServer(BaseHTTPRequestHandler): if actorJson.get('occupationName'): occupationName = actorJson['occupationName'] if fields.get('occupationName'): - if actorJson['occupationName'] != fields['occupationName']: - actorJson['occupationName'] = fields['occupationName'] + if actorJson['occupationName'] != \ + fields['occupationName']: + actorJson['occupationName'] = \ + fields['occupationName'] actorChanged = True else: if occupationName: diff --git a/webapp_profile.py b/webapp_profile.py index cfc61ec9a..e5b569978 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -343,7 +343,8 @@ def _getProfileHeader(baseDir: str, httpPrefix: str, alsoKnownAs: [], pinnedContent: str, accessKeys: {}, - joinedDate: str) -> str: + joinedDate: str, + occupationName: str) -> str: """The header of the profile screen, containing background image and avatar """ @@ -362,7 +363,14 @@ def _getProfileHeader(baseDir: str, httpPrefix: str, translate['Switch to timeline view'] + '">\n' + \ ' \n' - htmlStr += '

' + displayName + '

\n' + + occupationStr = '' + if occupationName: + occupationStr += \ + ' ' + occupationName + '
\n' + + htmlStr += '

' + displayName + '

\n' + occupationStr + htmlStr += \ '

@' + nickname + '@' + domainFull + '
\n' if joinedDate: @@ -731,6 +739,9 @@ def htmlProfile(rssIconAtTop: bool, if profileJson.get('published'): if 'T' in profileJson['published']: joinedDate = profileJson['published'] + occupationName = None + if profileJson.get('occupationName'): + occupationName = profileJson['occupationName'] avatarUrl = profileJson['icon']['url'] @@ -752,7 +763,7 @@ def htmlProfile(rssIconAtTop: bool, loginButton, avatarUrl, theme, movedTo, alsoKnownAs, pinnedContent, accessKeys, - joinedDate) + joinedDate, occupationName) # keyboard navigation userPathStr = '/users/' + nickname From 802136dfba410518e4f41a1abee337aedbf4ee9a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 19:34:49 +0100 Subject: [PATCH 7/9] Use variable --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index bee3c8291..56af36ce8 100644 --- a/daemon.py +++ b/daemon.py @@ -4596,7 +4596,7 @@ class PubServer(BaseHTTPRequestHandler): if actorJson.get('occupationName'): occupationName = actorJson['occupationName'] if fields.get('occupationName'): - if actorJson['occupationName'] != \ + if occupationName != \ fields['occupationName']: actorJson['occupationName'] = \ fields['occupationName'] From f1e2f696e8174066f0690a67c4bdc2e029b4bfa0 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 19:37:30 +0100 Subject: [PATCH 8/9] Remove any html from occupation --- daemon.py | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon.py b/daemon.py index 56af36ce8..fd3211fb3 100644 --- a/daemon.py +++ b/daemon.py @@ -4596,6 +4596,7 @@ class PubServer(BaseHTTPRequestHandler): if actorJson.get('occupationName'): occupationName = actorJson['occupationName'] if fields.get('occupationName'): + fields['occupationName'] = removeHtml(fields['occupationName']) if occupationName != \ fields['occupationName']: actorJson['occupationName'] = \ From 4a49ec40e121464a1a7db41f3f30dcb9427b00e2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 May 2021 19:37:58 +0100 Subject: [PATCH 9/9] Line length --- daemon.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index fd3211fb3..d72c34d61 100644 --- a/daemon.py +++ b/daemon.py @@ -4596,7 +4596,8 @@ class PubServer(BaseHTTPRequestHandler): if actorJson.get('occupationName'): occupationName = actorJson['occupationName'] if fields.get('occupationName'): - fields['occupationName'] = removeHtml(fields['occupationName']) + fields['occupationName'] = \ + removeHtml(fields['occupationName']) if occupationName != \ fields['occupationName']: actorJson['occupationName'] = \