[sources] spoiler checkbox

This commit is contained in:
Andrea 2022-02-28 13:07:39 +01:00
parent d71bf43a08
commit ab241275aa
24 changed files with 61 additions and 17 deletions

View File

@ -58,14 +58,22 @@
</span> </span>
</li> </li>
</ul> </ul>
<div v-if="source.images.length" class="source-images"> <div v-if="source.spoiler && !showSpoiler" class="py-3">
<ImageThumb v-for="image in source.images" :key="image" :id="image" class="m-2" size="8rem"/> <button type="button" class="btn btn-outline-primary" @click="showSpoiler = true">
<Icon v="eye-slash"/>
<T>sources.submit.spoiler</T>
</button>
</div>
<div v-else>
<div v-if="source.images.length" class="source-images">
<ImageThumb v-for="image in source.images" :key="image" :id="image" class="m-2" size="8rem"/>
</div>
<ul v-if="source.fragments.length">
<li v-for="fragment in source.fragments" class="text-break">
<T>quotation.start</T><Spelling :text="addMarks(fragment.replace(/\n/g, '<br/>'))"></Spelling><T>quotation.end</T>
</li>
</ul>
</div> </div>
<ul v-if="source.fragments.length">
<li v-for="fragment in source.fragments" class="text-break">
<T>quotation.start</T><Spelling :text="addMarks(fragment.replace(/\n/g, '<br/>'))"></Spelling><T>quotation.end</T>
</li>
</ul>
<div v-if="source.versions.length" class="my-3"> <div v-if="source.versions.length" class="my-3">
<p> <p>
<button :class="['btn', versionsShown ? 'btn-primary' : 'btn-outline-primary', 'btn-sm']" @click="versionsShown = !versionsShown"> <button :class="['btn', versionsShown ? 'btn-primary' : 'btn-outline-primary', 'btn-sm']" @click="versionsShown = !versionsShown">
@ -104,6 +112,7 @@
pronounLibrary, pronounLibrary,
deleted: false, deleted: false,
versionsShown: false, versionsShown: false,
showSpoiler: false,
} }
}, },
methods: { methods: {

View File

@ -51,6 +51,14 @@
<textarea v-model="s.val" class="form-control" rows="3" @keyup="s.update(s.val)" required></textarea> <textarea v-model="s.val" class="form-control" rows="3" @keyup="s.update(s.val)" required></textarea>
</ListInput> </ListInput>
</div> </div>
<div class="form-group">
<div class="form-check form-switch my-2">
<label>
<input class="form-check-input" type="checkbox" v-model="form.spoiler">
<T>sources.submit.spoiler</T>
</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="pronouns" class="required"><T>sources.submit.pronouns</T></label> <label for="pronouns" class="required"><T>sources.submit.pronouns</T></label>
<p class="small text-muted mb-0"> <p class="small text-muted mb-0">
@ -128,6 +136,7 @@
comment: '', comment: '',
images: [], images: [],
link: '', link: '',
spoiler: false,
key: null, key: null,
base: null, base: null,
}, },
@ -158,6 +167,7 @@
comment: '', comment: '',
images: [], images: [],
link: '', link: '',
spoiler: false,
key: null, key: null,
base: null, base: null,
} }
@ -177,6 +187,7 @@
comment: source.comment, comment: source.comment,
images: source.images, images: source.images,
link: source.link, link: source.link,
spoiler: source.spoiler,
key: source.key, key: source.key,
base: source.id, base: source.id,
} }

View File

@ -119,10 +119,10 @@ sources:
key: 'Key' key: 'Key'
keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary' keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary'
images: 'Images' images: 'Images'
spoiler: 'Spoiler' # TODO
otherVersions: 'In other languages' otherVersions: 'In other languages'
referenced: 'Examples of use' referenced: 'Examples of use'
nouns: nouns:
header: 'Dictionary' header: 'Dictionary'
headerLong: 'Dictionary of neutral nouns' headerLong: 'Dictionary of neutral nouns'

View File

@ -113,6 +113,7 @@ sources:
key: 'Schlüssel' key: 'Schlüssel'
keyInfo: 'Kennzeichen, um Quellen zwischen Sprachversionen und dem Wörterbuch zu verbinden' keyInfo: 'Kennzeichen, um Quellen zwischen Sprachversionen und dem Wörterbuch zu verbinden'
images: 'Bilder' images: 'Bilder'
spoiler: 'Spoiler' # TODO
otherVersions: 'In anderen Sprachen' otherVersions: 'In anderen Sprachen'
referenced: 'Beispiele zur Benutzung' referenced: 'Beispiele zur Benutzung'

View File

