Timeline de Mastodon en tu sitio web

2024-06-17

Si estás buscando la manera de insertar un timeline de tus toots de Mastodon en tu sitio web, existe este proyecto que te va a permitir hacerlo con tan sólo un archivo CSS y JS.

Instalación en Hugo

Este articulo esta basado en el tema Congo para Hugo pero las instrucciones para instalarlo en otro tema deben de ser parecidas.

Descarga la carpeta /src desde el repositorio del proyecto y copia los archivos mastodon-timeline.js y mastodon-timeline.css en las carpetas assets/js y css dentro de /static de tu proyecto.

~/Documentos/proyectos/ebdl > tree static
static
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── assets
│   └── js
│       ├── mastodon-timeline.js
│       ├── mastodon-timeline.min.js
├── css
│   ├── mastodon-timeline.css
│   └── mastodon-timeline.min.css
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
└── site.webmanifest

4 directories, 11 files

Crea otra carpeta dentro de layouts, por ejemplo toots, y copia dentro el fichero index.html (ubicado dentro de /src) y cambiale el nombre a toots.html

~/Documentos/proyectos/ebdl > tree layouts
layouts
├── partials
│   ├── home
│   │   └── custom.html
│   └── analytics.html
└── toots
    └── toots.html

4 directories, 3 files

He personalizado el fichero index.html para que se adapte a mi tema, observa que llamo a la hoja css <link rel="stylesheet" href="/css/mastodon-timeline.css"/> al principio y al script <script src="/assets/js/mastodon-timeline.js"></script> al final de la etiqueta /body

{{ define "main" }}
  <link rel="stylesheet" href="/css/mastodon-timeline.css" />
  <article class="max-w-full">
    <header>
      {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
        {{ partial "breadcrumbs.html" . }}
      {{ end }}
      <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
        {{ .Title | emojify }}
      </h1>
    </header>
    <section class="max-w-full mt-6 prose dark:prose-invert">
      {{ .Content | emojify }}
    </section>
    <style>
      html {
        height: 100%;
      }

      body {
        height: 100%;
        background: lightslategray;
        font-size: 16px;
        font-family: Arial, Helvetica, sans-serif;
      }

      .dummy-wrapper {
        width: 100%;
        max-width: 46rem;
        height: calc(100% - 4rem);
        margin: 2rem auto;
      }
    </style>
  </head>

  <body>
    <div class="dummy-wrapper">
      <div class="mt-container">
        <div id="mt-body" class="mt-body" role="feed">
          <div class="loading-spinner"></div>
        </div>
      </div>
    </div>

    <script src="/assets/js/mastodon-timeline.js"></script>
  </body>

    <footer class="pt-8">
      {{ partial "sharing-links.html" . }}
    </footer>
  </article>
{{ end }}

Configuración

La configuración se hace editando el archivo mastodon-timeline.js

instance_url:   'Your Mastodon instance (not including the last `/` symbol)',
timeline_type:  'local',

Introduce la URL de tu instancia de Mastodon y vuelve a cargar la página. Deberías ver los toots de tu instancia local en tu línea de tiempo.

Si quieres mostrar la línea de tiempo de tu perfil, cambia el valor de timeline_type a profile y establece los valores:

user_id:        'Your user ID number on Mastodon instance',
profile_name:   'Your user name on Mastodon instance (including the `@` symbol at the beginning)',

Si prefieres mostrar una línea de tiempo con un hashtag específico, entonces cambia el valor de timeline_type a hashtag y pon el valor del hashtag:

hashtag_name:   'YourHashtag (not including the `#` symbol)',

Estos son los principales parámetros de configuración para personalizar el timeline pero existen más dentro del fichero mastodon-timeline.js

Añadir a la barra del Menú

Para terminar, si quieres añadir una entrada en el menú de navegación, edita tu fichero de configuración menus.toml, en Congo se encuentra dentro de la carpeta Config -> _default y añade la nueva entrada:

[[main]]
  name = "Toots"
  pageRef = "/toots"
  weight = 30

Título

Para finalizar, crea una nueva carpeta dentro de content y llámala igual que el nombre de pusiste en pageRef de tu fichero de configuración y crea un nuevo fichero _index.md

~/Documentos/proyectos/ebdl > tree content/toots
content/toots
└── _index.md

1 directory, 1 file

Con el contenido que quieres que aparezca antes de mostrar el timeline, por ejemplo

---
title: Toots
---

Espero que te haya gustado, pasa un gran día 🐧


Ingrese la dirección de su instancia