From 05b68fb5f1289dcfc2bfa96ec0cdc8bb7ef4abbb Mon Sep 17 00:00:00 2001
From: lesion
Date: Sun, 11 Oct 2020 21:54:36 +0000
Subject: [PATCH 01/45] Translated using Weblate (Spanish)
Currently translated at 69.0% (152 of 220 strings)
Translation: Gancio/Web
Translate-URL: https://hosted.weblate.org/projects/gancio/web/es/
---
locales/es.json | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/locales/es.json b/locales/es.json
index 53cf7079..9293fa9b 100644
--- a/locales/es.json
+++ b/locales/es.json
@@ -48,7 +48,7 @@
"enable": "Habilitar",
"disable": "Deshabilita",
"me": "Tú",
- "password_updated": "Contraseña actualizada!",
+ "password_updated": "Contraseña actualizada.",
"comments": "ningún comentario|un comentario|{n} comentarios",
"copy_link": "Copiar Enlace",
"send_via_mail": "Enviar correo electrónico",
@@ -81,7 +81,8 @@
"delete": "Eliminar",
"announcements": "Anuncios",
"url": "Dirección URL",
- "place": "Lugar"
+ "place": "Lugar",
+ "tags": "Tags"
},
"login": {
"description": "Entrando podrás publicar nuevos eventos.",
From b2584a14f4fc4a8889454942fe19de0bc370f046 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Sat, 10 Oct 2020 23:53:23 +0000
Subject: [PATCH 02/45] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?=
=?UTF-8?q?=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 60.0% (6 of 10 strings)
Translation: Gancio/Email
Translate-URL: https://hosted.weblate.org/projects/gancio/email/nb_NO/
---
locales/email/nb_NO.json | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/locales/email/nb_NO.json b/locales/email/nb_NO.json
index 14a66268..ba4e259d 100644
--- a/locales/email/nb_NO.json
+++ b/locales/email/nb_NO.json
@@ -4,13 +4,16 @@
"subject": "Nyregistrering"
},
"recover": {
- "subject": "Passordgjenoppretting"
+ "subject": "Passordgjenoppretting",
+ "content": "Hei, du har forespurt gjenoppretting av passord på {{config.title}}.\nKlikk her for å bekrefte."
},
"user_confirm": {
- "subject": "Du kan nå begynne publiseringen av hendelser"
+ "subject": "Du kan nå begynne publiseringen av hendelser",
+ "content": "Hei, din konto på {{config.title}} har blitt opprettet. Bekreft den og velg et passord ."
},
"confirm": {
- "subject": "Du kan nå begynne publiseringen av hendelser"
+ "subject": "Du kan nå begynne publiseringen av hendelser",
+ "content": "Hei, din konto på {{config.title}} har blitt bekreftet.\nSkriv til oss på {{config.admin_email}} for info."
},
"register": {
"content": "Registreringsforespørsel mottatt. Den vil bekreftes så snart som mulig.",
From dd36337a4466ad2e2d8259db3f1e2715ffe7a648 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Sat, 10 Oct 2020 23:51:29 +0000
Subject: [PATCH 03/45] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?=
=?UTF-8?q?=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 72.2% (159 of 220 strings)
Translation: Gancio/Web
Translate-URL: https://hosted.weblate.org/projects/gancio/web/nb_NO/
---
locales/nb_NO.json | 98 +++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 89 insertions(+), 9 deletions(-)
diff --git a/locales/nb_NO.json b/locales/nb_NO.json
index e222f894..38c895ef 100644
--- a/locales/nb_NO.json
+++ b/locales/nb_NO.json
@@ -2,10 +2,14 @@
"oauth": {
"scopes": {
"event:write": "Legg til og rediger dine hendelser"
- }
+ },
+ "authorization_request": "Programmet {app} ber om følgende autorisering på {instance_name}:",
+ "redirected_to": "Etter bekreftelse vil du bli videresendt til {url}"
},
"confirm": {
- "title": "Brukerbekreftelse"
+ "title": "Brukerbekreftelse",
+ "valid": "Kontoen din er bekreftet, du kan nå logge inn ",
+ "not_valid": "Noe gikk galt."
},
"error": {
"email_taken": "Denne e-postadressen er allerede i bruk",
@@ -13,10 +17,15 @@
},
"settings": {
"password_updated": "Passord endret",
- "change_password": "Endre passord"
+ "change_password": "Endre passord",
+ "remove_account": "Ved å trykke på følgende knapp vil din brukerkonto slettes. Hendelser du har offentliggjort vil ikke bli det.",
+ "danger_section": "Farlig del",
+ "remove_account_confirm": "Du er i ferd med å slette kontoen din for godt",
+ "update_confirm": "Ønsker du å lagre endringen?"
},
"auth": {
- "not_confirmed": "Ikke bekreftet enda…"
+ "not_confirmed": "Ikke bekreftet enda…",
+ "fail": "Kunne ikke logge inn. Er du sikker på at passordet stemmer?"
},
"admin": {
"new_announcement": "Ny kunngjøring",
@@ -46,7 +55,34 @@
"user_remove_ok": "Bruker fjernet",
"delete_user_confirm": "Er du sikker på at du vil fjerne denne brukeren?",
"remove_admin": "Fjern administrator",
- "delete_user": "Fjern"
+ "delete_user": "Fjern",
+ "place_description": "Hvis du har valgt feil sted eller adresse, kan du endre det. Alle nåværende og foregående hendelser tilknyttet dette stedet vil endre adresse.",
+ "footer_links": "Bunntekst-lenker",
+ "trusted_instances_help": "Liste over vennlige instanser vises i toppteksten",
+ "instance_place": "Indiker sted for denne instansen",
+ "description_description": "Vises i toppteksten ved siden av tittelen",
+ "title_description": "Det brukes som overskrift på siden, i emnet av e-posten for eksportering til RSS- og ICS-informasjonsstrømmer.",
+ "instance_locale_description": "Foretrukket brukerspråk for sider. Noen meldinger vises påsamme bruk for alle (for eksempel ved publisering via ActivityPub, eller ved forsendelse av noen e-poster). I sådant fall vil språket ovenfor bli brukt.",
+ "user_add_help": "En e-post med instruks om bekreftelse av abonnementet og valg av passord vil bli sendt til den nye brukeren",
+ "instance_timezone_description": "Gancio er designet for å samle hendelser fra et gitt sted, som en by. Alle hendelser på dette stedet vil bli vist i tidssonen valgt for det.",
+ "announcement_description": "I denne delen kan du smette inn kunngjøringer som forblir på hjemmesiden",
+ "hide_boost_bookmark_help": "Skjuler de små ikonene som viser antall framhevelser og bokmerker som kommer fra fediverset",
+ "hide_boost_bookmark": "Skjuler framhevelser/bokmerker",
+ "event_confirm_description": "Du kan bekrefte hendelser som oppføres av anonyme brukere her",
+ "enable_trusted_instances": "Skru på vennlige instanser",
+ "instance_name_help": "ActivityPub-konto å følge",
+ "user_blocked": "Brukeren {user} blokkert",
+ "enable_resources_help": "Tillat tillegg av ressurser til hendelsen fra fediverset",
+ "enable_federation_help": "Det vil bli mulig å følge denne instansen fra fediverset",
+ "allow_recurrent_event": "Tillat gjentagende hendelser",
+ "allow_anon_event": "Tillat anonyme hendelser (må bekreftes)?",
+ "allow_registration_description": "Tillat selv-registrering?",
+ "enable_federation": "Skru på føderasjon",
+ "federation": "Føderasjon/ActivityPub",
+ "delete_trusted_instance_confirm": "Ønsker du virkelig å slette dette elementet fra venneinstansmenyen?",
+ "instance_place_help": "Etikett å vise i andres instanser",
+ "add_trusted_instance": "Legg til en vennlig instans",
+ "recurrent_event_visible": "Vis gjentagende hendelser som forvalg"
},
"event": {
"interact_with_me": "Følg meg",
@@ -71,12 +107,28 @@
"description_description": "Beskrivelse",
"what_description": "Tittel",
"same_day": "på samme dag",
- "anon": "Anon"
+ "anon": "Anon",
+ "follow_me_description": "Én av måtene å holde deg oppdatert på hendelser som publiseres her på {title}\ner å følge kontoen {account} fra fediverset, for eksempel via Gab, og også legge til ressurser til en hendelser derfra. \nHvis du aldri har hørt om Gab eller fediverset anbefales denne artikkelen . Skriv inn din instans nedenfor (f.eks. social.librem.one)",
+ "anon_description": "Du kan legge til en hendelse uten å registrere deg eller logge inn, og den vil bli lagt ut etter at den er bekreftet å være passende. Det vil ikke være mulig å endre den. \nDu kan istedenfor logge inn , eller registrere deg . Ellers kan du forsette for å få et svar så snart som mulig. ",
+ "remove_recurrent_confirmation": "Er du sikker på at du ønsker å fjerne denne gjentagende hendelsen?\nHendelser i fortiden vil forbli, men ingen videre hendelser vil bli opprettet.",
+ "recurrent_2m_ordinal": "|Den {n} {days} i måneden annenhver|Den {n} {days} i måneden annenhver",
+ "where_description": "Hvor finner hendelsen sted? Hvis ingensteds hen, skriv det og trykk ⏎ . ",
+ "recurrent_1m_ordinal": "På {n} {days} i hver måned",
+ "recurrent_2m_days": "|På {days} i hver måned annenhver|{days} i hver måned annenhver",
+ "recurrent_1m_days": "|På {days} i hver måned|{days} i hver måned",
+ "recurrent_2w_days": "En {days} annenhver",
+ "multidate_description": "Er det en festival? Velg når den starter og slutter",
+ "media_description": "Du kan legge til et flygeblad (valgfritt)",
+ "interact_with_me_at": "Snakk til meg i fediverset på",
+ "image_too_big": "Bildet kan ikke være større enn 4 MB",
+ "added_anon": "Hendelse lagt til, men ikke bekreftet enda.",
+ "added": "Hendelse lagt til"
},
"register": {
"first_user": "Administrator opprettet",
"complete": "Registrering må bekreftes.",
- "error": "Feil: "
+ "error": "Feil: ",
+ "description": "Sosiale bevegelser bør organisere og finansiere seg selv. \n Før du kan publisere, må kontoen godkjennes , ha i minnet at bak denne siden er det mennesker, så skriv to linjer om hvilke hendelser du ønsker å publisere."
},
"recover": {
"not_valid_code": "Noe gikk galt"
@@ -85,7 +137,10 @@
"ok": "Innlogget",
"forgot_password": "Glemt passordet?",
"not_registered": "Ikke registrert?",
- "description": "Ved å logge inn kan du publisere nye hendelser."
+ "description": "Ved å logge inn kan du publisere nye hendelser.",
+ "insert_email": "Skriv inn din e-postadresse",
+ "error": "Kunne ikke logge inn. Sjekk din data.",
+ "check_email": "Sjekk din e-postinnboks og søppelpost."
},
"common": {
"reset": "Tilbakestill",
@@ -167,6 +222,31 @@
"send": "Send",
"export": "Eksporter",
"next": "Neste",
- "add_event": "Legg til hendelse"
+ "add_event": "Legg til hendelse",
+ "associate": "Tilknytt",
+ "authorize": "Autoriser",
+ "federation": "Føderasjon",
+ "n_resources": "ingen ressurs|én ressurs|{n} ressurser"
+ },
+ "export": {
+ "feed_description": "For å følge oppdateringer fra en datamaskin eller smarttelefon uten å trenge å åpne denne siden, kan du bruke en RSS-leser.
\n\n Med en RSS-informasjonskanal kan du bruke et egnet program for å motta oppdateringer fra sider som interesserer deg. Det er en bra måte å følge mange sider raskt, uten å måtte opprette en konto eller annet plunder.
\n\n Hvis du har Android, anbefales Flym or Feeder \n For iPhone/iPad kan du bruke Feed4U \n For skrivebord/bærbar anbefales Feedbro, installert på Firefox eller Chrome . \n \nÅ legge denne lenken til i din RSS-leser vil holde deg oppdatert.",
+ "intro": "Ulikt usosiale plattformer som gjør det de kan for å beholde brukere og data om dem, tror vi at den infoen, som folk, må ha sin frihet. Du kan holde deg oppdatert om hendelsene du ønsker, uten å nødvendigvis gå gjennom denne siden.",
+ "list_description": "Hvis du har en nettside og ønsker å vise en liste over hendelser, bruk følgende kode",
+ "ical_description": "Datamaskiner og smarttelefoner er vanligvis utstyrt med et kalenderprogram som kan importere kalendere.",
+ "email_description": "Du kan få hendelser som interesserer deg tilsendt per e-post.",
+ "insert_your_address": "Skriv inn din e-postadresse"
+ },
+ "about": "\n Gancio er en delt agenda for lokale gemenskaper.
\n ",
+ "validators": {
+ "email": "Skriv inn en gyldig e-postadresse",
+ "required": "{fieldName} kreves"
+ },
+ "ordinal": {
+ "-1": "siste",
+ "5": "femte",
+ "4": "fjerde",
+ "3": "tredje",
+ "2": "andre",
+ "1": "første"
}
}
From 2258717eae7e90eb0260bfbcf518937f3e9ad8db Mon Sep 17 00:00:00 2001
From: les
Date: Thu, 15 Jul 2021 16:16:25 +0200
Subject: [PATCH 04/45] cleaning
---
CHANGELOG | 8 ++++++++
pages/add/DateInput.vue | 3 ---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 93ccf2e6..a76150db 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,13 @@
All notable changes to this project will be documented in this file.
+### 1.0.2 (alpha)
+ - improve oauth flow UI
+ - [WordPress plugin](https://wordpress.org/plugins/wpgancio/)
+ - fix h-event import
+ - improve error logging (add stack trace to exception)
+ - choose start date for recurreing events (#120)
+ - fix user delete from admin
+
### 1.0.1 (alpha)
- fix AP resource removal
diff --git a/pages/add/DateInput.vue b/pages/add/DateInput.vue
index 9a47f8b3..4a0790d3 100644
--- a/pages/add/DateInput.vue
+++ b/pages/add/DateInput.vue
@@ -113,9 +113,6 @@ export default {
}
return hourList
},
- isRecurrent () {
- return !!this.value.recurrent
- },
whenPatterns () {
if (!this.value.from) { return }
const date = dayjs(this.value.from)
From 9673e40640e4473d9b434b974debd65ac5b1619f Mon Sep 17 00:00:00 2001
From: les
Date: Thu, 15 Jul 2021 16:18:56 +0200
Subject: [PATCH 05/45] refactoring media in event (multiple in db, focalpoint,
alt text)
---
components/Event.vue | 18 ++-
pages/add/MediaInput.vue | 97 ++++++++++++
pages/add/_edit.vue | 43 ++----
pages/embed/_event_id.vue | 4 +-
pages/event/_id.vue | 25 ++--
pages/export.vue | 2 +-
plugins/filters.js | 12 ++
server/api/controller/event.js | 140 +++++++++++-------
server/api/models/event.js | 1 +
server/emails/event/html.pug | 4 +-
server/helpers.js | 2 +-
.../20210705183419-add_event_media.js | 25 ++++
views/feed/rss.pug | 4 +-
13 files changed, 271 insertions(+), 106 deletions(-)
create mode 100644 pages/add/MediaInput.vue
create mode 100644 server/migrations/20210705183419-add_event_media.js
diff --git a/components/Event.vue b/components/Event.vue
index 4d98bd94..4d6cd756 100644
--- a/components/Event.vue
+++ b/components/Event.vue
@@ -1,7 +1,7 @@
v-card.h-event.event.d-flex
nuxt-link(:to='`/event/${event.slug || event.id}`')
- v-img.u-featured.img(:src="`/media/thumb/${event.image_path || 'logo.svg' }`")
+ v-img.u-featured.img(v-if='event.media' :src='thumbnail' :position='thumbnailPosition' :alt='event.media.length ? event.media[0].name : ""')
v-icon.float-right.mr-1(v-if='event.parentId' color='success') mdi-repeat
.title.p-name {{event.title}}
@@ -52,6 +52,22 @@ export default {
},
computed: {
...mapState(['settings']),
+ thumbnail () {
+ let path
+ if (this.event.media && this.event.media.length) {
+ path = this.event.media[0].url
+ } else {
+ path = 'logo.svg'
+ }
+ return '/media/thumb/' + path
+ },
+ thumbnailPosition () {
+ if (this.event.media && this.event.media.length && this.event.media[0].focalpoint) {
+ const focalpoint = this.event.media[0].focalpoint
+ return `${(focalpoint[0] + 1) * 50}% ${(focalpoint[1] + 1) * 50}%`
+ }
+ return 'center center'
+ },
is_mine () {
if (!this.$auth.user) {
return false
diff --git a/pages/add/MediaInput.vue b/pages/add/MediaInput.vue
new file mode 100644
index 00000000..4c4c7ae9
--- /dev/null
+++ b/pages/add/MediaInput.vue
@@ -0,0 +1,97 @@
+
+ span
+ v-dialog(v-model='openMediaDetails' max-width='1000px')
+ v-card
+ v-card-title {{$t('common.media')}}
+ v-card-text
+ v-row
+ v-col(:span='4' :cols='4')
+ p Scegli il punto centrale cliccando
+ v-img(v-if='mediaPreview'
+ :src='mediaPreview'
+ aspect-ratio='1.7778'
+ :position="position")
+
+ v-textarea.mt-4(type='text'
+ label='Alternative text'
+ persistent-hint
+ @input='v => name=v'
+ :value='value.name' filled
+ hint='Descrizione per utenti con disabilita visive')
+ v-card-actions.justify-space-between
+ v-btn(@click='openMediaDetails=false' color='warning') Cancel
+ v-btn(color='primary' @click='save') Save
+
+ v-col(:span='8' :cols='8')
+ v-img(
+ v-if='mediaPreview' :src='mediaPreview'
+ @click='selectFocal'
+ max-width='88%')
+
+ h3.mb-3.font-weight-regular(v-if='mediaPreview') {{$t('common.media')}}
+ v-img.col-12.col-sm-2.ml-3(v-if='mediaPreview' :src='mediaPreview' aspect-ratio='1.7778' :position='position')
+ v-btn-toggle
+ v-btn(text color='primary' @click='openMediaDetails = true') {{$t('common.edit')}}
+ v-btn(text color='primary' @click='remove') {{$t('common.remove')}}
+ p {{event.media[0].name}}
+ v-file-input(
+ v-else
+ :label="$t('common.media')"
+ :hint="$t('event.media_description')"
+ prepend-icon="mdi-camera"
+ :value='value.image'
+ @change="v => $emit('input', { image: v, focalpoint: [0, 0] })"
+ persistent-hint
+ accept='image/*')
+
+
diff --git a/pages/add/_edit.vue b/pages/add/_edit.vue
index 64551851..a6d47872 100644
--- a/pages/add/_edit.vue
+++ b/pages/add/_edit.vue
@@ -45,14 +45,7 @@
//- MEDIA / FLYER / POSTER
v-col(cols=12 md=6)
- v-file-input(
- :label="$t('common.media')"
- :hint="$t('event.media_description')"
- prepend-icon="mdi-camera"
- v-model='event.image'
- persistent-hint
- accept='image/*')
- v-img.col-12.col-sm-2.ml-3(v-if='mediaPreview' :src='mediaPreview')
+ MediaInput(v-model='event.media[0]' :event='event' @remove='event.media=[]')
//- tags
v-col(cols=12 md=6)
@@ -66,7 +59,7 @@
v-card-actions
v-spacer
v-btn(@click='done' :loading='loading' :disabled='!valid || loading'
- color='primary') {{edit?$t('common.edit'):$t('common.send')}}
+ color='primary') {{edit?$t('common.save'):$t('common.send')}}
+
diff --git a/server/helpers.js b/server/helpers.js
index 7e846110..8c8bb416 100644
--- a/server/helpers.js
+++ b/server/helpers.js
@@ -132,6 +132,7 @@ module.exports = {
}
const events = data.items.map(e => {
const props = e.properties
+ const media = get(props, 'featured[0]')
return {
title: get(props, 'name[0]', ''),
description: get(props, 'description[0]', ''),
@@ -142,7 +143,7 @@ module.exports = {
start_datetime: dayjs(get(props, 'start[0]', '')).unix(),
end_datetime: dayjs(get(props, 'end[0]', '')).unix(),
tags: get(props, 'category', []),
- media: { url: get(props, 'featured[0]') }
+ media: media ? [{ name: get(props, 'name[0]', ''), url: get(props, 'featured[0]'), focalpoint: [0, 0] }] : []
}
})
return res.json(events)
diff --git a/views/feed/rss.pug b/views/feed/rss.pug
index 71a1a085..efa285de 100644
--- a/views/feed/rss.pug
+++ b/views/feed/rss.pug
@@ -14,7 +14,7 @@ rss(version='2.0' xmlns:atom="http://www.w3.org/2005/Atom")
| #{event.title}
| #{event.place.name} - #{event.place.address}
| (#{moment.unix(event.start_datetime).format("dddd, D MMMM HH:mm")})
- if (event.media)
+ if (event.media && event.media.length)
|
| !{event.description}
| ]]>
From 579fd90c2d76d0955ecb49d2625503c2bfb9e0df Mon Sep 17 00:00:00 2001
From: les
Date: Mon, 19 Jul 2021 12:16:16 +0200
Subject: [PATCH 20/45] fix push from wpgancio
---
pages/event/_id.vue | 13 ++++++++-----
server/api/controller/event.js | 19 +++++++++++++------
2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/pages/event/_id.vue b/pages/event/_id.vue
index ad79404f..c47a5b37 100644
--- a/pages/event/_id.vue
+++ b/pages/event/_id.vue
@@ -11,14 +11,14 @@ v-container#event.pa-0.pa-sm-2
v-row
v-col.col-12.col-lg-8
//- fake image to use u-featured in h-event microformat
- img.u-featured(v-show='false' v-if='event.media' :src='event | mediaURL')
+ img.u-featured(v-show='false' v-if='hasMedia' :src='event | mediaURL')
v-img.main_image.mb-3(
contain
:alt='event | mediaURL("alt")'
:src='event | mediaURL'
:lazy-src='event | mediaURL("thumb")'
- v-if='event.media && event.media.length')
- .p-description.text-body-1.pa-3.grey.darken-4.rounded(v-if='!event.media && event.description' v-html='event.description')
+ v-if='hasMedia')
+ .p-description.text-body-1.pa-3.grey.darken-4.rounded(v-if='!hasMedia && event.description' v-html='event.description')
v-col.col-12.col-lg-4
v-card
@@ -61,11 +61,11 @@ v-container#event.pa-0.pa-sm-2
:href='`/api/event/${event.slug || event.id}.ics`')
v-icon mdi-calendar-export
- .p-description.text-body-1.pa-3.grey.darken-4.rounded(v-if='event.media && event.description' v-html='event.description')
+ .p-description.text-body-1.pa-3.grey.darken-4.rounded(v-if='hasMedia && event.description' v-html='event.description')
//- resources from fediverse
#resources.mt-1(v-if='settings.enable_federation')
- //- div.float-right(v-if='!settings.hide_boosts')
+ //- div.float-right(v-if='settings.hide_boosts')
//- small.mr-3 🔖 {{event.likes.length}}
//- small ✊ {{event.boost.length}}
@@ -236,6 +236,9 @@ export default {
},
computed: {
...mapState(['settings']),
+ hasMedia () {
+ return this.event.media && this.event.media.length
+ },
plainDescription () {
return htmlToText.fromString(this.event.description.replace('\n', '').slice(0, 1000))
},
diff --git a/server/api/controller/event.js b/server/api/controller/event.js
index 01a770ca..f833cb3b 100644
--- a/server/api/controller/event.js
+++ b/server/api/controller/event.js
@@ -297,13 +297,15 @@ const eventController = {
url = await helpers.getImageFromURL(body.image_url)
}
- const focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : [0, 0]
+ const focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : ['0', '0']
eventDetails.media = [{
url,
name: body.image_name || '',
- focalpoint: [parseFloat(focalpoint[0]), parseFloat(focalpoint[1].toFixed(2))]
+ focalpoint: [parseFloat(focalpoint[0].slice(0, 6)), parseFloat(focalpoint[1].slice(0, 6))]
}]
+ } else {
+ eventDetails.media = []
}
const event = await Event.create(eventDetails)
@@ -374,7 +376,7 @@ const eventController = {
recurrent
}
- if ((req.file || /^https?:\/\//.test(body.image_url)) && !event.recurrent && event.media.length) {
+ if ((req.file || /^https?:\/\//.test(body.image_url)) && !event.recurrent && event.media && event.media.length) {
const old_path = path.resolve(config.upload_path, event.media[0].url)
const old_thumb_path = path.resolve(config.upload_path, 'thumb', event.media[0].url)
try {
@@ -395,8 +397,8 @@ const eventController = {
}
}
- if (body.image_focalpoint) {
- const focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : [0, 0]
+ if (url && !event.recurrent) {
+ const focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : ['0', '0']
eventDetails.media = [{
url,
name: body.image_name || '',
@@ -452,7 +454,12 @@ const eventController = {
}
const notifier = require('../../notifier')
await notifier.notifyEvent('Delete', event.id)
- log.debug('[EVENT REMOVED]', event.title)
+
+ // unassociate child events
+ if (event.recurrent) {
+ await Event.update({ parentId: null }, { where: { parentId: event.id } })
+ }
+ log.debug('[EVENT REMOVED] ' + event.title)
await event.destroy()
res.sendStatus(200)
} else {
From 33f2507cbad7f1d1df198b5cd46e08dcff5da242 Mon Sep 17 00:00:00 2001
From: les
Date: Mon, 19 Jul 2021 12:29:35 +0200
Subject: [PATCH 21/45] add attachment with focalPoint to AP
---
server/api/models/event.js | 19 +++++++++++--------
server/federation/helpers.js | 3 ++-
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/server/api/models/event.js b/server/api/models/event.js
index 0b226dd0..d4ec1e7f 100644
--- a/server/api/models/event.js
+++ b/server/api/models/event.js
@@ -86,15 +86,18 @@ Event.prototype.toAPNote = function (username, locale, to = []) {
${tags && tags.map(t => `#${t}`)}
`
- // const attachment = []
+ const attachment = []
+ if (this.media && this.media.length) {
+ attachment.push({
+ type: 'Document',
+ mediaType: 'image/jpeg',
+ url: `${config.baseurl}/media/${this.media[0].url}`,
+ name: this.media[0].name || '',
+ blurHash: null,
+ focalPoint: this.media[0].focalPoint || [0, 0]
+ })
+ }
// if (this.image_path) {
- // attachment.push({
- // type: 'Document',
- // mediaType: 'image/jpeg',
- // url: `${config.baseurl}/media/${this.image_path}`,
- // name: null,
- // blurHash: null
- // })
// }
return {
diff --git a/server/federation/helpers.js b/server/federation/helpers.js
index e0207152..8267465f 100644
--- a/server/federation/helpers.js
+++ b/server/federation/helpers.js
@@ -97,7 +97,8 @@ const Helpers = {
'https://www.w3.org/ns/activitystreams',
'https://w3id.org/security/v1',
{
- Hashtag: 'as:Hashtag'
+ Hashtag: 'as:Hashtag',
+ focalPoint: { '@container': '@list', '@id': 'toot:focalPoint' }
}]
await Helpers.signAndSend(JSON.stringify(body), sharedInbox)
}
From 6f84d904948d697c3bc399b6f7a84ff8abf26ca3 Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 20 Jul 2021 11:42:25 +0200
Subject: [PATCH 22/45] add node version in very first log
---
server/cli.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/cli.js b/server/cli.js
index d720ef68..2dee2057 100755
--- a/server/cli.js
+++ b/server/cli.js
@@ -322,7 +322,7 @@ async function setup (options) {
process.exit(0)
}
-consola.info(`📅 ${pkg.name} - v${pkg.version} - ${pkg.description}`)
+consola.info(`📅 ${pkg.name} - v${pkg.version} - ${pkg.description} (nodejs: ${process.version})`)
require('yargs')
.usage('Usage $0 [options]')
From 02144354149e10c03c06ee5594a8fdea778b117a Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 20 Jul 2021 11:45:14 +0200
Subject: [PATCH 23/45] minor
---
package.json | 1 -
yarn.lock | 109 +++++++++++++++++++++++----------------------------
2 files changed, 50 insertions(+), 60 deletions(-)
diff --git a/package.json b/package.json
index 3f6e301e..506fbf09 100644
--- a/package.json
+++ b/package.json
@@ -108,7 +108,6 @@
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-standard": "^5.0.0",
"eslint-plugin-vue": "^7.10.0",
- "fibers": "^5.0.0",
"less-loader": "7",
"prettier": "^2.3.0",
"pug": "^3.0.2",
diff --git a/yarn.lock b/yarn.lock
index f9ae66ed..759b9bd8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1739,7 +1739,7 @@
dependencies:
"@types/node" "*"
-"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7":
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8":
version "7.0.8"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818"
integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==
@@ -1808,72 +1808,72 @@
source-map "^0.6.0"
"@typescript-eslint/eslint-plugin@^4.26.0":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz#36cdcd9ca6f9e5cb49b9f61b970b1976708d084b"
- integrity sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz#e73c8cabbf3f08dee0e1bda65ed4e622ae8f8921"
+ integrity sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==
dependencies:
- "@typescript-eslint/experimental-utils" "4.28.3"
- "@typescript-eslint/scope-manager" "4.28.3"
+ "@typescript-eslint/experimental-utils" "4.28.4"
+ "@typescript-eslint/scope-manager" "4.28.4"
debug "^4.3.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.1.0"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/experimental-utils@4.28.3", "@typescript-eslint/experimental-utils@^4.0.1":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca"
- integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==
+"@typescript-eslint/experimental-utils@4.28.4", "@typescript-eslint/experimental-utils@^4.0.1":
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz#9c70c35ebed087a5c70fb0ecd90979547b7fec96"
+ integrity sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==
dependencies:
"@types/json-schema" "^7.0.7"
- "@typescript-eslint/scope-manager" "4.28.3"
- "@typescript-eslint/types" "4.28.3"
- "@typescript-eslint/typescript-estree" "4.28.3"
+ "@typescript-eslint/scope-manager" "4.28.4"
+ "@typescript-eslint/types" "4.28.4"
+ "@typescript-eslint/typescript-estree" "4.28.4"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
"@typescript-eslint/parser@^4.26.0":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44"
- integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.4.tgz#bc462dc2779afeefdcf49082516afdc3e7b96fab"
+ integrity sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==
dependencies:
- "@typescript-eslint/scope-manager" "4.28.3"
- "@typescript-eslint/types" "4.28.3"
- "@typescript-eslint/typescript-estree" "4.28.3"
+ "@typescript-eslint/scope-manager" "4.28.4"
+ "@typescript-eslint/types" "4.28.4"
+ "@typescript-eslint/typescript-estree" "4.28.4"
debug "^4.3.1"
-"@typescript-eslint/scope-manager@4.28.3":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371"
- integrity sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==
+"@typescript-eslint/scope-manager@4.28.4":
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz#bdbce9b6a644e34f767bd68bc17bb14353b9fe7f"
+ integrity sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==
dependencies:
- "@typescript-eslint/types" "4.28.3"
- "@typescript-eslint/visitor-keys" "4.28.3"
+ "@typescript-eslint/types" "4.28.4"
+ "@typescript-eslint/visitor-keys" "4.28.4"
-"@typescript-eslint/types@4.28.3":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7"
- integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==
+"@typescript-eslint/types@4.28.4":
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42"
+ integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==
-"@typescript-eslint/typescript-estree@4.28.3":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb"
- integrity sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==
+"@typescript-eslint/typescript-estree@4.28.4":
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00"
+ integrity sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==
dependencies:
- "@typescript-eslint/types" "4.28.3"
- "@typescript-eslint/visitor-keys" "4.28.3"
+ "@typescript-eslint/types" "4.28.4"
+ "@typescript-eslint/visitor-keys" "4.28.4"
debug "^4.3.1"
globby "^11.0.3"
is-glob "^4.0.1"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@4.28.3":
- version "4.28.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4"
- integrity sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==
+"@typescript-eslint/visitor-keys@4.28.4":
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3"
+ integrity sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==
dependencies:
- "@typescript-eslint/types" "4.28.3"
+ "@typescript-eslint/types" "4.28.4"
eslint-visitor-keys "^2.0.0"
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
@@ -4498,9 +4498,9 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.723:
- version "1.3.779"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz#de55492a756deec63424f89fbe62aec9776f0e6d"
- integrity sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==
+ version "1.3.780"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.780.tgz#f946e10dc0005a3b59b9afa2d2c92f5c421f7fc5"
+ integrity sha512-2KQ9OYm9WMUNpAPA/4aerURl3hwRc9tNlpsiEj3Y8Gf7LVf26NzyLIX2v0hSagQwrS9+cWab+28A2GPKDoVNRA==
elliptic@^6.5.3:
version "6.5.4"
@@ -5284,13 +5284,6 @@ fecha@^4.2.0:
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce"
integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==
-fibers@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/fibers/-/fibers-5.0.0.tgz#3a60e0695b3ee5f6db94e62726716fa7a59acc41"
- integrity sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==
- dependencies:
- detect-libc "^1.0.3"
-
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -10329,9 +10322,9 @@ rechoir@^0.6.2:
resolve "^1.1.6"
rechoir@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca"
- integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+ integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
dependencies:
resolve "^1.9.0"
@@ -10706,11 +10699,11 @@ schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.1:
ajv-keywords "^3.5.2"
schema-utils@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9"
- integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
+ integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
dependencies:
- "@types/json-schema" "^7.0.7"
+ "@types/json-schema" "^7.0.8"
ajv "^6.12.5"
ajv-keywords "^3.5.2"
@@ -12464,10 +12457,8 @@ watchpack@^1.7.4:
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
dependencies:
- chokidar "^3.4.1"
graceful-fs "^4.1.2"
neo-async "^2.5.0"
- watchpack-chokidar2 "^2.0.1"
optionalDependencies:
chokidar "^3.4.1"
watchpack-chokidar2 "^2.0.1"
From 819a97bda7b23365021f2dc471b5f23cfa5246f3 Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 20 Jul 2021 13:14:06 +0200
Subject: [PATCH 24/45] update CHANGELOG
---
CHANGELOG | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/CHANGELOG b/CHANGELOG
index a76150db..daf38553 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,14 @@
All notable changes to this project will be documented in this file.
+### UNRELEASED
+ - 12 hour clock selection, #119
+ - improve media management
+ - add alt-text to featured image, fix #106
+ - add focalPoint support, fix #116
+ - improve a11y
+ - improve node v16 compatibility
+ - fix #122 ? (downgrade prettier)
+
### 1.0.2 (alpha)
- improve oauth flow UI
- [WordPress plugin](https://wordpress.org/plugins/wpgancio/)
From f38cff21cc8d773fc37c3b7e1114a425aa716593 Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 20 Jul 2021 21:30:28 +0200
Subject: [PATCH 25/45] fix unsaved focalPoint
---
pages/add/MediaInput.vue | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/pages/add/MediaInput.vue b/pages/add/MediaInput.vue
index e7425cfa..d09b8159 100644
--- a/pages/add/MediaInput.vue
+++ b/pages/add/MediaInput.vue
@@ -34,7 +34,7 @@
v-btn(text color='primary' @click='openMediaDetails = true') {{$t('common.edit')}}
v-btn(text color='error' @click='remove') {{$t('common.remove')}}
div(v-if='mediaPreview')
- v-img.col-12.col-sm-2.ml-3(:src='mediaPreview' aspect-ratio='1.7778' :position='`${(this.value.focalpoint[0] + 1) * 50}% ${(this.value.focalpoint[1] + 1) * 50}%`')
+ v-img.col-12.col-sm-2.ml-3(:src='mediaPreview' aspect-ratio='1.7778' :position='savedPosition')
span.float-right {{event.media[0].name}}
v-file-input(
v-else
@@ -68,8 +68,13 @@ export default {
const url = this.value.image ? URL.createObjectURL(this.value.image) : /^https?:\/\//.test(this.value.url) ? this.value.url : `/media/thumb/${this.value.url}`
return url
},
+ savedPosition () {
+ const focalpoint = this.value.focalpoint || [0, 0]
+ return `${(focalpoint[0] + 1) * 50}% ${(focalpoint[1] + 1) * 50}%`
+ },
position () {
- return `${(this.focalpoint[0] + 1) * 50}% ${(this.focalpoint[1] + 1) * 50}%`
+ const focalpoint = this.focalpoint || [0, 0]
+ return `${(focalpoint[0] + 1) * 50}% ${(focalpoint[1] + 1) * 50}%`
}
},
methods: {
From 7c23325a0cc6f64073073e9165a746852235fea4 Mon Sep 17 00:00:00 2001
From: les
Date: Wed, 21 Jul 2021 11:23:32 +0200
Subject: [PATCH 26/45] minor on focalPoint precision
---
server/api/controller/event.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/server/api/controller/event.js b/server/api/controller/event.js
index f833cb3b..828aa526 100644
--- a/server/api/controller/event.js
+++ b/server/api/controller/event.js
@@ -297,12 +297,12 @@ const eventController = {
url = await helpers.getImageFromURL(body.image_url)
}
- const focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : ['0', '0']
-
+ let focalpoint = body.image_focalpoint ? body.image_focalpoint.split(',') : ['0', '0']
+ focalpoint = [parseFloat(focalpoint[0]).toFixed(2), parseFloat(focalpoint[1]).toFixed(2)]
eventDetails.media = [{
url,
name: body.image_name || '',
- focalpoint: [parseFloat(focalpoint[0].slice(0, 6)), parseFloat(focalpoint[1].slice(0, 6))]
+ focalpoint: [parseFloat(focalpoint[0]), parseFloat(focalpoint[1])]
}]
} else {
eventDetails.media = []
From 08527e6e60e9144dff12268580a6943bd23209bb Mon Sep 17 00:00:00 2001
From: les
Date: Wed, 21 Jul 2021 11:26:58 +0200
Subject: [PATCH 27/45] v1.0.3
---
CHANGELOG | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index daf38553..ea32e01c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,6 @@
All notable changes to this project will be documented in this file.
-### UNRELEASED
+### 1.0.3 (alpha)
- 12 hour clock selection, #119
- improve media management
- add alt-text to featured image, fix #106
diff --git a/package.json b/package.json
index 506fbf09..439a9a4e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "gancio",
- "version": "1.0.2-alpha",
+ "version": "1.0.3-alpha",
"description": "A shared agenda for local communities",
"author": "lesion",
"scripts": {
From a03ec444369082a3d2d6b3a28bbef2dd561f1599 Mon Sep 17 00:00:00 2001
From: les
Date: Mon, 26 Jul 2021 12:23:02 +0200
Subject: [PATCH 28/45] fix noimg event
---
components/Event.vue | 8 +-
server/routes.js | 4 +
static/noimg.svg | 274 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 282 insertions(+), 4 deletions(-)
create mode 100644 static/noimg.svg
diff --git a/components/Event.vue b/components/Event.vue
index 997d9c18..032f5b52 100644
--- a/components/Event.vue
+++ b/components/Event.vue
@@ -1,7 +1,7 @@
v-card.h-event.event.d-flex
nuxt-link(:to='`/event/${event.slug || event.id}`')
- v-img.u-featured.img(v-if='event.media' aspect-ratio='1.7778' :src='thumbnail' :position='thumbnailPosition' :alt='event.media.length ? event.media[0].name : ""')
+ v-img.u-featured.img(aspect-ratio='1.7778' :src='thumbnail' :position='thumbnailPosition' :alt='event.media && event.media.length ? event.media[0].name : ""')
v-icon.float-right.mr-1(v-if='event.parentId' color='success') mdi-repeat
.title.p-name {{event.title}}
@@ -55,11 +55,11 @@ export default {
thumbnail () {
let path
if (this.event.media && this.event.media.length) {
- path = this.event.media[0].url
+ path = '/media/thumb/' + this.event.media[0].url
} else {
- path = 'logo.svg'
+ path = '/noimg.svg'
}
- return '/media/thumb/' + path
+ return path
},
thumbnailPosition () {
if (this.event.media && this.event.media.length && this.event.media[0].focalpoint) {
diff --git a/server/routes.js b/server/routes.js
index 4bfa6f4e..96fd0e93 100644
--- a/server/routes.js
+++ b/server/routes.js
@@ -33,6 +33,10 @@ app.use('/media/', express.static(config.upload_path))
// initialize instance settings / authentication / locale
app.use(helpers.initSettings)
+app.use('/noimg.svg', (req, res, next) => {
+ return express.static('./static/noimg.svg')
+})
+
// serve favicon and static content
app.use('/logo.png', (req, res, next) => {
const logoPath = req.settings.logo || './static/gancio'
diff --git a/static/noimg.svg b/static/noimg.svg
new file mode 100644
index 00000000..44b83d6c
--- /dev/null
+++ b/static/noimg.svg
@@ -0,0 +1,274 @@
+
+
+
+
+Created by potrace 1.15, written by Peter Selinger 2001-2017
+
+
+
+
+
+
+
From e1cbba1b34643249c58cc2f5f942d582ef69d1a8 Mon Sep 17 00:00:00 2001
From: les
Date: Mon, 26 Jul 2021 12:29:49 +0200
Subject: [PATCH 29/45] v1.0.4-alpha
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 439a9a4e..c6edfdd0 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "gancio",
- "version": "1.0.3-alpha",
+ "version": "1.0.4-alpha",
"description": "A shared agenda for local communities",
"author": "lesion",
"scripts": {
From 91c4e6a82b4aae21f7b032a94d161736f83feda3 Mon Sep 17 00:00:00 2001
From: les
Date: Mon, 26 Jul 2021 13:10:39 +0200
Subject: [PATCH 30/45] minor with docs
---
docs/docker/Dockerfile | 2 +-
docs/install/debian.md | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile
index 9ca1d1d2..7c4d196d 100644
--- a/docs/docker/Dockerfile
+++ b/docs/docker/Dockerfile
@@ -1,5 +1,5 @@
FROM node:buster
-RUN yarn cache clean gancio
+RUN yarn global remove gancio
RUN yarn global add --latest --silent https://gancio.org/latest.tgz 2> /dev/null
ADD entrypoint.sh /
diff --git a/docs/install/debian.md b/docs/install/debian.md
index 3621a3c9..c0aed773 100644
--- a/docs/install/debian.md
+++ b/docs/install/debian.md
@@ -63,8 +63,13 @@ sudo pm2 startup -u gancio
```
## Upgrade
+
+> warning "Backup your data"
+> Backup your data is generally a good thing to do and this is especially true before upgrading.
+> Don't be lazy and [backup]({% link install/backup.md %}) your data!
+
```bash
-sudo yarn cache clean gancio
+sudo yarn global remove gancio
sudo yarn global add --silent {{site.url}}/latest.tgz 2> /dev/null
sudo service pm2 restart
```
From ff0bb19540e99d84436bae70596d521b33458c9d Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 27 Jul 2021 16:30:35 +0200
Subject: [PATCH 31/45] use new ics to fix uuid warning
---
server/api/controller/export.js | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/server/api/controller/export.js b/server/api/controller/export.js
index 26e53dbc..55d277cd 100644
--- a/server/api/controller/export.js
+++ b/server/api/controller/export.js
@@ -62,8 +62,8 @@ const exportController = {
const eventsMap = events.map(e => {
const tmpStart = moment.unix(e.start_datetime)
const tmpEnd = moment.unix(e.end_datetime)
- const start = tmpStart.utc(true).format('YYYY-M-D-H-m').split('-')
- const end = tmpEnd.utc(true).format('YYYY-M-D-H-m').split('-')
+ const start = tmpStart.utc(true).format('YYYY-M-D-H-m').split('-').map(Number)
+ const end = tmpEnd.utc(true).format('YYYY-M-D-H-m').split('-').map(Number)
return {
start,
// startOutputType: 'utc',
@@ -77,8 +77,12 @@ const exportController = {
}
})
res.type('text/calendar; charset=UTF-8')
- const ret = ics.createEvents(eventsMap)
- res.send(ret.value)
+ ics.createEvents(eventsMap, (err, value) => {
+ if (err) {
+ return res.status(401).send(err)
+ }
+ return res.send(value)
+ })
}
}
From c87f479945718798a203bfd8aad446ecd48929d7 Mon Sep 17 00:00:00 2001
From: les
Date: Tue, 27 Jul 2021 17:19:23 +0200
Subject: [PATCH 32/45] add forgotten slug
---
components/Event.vue | 4 ++--
components/List.vue | 1 -
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/components/Event.vue b/components/Event.vue
index 032f5b52..8400bd76 100644
--- a/components/Event.vue
+++ b/components/Event.vue
@@ -22,12 +22,12 @@
v-list(dense)
v-list-item-group
v-list-item(v-clipboard:success="() => $root.$message('common.copied', { color: 'success' })"
- v-clipboard:copy='`${settings.baseurl}/event/${event.id}`')
+ v-clipboard:copy='`${settings.baseurl}/event/${event.slug || event.id}`')
v-list-item-icon
v-icon mdi-content-copy
v-list-item-content
v-list-item-title {{$t('common.copy_link')}}
- v-list-item(:href='`/api/event/${event.id}.ics`')
+ v-list-item(:href='`/api/event/${event.slug || event.id}.ics`')
v-list-item-icon
v-icon mdi-calendar-export
v-list-item-content
diff --git a/components/List.vue b/components/List.vue
index 23be8723..bf018f0a 100644
--- a/components/List.vue
+++ b/components/List.vue
@@ -12,7 +12,6 @@ div#list
v-list-item-subtitle mdi-repeat {{event|when}}
span.primary--text.ml-1 @{{event.place.name}}
v-list-item-title(v-text='event.title')
- //- a.text-body-1(:href='`/event/${event.id}`' target='_blank') {{event.title}}