@ -120,10 +120,10 @@ sources:
key: 'Key' key: 'Key'
keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary' keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary'
images: 'Images' images: 'Images'
spoiler: 'Spoiler'
otherVersions: 'In other languages' otherVersions: 'In other languages'
referenced: 'Examples of use' referenced: 'Examples of use'
nouns: nouns:
header: 'Dictionary' header: 'Dictionary'
headerLong: 'Dictionary of neutral nouns' headerLong: 'Dictionary of neutral nouns'

View File

@ -107,6 +107,7 @@ sources:
key: 'Ŝlosilo' key: 'Ŝlosilo'
keyInfo: 'Identigilo por ligi fontojn inter lingvoversiojn kaj ligado al la vortaro' keyInfo: 'Identigilo por ligi fontojn inter lingvoversiojn kaj ligado al la vortaro'
images: 'Bildoj' images: 'Bildoj'
spoiler: 'Spoiler' # TODO
otherVersions: 'En aliaj lingvoj' otherVersions: 'En aliaj lingvoj'
referenced: 'Ekzemploj de uzo' referenced: 'Ekzemploj de uzo'

View File

@ -118,6 +118,7 @@ sources:
key: 'Clave' key: 'Clave'
keyInfo: 'Identificador para vincular fuentes entre versiones en varios idiomas y vincularlas con el diccionario' keyInfo: 'Identificador para vincular fuentes entre versiones en varios idiomas y vincularlas con el diccionario'
images: 'Imágenes' images: 'Imágenes'
spoiler: 'Spoiler' # TODO
otherVersions: 'En otros idiomas' otherVersions: 'En otros idiomas'
referenced: 'Ejemplos del uso' referenced: 'Ejemplos del uso'
@ -348,12 +349,12 @@ faq:
- > - >
No. No.
- > - >
Gestionar la lista de banderas y etiquetas es una tarea que toma demasiado tiempo para nuestro equipo. Gestionar la lista de banderas y etiquetas es una tarea que toma demasiado tiempo para nuestro equipo.
De igual manera, es desafiante en términos de filtrar trolls y vándalxs, de identidades válidas y en buena fe. De igual manera, es desafiante en términos de filtrar trolls y vándalxs, de identidades válidas y en buena fe.
Nosotrxs no queremos ser la policía de la identidad. Tampoco queremos pasar todo nuestro tiempo gestionando las banderas. Nosotrxs no queremos ser la policía de la identidad. Tampoco queremos pasar todo nuestro tiempo gestionando las banderas.
Es un proyecto acerca de lenguaje y pronombres, después de todo, no de banderas. Son sólo un bonus. Es un proyecto acerca de lenguaje y pronombres, después de todo, no de banderas. Son sólo un bonus.
- > - >
Hicimos nuestro mejor esfuerzo para seleccionar una lista de banderas que sean populares y, a nuestro mejor conocimiento, generalmente aceptadas. Hicimos nuestro mejor esfuerzo para seleccionar una lista de banderas que sean populares y, a nuestro mejor conocimiento, generalmente aceptadas.
No planeamos aumentar o reducir esta lista. No planeamos aumentar o reducir esta lista.
- > - >
Estamos conscientes de que algunas banderas pueden no ser del agrado de algunxs Estamos conscientes de que algunas banderas pueden no ser del agrado de algunxs
@ -361,7 +362,7 @@ faq:
debido a múltiples definiciones que causan confusión, debido a múltiples definiciones que causan confusión,
o incluso debido a aspectos de la vida de un personaje mítico). o incluso debido a aspectos de la vida de un personaje mítico).
Nosotrxs somos queer y trans, nos importan nuestrxs hermanxs trans. Nosotrxs somos queer y trans, nos importan nuestrxs hermanxs trans.
Desafortunadamente, es realmente difícil tomar tales decisiones Desafortunadamente, es realmente difícil tomar tales decisiones
cuando recibimos mensajes de personas trans pidiéndonos que añadamos una bandera con la que se identifican de forma honesta, cuando recibimos mensajes de personas trans pidiéndonos que añadamos una bandera con la que se identifican de forma honesta,
e igual de otras personas trans pidiéndonos que la removamos debido a que de alguna manera, lastima a las personas trans. e igual de otras personas trans pidiéndonos que la removamos debido a que de alguna manera, lastima a las personas trans.
La historia de cada etiqueta no es tan clara, no hay una autoridad académica para investigar al respecto. La historia de cada etiqueta no es tan clara, no hay una autoridad académica para investigar al respecto.

View File

@ -116,6 +116,7 @@ sources:
key: 'Key' key: 'Key'
keyInfo: 'Identifiant pour relier les sources entre les versions linguistiques et établir des liens avec le dictionnaire' keyInfo: 'Identifiant pour relier les sources entre les versions linguistiques et établir des liens avec le dictionnaire'
images: 'Images' images: 'Images'
spoiler: 'Spoiler' # TODO
otherVersions: 'Dans dautres langues' otherVersions: 'Dans dautres langues'
referenced: 'Exemples dusage' referenced: 'Exemples dusage'

