Compare commits

...

3 Commits

Author SHA1 Message Date
David Ascanio f60b2960c5 show author attribution for Bible Studies and Conferences
- Display author name (Dr. José Benjamín Pérez Matos / Dr. William Soto Santiago)
  in the list panel and publication detail for each respective section
- History entries now show the author inline and pass it through to the detail view
- Fixed internal collection IDs (bible-studies-ts, conferences-ts) showing as raw
  strings in history; they now resolve to proper translated labels via i18n
- Fixed English nav labels that incorrectly included "Typesense" in the display name
- Added changelog entry for v0.8
2026-06-05 01:10:01 -03:00
David Ascanio 69030d2001 link to Carpa 2026-06-05 00:32:12 -03:00
David Ascanio 1409763544 total items entrelineas 2026-06-05 00:22:31 -03:00
9 changed files with 78 additions and 13 deletions

View File

@ -67,6 +67,7 @@ const props = defineProps<{
selectedMatchingHits?: TypesenseParagraphHit[] | null
accentColor?: 'green' | 'blue'
noTrackVisit?: boolean
author?: string
}>()
const emits = defineEmits(['close'])
@ -885,6 +886,10 @@ const items = computed(() => {
<UIcon name="ph:file-dashed" class="size-4 text-carpared" />
{{ $t('search.draft') }}
</p>
<p v-if="author" class="text-sm text-highlighted flex items-center gap-1.5 shrink-0">
<UIcon name="ph:user-circle" :class="['size-4', iconColor]" />
<span class="italic">{{ author }}</span>
</p>
<p v-if="safeDate()" class="text-sm text-highlighted flex items-center gap-1.5 shrink-0">
<UIcon name="ph:calendar" :class="['size-4', iconColor]" />
{{ safeDate() }}

View File

@ -14,10 +14,12 @@ interface Props {
accentColor: 'green' | 'blue'
emptyDetailText: string
showDraft?: boolean
author?: string
}
const props = withDefaults(defineProps<Props>(), {
showDraft: false
showDraft: false,
author: ''
})
const QUERY_BY = 'text'
@ -595,6 +597,14 @@ function metaLocation(meta: DocMeta | undefined): string {
</template>
</UDashboardNavbar>
<div
v-if="author"
class="px-4 sm:px-6 py-2 border-b border-default flex items-center gap-1.5 text-xs text-muted"
>
<UIcon name="ph:user-circle" :class="['size-3.5 shrink-0', colors.icon]" />
<span class="italic">{{ author }}</span>
</div>
<div class="px-4 sm:px-6 py-3 border-b border-default flex items-center gap-2" id="inputField">
<UInput
v-model="query"
@ -740,6 +750,7 @@ function metaLocation(meta: DocMeta | undefined): string {
:selected-hit="selectedHit"
:selected-matching-hits="selectedMatchingHits"
:accent-color="accentColor"
:author="author"
@close="isPanelOpen = false"
/>
<div v-else-if="!isMobile" class="hidden lg:flex flex-1 items-center justify-center">
@ -764,6 +775,7 @@ function metaLocation(meta: DocMeta | undefined): string {
:selected-hit="selectedHit"
:selected-matching-hits="selectedMatchingHits"
:accent-color="accentColor"
:author="author"
@close="isPanelOpen = false"
/>
</template>

View File

@ -22,6 +22,9 @@ const { total: favTotal } = storeToRefs(favorites)
const history = useHistoryStore()
const { total: histTotal } = storeToRefs(history)
const toCarpa = () => {
window.location.href = `https://carpa.com/${$i18n.locale.value}`;
}
const links = computed(() => {
const links = [
@ -118,9 +121,9 @@ const links = computed(() => {
class="bg-elevated/25 bg-gradient-to-tr from-blue-100 to-white" :ui="{ footer: 'lg:border-t lg:border-default' }">
<template #header="{ collapsed }">
<div v-if="!collapsed" class="mt-2 flex justify-center">
<img src="/logo.svg" class="w-full" alt="Buscador - La Gran Carpa Catedral" />
<img v-on:click="toCarpa" src="/logo.svg" class="w-full cursor-pointer" alt="Buscador - La Gran Carpa Catedral" />
</div>
<img v-if="collapsed" src="/logo_round.svg" class="w-full" alt="Buscador - La Gran Carpa Catedral" />
<img v-if="collapsed" v-on:click="toCarpa" src="/logo_round.svg" class="w-full cursor-pointer" alt="Buscador - La Gran Carpa Catedral" />
</template>
<template #default="{ collapsed }">

View File

@ -8,5 +8,6 @@
nav-title-key="nav.conferences_ts"
accent-color="blue"
:empty-detail-text="$t('ui.empty_conferences')"
author="Dr. William Soto Santiago"
/>
</template>

View File

@ -285,6 +285,11 @@ function highlightedFor(hit: TypesenseHit, field: string): string | null {
<template #leading>
<UDashboardSidebarCollapse />
</template>
<template #trailing>
<UBadge :label="total" variant="subtle" :ui="{
base: 'total-results'
}" />
</template>
</UDashboardNavbar>
<!-- Banner: se muestra cuando NO hay clave de desarrollador -->

View File

@ -9,5 +9,6 @@
accent-color="green"
:empty-detail-text="$t('ui.empty_bible_studies')"
:show-draft="true"
author="Dr. José Benjamín Pérez Matos"
/>
</template>

View File

@ -30,14 +30,28 @@ const toast = useToast()
const ENTRELINEAS_COLLECTION = 'entrelineas'
const COLLECTION_LABELS: Record<string, string> = {
activities: 'Actividades',
conferences: 'Conferencias',
entrelineas: 'Entre Líneas'
}
const { t } = useI18n()
function labelFor(c: string): string {
return COLLECTION_LABELS[c] || c.charAt(0).toUpperCase() + c.slice(1)
const labels: Record<string, string> = {
activities: t('nav.bible_studies_ts'),
'bible-studies-ts': t('nav.bible_studies_ts'),
conferences: t('nav.conferences_ts'),
'conferences-ts': t('nav.conferences_ts'),
entrelineas: t('nav.between_the_lines'),
}
return labels[c] || c.charAt(0).toUpperCase() + c.slice(1)
}
const COLLECTION_AUTHORS: Record<string, string> = {
'bible-studies-ts': 'Dr. José Benjamín Pérez Matos',
activities: 'Dr. José Benjamín Pérez Matos',
'conferences-ts': 'Dr. William Soto Santiago',
conferences: 'Dr. William Soto Santiago',
}
function authorFor(c: string): string {
return COLLECTION_AUTHORS[c] || ''
}
// Filtros: pestaña por colección o "todos".
@ -57,9 +71,9 @@ const tabs = computed(() => {
items.push({
value: c,
label: `${labelFor(c)} (${count})`,
icon: c === 'activities'
icon: (c === 'activities' || c === 'bible-studies-ts')
? 'i-lucide-calendar-days'
: c === 'conferences'
: (c === 'conferences' || c === 'conferences-ts')
? 'i-lucide-mic'
: c === 'entrelineas'
? 'i-lucide-book-open'
@ -92,6 +106,7 @@ const selected = ref<HistoryItem | null>(null)
const selectedHit = computed<SearchHit | null>(() => selected.value?.hit ?? null)
const selectedCollection = computed<string | undefined>(() => selected.value?.collection)
const selectedAuthor = computed(() => authorFor(selectedCollection.value ?? ''))
const isEntrelinea = computed(() => selectedCollection.value === ENTRELINEAS_COLLECTION)
@ -552,6 +567,13 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
<span v-if="hasDate(it.hit)">{{ safeDate(it.hit) }}</span>
<USeparator v-if="formatLocation(it.hit)" orientation="vertical" class="h-3 hidden sm:block" />
<span class="truncate">{{ formatLocation(it.hit) }}</span>
<template v-if="authorFor(it.collection)">
<USeparator orientation="vertical" class="h-3 hidden sm:block" />
<span class="inline-flex items-center gap-1 italic truncate">
<UIcon name="ph:user-circle" class="size-3 shrink-0" />
{{ authorFor(it.collection) }}
</span>
</template>
</p>
</div>
</div>
@ -574,6 +596,7 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
:paragraphs="detailParagraphs"
:paragraphs-loading="detailParagraphsLoading"
:collection="selectedCollection!"
:author="selectedAuthor"
no-track-visit
@close="selected = null"
/>
@ -603,6 +626,7 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
:paragraphs="detailParagraphs"
:paragraphs-loading="detailParagraphsLoading"
:collection="selectedCollection!"
:author="selectedAuthor"
no-track-visit
@close="selected = null"
/>

View File

@ -19,6 +19,20 @@ export interface Release {
}
export const releases: Release[] = [
{
version: '0.8',
date: '5 de junio, 2026',
title: 'Autoría visible en Estudios Bíblicos, Conferencias e Historial',
changes: [
{ type: 'nuevo', text: 'Nombre del autor visible en el panel lateral de Estudios Bíblicos (Dr. José Benjamín Pérez Matos)' },
{ type: 'nuevo', text: 'Nombre del autor visible en el panel lateral de Conferencias (Dr. William Soto Santiago)' },
{ type: 'nuevo', text: 'Nombre del autor visible en el panel de detalle del documento para ambas secciones' },
{ type: 'nuevo', text: 'El historial muestra el nombre del autor en cada entrada de Estudios Bíblicos y Conferencias' },
{ type: 'mejora', text: 'El panel de detalle abierto desde el historial también muestra el autor correspondiente' },
{ type: 'fix', text: 'Las colecciones en el historial ahora muestran "Estudios Bíblicos" y "Conferencias" en lugar de los identificadores internos' },
{ type: 'fix', text: 'Corrección de etiquetas en inglés para las pestañas del historial' }
]
},
{
version: '0.7',
date: '31 de mayo, 2026 11:50PM',

View File

@ -3,8 +3,8 @@
"nav": {
"home": "Home",
"bible_studies": "Bible Studies",
"bible_studies_ts": "Bible Studies Typesense",
"conferences_ts": "Conferences Typesense",
"bible_studies_ts": "Bible Studies",
"conferences_ts": "Conferences",
"conferences": "Conferences",
"between_the_lines": "Between the Lines",
"my_list": "My List",