View File

@ -116,6 +116,7 @@ sources:
key: 'Chave' key: 'Chave'
keyInfo: 'Identificador para conectar fontes entre versões e conectar com dicionário' keyInfo: 'Identificador para conectar fontes entre versões e conectar com dicionário'
images: 'Imagens' images: 'Imagens'
spoiler: 'Spoiler' # TODO
otherVersions: 'Em outros idiomas' otherVersions: 'Em outros idiomas'
referenced: 'Exemplos de uso' referenced: 'Exemplos de uso'

View File

@ -119,6 +119,7 @@ sources:
key: 'Key' key: 'Key'
keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary' keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary'
images: 'Images' images: 'Images'
spoiler: 'Spoiler' # TODO
otherVersions: 'In other languages' otherVersions: 'In other languages'
referenced: 'Examples of use' referenced: 'Examples of use'

View File

@ -116,6 +116,7 @@ sources:
key: 'キー' key: 'キー'
keyInfo: '言語間、及び辞書とリンクするのための識別子' keyInfo: '言語間、及び辞書とリンクするのための識別子'
images: '画像' images: '画像'
spoiler: 'Spoiler' # TODO
otherVersions: '他の言語で' otherVersions: '他の言語で'
referenced: '使用例' referenced: '使用例'

View File

@ -118,6 +118,7 @@ sources:
key: '키' key: '키'
keyInfo: '언어 버전 간 소스 연결 및 사전 연결 식별자' keyInfo: '언어 버전 간 소스 연결 및 사전 연결 식별자'
images: '이미지' images: '이미지'
spoiler: 'Spoiler' # TODO
otherVersions: '다른 언어' otherVersions: '다른 언어'
referenced: '사용 예' referenced: '사용 예'

View File

@ -118,6 +118,7 @@ sources:
key: 'Yave' key: 'Yave'
keyInfo: 'Identifiador para atar fuentes entre versiones en varias linguas i atarlas kon el diksionaryo' keyInfo: 'Identifiador para atar fuentes entre versiones en varias linguas i atarlas kon el diksionaryo'
images: 'Imajes' images: 'Imajes'
spoiler: 'Spoiler' # TODO
otherVersions: 'En otras linguas' otherVersions: 'En otras linguas'
referenced: 'Enshemplos del uzo' referenced: 'Enshemplos del uzo'

View File

@ -117,6 +117,7 @@ sources:
key: 'Sleutel' key: 'Sleutel'
keyInfo: 'Identifier om bronnen te linken tussen verschillende vertalingen van de website en om met het woordenboek te linken' keyInfo: 'Identifier om bronnen te linken tussen verschillende vertalingen van de website en om met het woordenboek te linken'
images: 'Afbeeldingen' images: 'Afbeeldingen'
spoiler: 'Spoiler' # TODO
otherVersions: 'In andere talen' otherVersions: 'In andere talen'
referenced: 'Gebruiksvoorbeelden' referenced: 'Gebruiksvoorbeelden'

View File

@ -117,6 +117,7 @@ sources:
key: 'Nøkkel' key: 'Nøkkel'
keyInfo: 'identifiserer for å linke kilder mellom språk versjoner og linker med ordboken' keyInfo: 'identifiserer for å linke kilder mellom språk versjoner og linker med ordboken'
images: 'Bilder' images: 'Bilder'
spoiler: 'Spoiler' # TODO
otherVersions: 'På andre språk' otherVersions: 'På andre språk'
referenced: 'Eksempler på bruk i setninger' referenced: 'Eksempler på bruk i setninger'

View File

@ -132,6 +132,7 @@ sources:
key: 'Klucz' key: 'Klucz'
keyInfo: 'Identyfikator do łączenia tekstów między wersjami językowymi i łączenia ze słownikiem' keyInfo: 'Identyfikator do łączenia tekstów między wersjami językowymi i łączenia ze słownikiem'
images: 'Obrazki' images: 'Obrazki'
spoiler: 'Spoiler'
otherVersions: 'W innych językach' otherVersions: 'W innych językach'
referenced: 'Przykłady użycia' referenced: 'Przykłady użycia'

View File

@ -117,6 +117,7 @@ sources:
key: 'Chave' key: 'Chave'
keyInfo: 'Identificador para conectar fontes entre versões e conectar com dicionário' keyInfo: 'Identificador para conectar fontes entre versões e conectar com dicionário'
images: 'Imagens' images: 'Imagens'
spoiler: 'Spoiler' # TODO
otherVersions: 'Em outros idiomas' otherVersions: 'Em outros idiomas'
referenced: 'Exemplos de uso' referenced: 'Exemplos de uso'

View File

@ -108,6 +108,7 @@ sources:
key: 'Ключ' key: 'Ключ'
keyInfo: 'Идентификатор, используемый для связки источников из разных языковых версий и связки со словарём' keyInfo: 'Идентификатор, используемый для связки источников из разных языковых версий и связки со словарём'
images: 'Изображения' images: 'Изображения'
spoiler: 'Spoiler' # TODO
otherVersions: 'На других языках' otherVersions: 'На других языках'
referenced: 'Примеры употребления' referenced: 'Примеры употребления'

View File

@ -120,6 +120,7 @@ sources:
key: 'Nyckel' key: 'Nyckel'
keyInfo: 'Identifierare för att länka källor mellan språkversioner och länka till ordbok' keyInfo: 'Identifierare för att länka källor mellan språkversioner och länka till ordbok'
images: 'Bilder' images: 'Bilder'
spoiler: 'Spoiler' # TODO
otherVersions: 'På andra språk' otherVersions: 'På andra språk'
referenced: 'Exempel på användning' referenced: 'Exempel på användning'

View File

@ -116,6 +116,7 @@ sources:
key: 'Key' key: 'Key'
keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary' keyInfo: 'Identifier for linking sources between language versions and linking with the dictionary'
images: 'Images' images: 'Images'
spoiler: 'Spoiler' # TODO
otherVersions: 'In other languages' otherVersions: 'In other languages'
referenced: 'Examples of use' referenced: 'Examples of use'

View File

@ -92,7 +92,7 @@ sources:
Series: '電視劇' Series: '電視劇'
Song: '音樂' Song: '音樂'
Poetry: '詩歌' Poetry: '詩歌'
Comics: '漫畫' Comics: '漫畫'
Game: '遊戲' Game: '遊戲'
Other: '其他' Other: '其他'
submit: submit:
@ -114,6 +114,7 @@ sources:
key: '键' key: '键'
keyInfo: '用于在语言版本之间链接源并与字典链接的标识符' keyInfo: '用于在语言版本之间链接源并与字典链接的标识符'
images: '意象' images: '意象'
spoiler: 'Spoiler' # TODO
otherVersions: '在其他語言' otherVersions: '在其他語言'
referenced: '榜樣' referenced: '榜樣'

View File

@ -0,0 +1,6 @@
-- Up
ALTER TABLE sources ADD COLUMN spoiler INTEGER NOT NULL DEFAULT 0;
-- Down

View File

@ -89,12 +89,12 @@ router.post('/sources/submit', handleErrorAsync(async (req, res) => {
const id = ulid(); const id = ulid();
await req.db.get(SQL` await req.db.get(SQL`
INSERT INTO sources (id, locale, pronouns, type, author, title, extra, year, fragments, comment, link, key, images, submitter_id, base_id) INSERT INTO sources (id, locale, pronouns, type, author, title, extra, year, fragments, comment, link, key, images, spoiler, submitter_id, base_id)
VALUES ( VALUES (
${id}, ${global.config.locale}, ${req.body.pronouns.join(';')}, ${id}, ${global.config.locale}, ${req.body.pronouns.join(';')},
${req.body.type}, ${req.body.author}, ${req.body.title}, ${req.body.extra}, ${req.body.year}, ${req.body.type}, ${req.body.author}, ${req.body.title}, ${req.body.extra}, ${req.body.year},
${req.body.fragments.join('@').replace(/\n/g, '|')}, ${req.body.comment}, ${req.body.link}, ${req.body.fragments.join('@').replace(/\n/g, '|')}, ${req.body.comment}, ${req.body.link},
${clearKey(req.body.key)}, ${req.body.images || null}, ${clearKey(req.body.key)}, ${req.body.images || null}, ${req.body.spoiler ? 1 : 0},
${req.user ? req.user.id : null}, ${req.body.base} ${req.user ? req.user.id : null}, ${req.body.base}
) )
`); `);

View File

@ -101,7 +101,7 @@ function clone(mainObject) {
export class Source { export class Source {
constructor ({ constructor ({
id, pronouns, type, author, title, extra, year, fragments = '', id, pronouns, type, author, title, extra, year, fragments = '',
comment = null, link = null, comment = null, link = null, spoiler = false,
submitter = null, approved, base_id = null, submitter = null, approved, base_id = null,
key = null, versions = [], locale = config.locale, key = null, versions = [], locale = config.locale,
images = null, images = null,
@ -118,6 +118,7 @@ export class Source {
: []; : [];
this.comment = comment; this.comment = comment;
this.link = link; this.link = link;
this.spoiler = !!spoiler;
this.submitter = submitter; this.submitter = submitter;
this.approved = approved; this.approved = approved;
this.base_id = base_id; this.base_id = base_id;