Introduzione delle griglie di immagini nei post

Se hai molte immagini in un post di Discourse, ora puoi farle disporre automaticamente in una bella griglia. Tutto ciò che devi fare è racchiuderle tra i tag [grid] ... [/grid] e le immagini saranno disposte ordinatamente. Questa è una funzionalità principale a partire da questo commit, abilitata su tutte le istanze di Discourse.

Ecco un esempio in azione:

Questa funzionalità è simile ad alcuni componenti del tema (Masonry Image Gallery, Tiles Image Gallery). La differenza principale è che la disposizione delle immagini nella griglia si allineerà sia in alto che in basso dell’elemento. Alcune note tecniche aggiuntive:

  • su mobile, la griglia è predefinita a 2 colonne, su desktop a 3
  • se ci sono esattamente 4 elementi nella griglia, le immagini saranno disposte in 2 colonne
  • è possibile utilizzare anche elementi non immagine (come i video), ma i risultati non saranno perfettamente allineati
  • gli elementi nella griglia sono disposti per garantire che le altezze delle colonne siano il più vicine possibile tra loro, pertanto l’ordine delle immagini non viene sempre mantenuto

Abilitare o disabilitare la griglia può anche essere fatto facendo clic su una piccola icona di attivazione accanto alla prima immagine in un gruppo di immagini nell’anteprima del compositore:

Le immagini utilizzate in questo post provengono da unsplash.com

81 Mi Piace

Molto bello. Adoro questo. Grazie @pmusaraj :slight_smile:

6 Mi Piace

Stiamo già utilizzando la galleria di immagini Masonry; questa nuova funzionalità è compatibile o le griglie esistenti scompariranno?

6 Mi Piace

Ottima domanda. Questa nuova funzionalità principale non è incompatibile con il componente del tema Masonry Image Gallery, ovvero entrambi non possono funzionare contemporaneamente.

Se si desidera migrare i post dall’approccio della galleria Masonry al nuovo approccio principale, è necessario eseguire uno script che aggiorni i contenuti raw dei post da

<div>

![example|690x395](upload://d48GblQ7LzoqPax2TN8xyuWhzyJ.png)
![example2|690x413](upload://usFTgK3JCDlQXDaiIcAy9ZUSyt9.png)

</div>

a

[grid]
![example|690x395](upload://d48GblQ7LzoqPax2TN8xyuWhzyJ.png)
![example2|690x413](upload://usFTgK3JCDlQXDaiIcAy9ZUSyt9.png)
[/grid]

E quindi rifare il “rebake” di quei post.

6 Mi Piace

Bello! Questo è un grande passo avanti, rende le immagini ancora più belle nei Post.

Presumo che questo non influenzi in alcun modo ciò che viene scelto come immagine principale per le miniature?

6 Mi Piace

Corretto, non dovrebbe influire. Credo che la prima immagine trovata nel post venga scelta come miniatura (esclusi avatar, emoji e simili). Inoltre, non riesco a immaginare uno scenario in cui la prima immagine caricata non sia la prima immagine nella griglia (il riordino può avvenire solo per le immagini successive nell’elenco).

6 Mi Piace

Ho un import in cui le immagini sono solo URL a un bucket S3 come:

[grid]

https://urlsite/pic.jpg

https://urlsite/pic.jpg

[/grid]

Ma mostra solo [grid] poi le immagini e poi [/grid].

Immagino che funzioni solo dopo che quegli URL vengono scaricati e trasformati in immagini normali?

7 Mi Piace

Hmm, sì, nell’editor di composizione attualmente funziona solo con gli upload. (Ovvero, incollare un URL a un’immagine e racchiuderlo tra tag [grid] non funziona neanche nell’editor di composizione.)

8 Mi Piace

Fantastico. Meno male che non ho ancora aggiunto quel codice allo script di importazione. :slight_smile:

5 Mi Piace

Questa è un’ottima funzionalità, grazie.

La griglia funzionerà con le pagine pubblicate?

1 Mi Piace

Purtroppo, no, questo non funziona con le pagine pubblicate. Anche funzionalità simili basate su Javascript per i post non funzionano con le pagine pubblicate (lightbox, sondaggi, indice dei contenuti).

3 Mi Piace

Saresti in grado di fornire istruzioni per questo?

1 Mi Piace

Ciao bart :wave:

Questo dovrebbe funzionare. Ovviamente, fai un backup e cerca attentamente eventuali risultati indesiderati nei precedenti post di masonry… :slight_smile:

posts = Post.where('raw LIKE ?', '%<div> data-masonry-gallery>%')

posts.each do |p|
    p.update!(raw: p.raw.gsub(/<div> data-masonry-gallery>(.*?)<\/div>/m, '[grid]\1[/grid]'))
    p.rebake!
end
7 Mi Piace

Grazie, sembra ottimo :slightly_smiling_face:

Utilizzo anche il componente Masonry Image Gallery

Screenshot 2023-06-22 at 10.38.14

Con l’impostazione auto abilitata… Questo non contiene il <div> data-masonry-gallery</div> in raw, quindi penso che lo script non funzionerà. Ma in questo caso non sono in conflitto tra loro.


Ci sono piani per rendere le griglie automatiche? Se ciò accadesse, potrei semplicemente rifare il rebake dei post e mantenere il layout della griglia. Fino ad allora, penso di poter nascondere il pulsante della griglia e utilizzare il componente del tema in sicurezza.

4 Mi Piace

Qualcuno in CDCK ha influenza sugli sviluppatori di Chrome? Supporto CSS Masonry per Grid?

Masonry dovrebbe già essere una cosa CSS. È uno dei pochi layout che ti permette di rispettare diversi rapporti d’aspetto di collezioni di immagini (o qualsiasi contenuto di elementi) in modo gradevole.

È uno spreco e inutile avere questo in esecuzione come javascript ovunque…

(e come sapete è già possibile su Firefox (dietro una flag) ed è ora nella Technical Preview per Safari: "masonry" | Can I use... Support tables for HTML5, CSS3, etc)

tra l’altro, tutti, per favore :star: questo problema:

https://bugs.chromium.org/p/chromium/issues/detail?id=1076027&q=masonry&can=2

:drum: Supporto CSS Masonry ora per Chrome ed Edge! :drum:

4 Mi Piace

Non che io sappia.

Sono entusiasta del supporto di Safari per masonry, hanno una migliore esperienza nel portare le funzionalità da bozza –> sperimentale –> completamente supportata. Il supporto di Firefox per masonry è dietro una flag da oltre 2 anni. Il supporto di Safari sarà probabilmente il principale motore affinché Chrome tenga il passo.

Fatto!

4 Mi Piace

Sì, ma non senza tag [grid]. Convertire automaticamente le immagini in una griglia senza tag violerebbe le specifiche di CommonMark, preferiamo di gran lunga evitarlo. (Nella mia prima bozza interna di questa funzionalità, ho iniziato con una griglia automatica).

Invece, quello che ho pensato come prossimo passo qui è che potremmo aggiungere automaticamente i wrapper [grid] ai caricamenti di più immagini, probabilmente 3 o più caricamenti. Questo sarebbe particolarmente utile per i caricamenti da dispositivi mobili, aggiungere tag manualmente da dispositivi mobili è goffo e ci sono buone probabilità che se stai caricando 3 o più immagini contemporaneamente dal tuo telefono, si tratta di foto e candidati ragionevoli per un layout a griglia.

Non abbiamo ancora piani su quando lo aggiungeremo, ma è certamente qualcosa che vorremmo fare.

9 Mi Piace

Dovrebbe comunque essere possibile generare l’HTML statico dal JavaScript e pubblicare il DOM “cotto” per abilitare una serie di funzionalità utili come questa griglia e il TOC

1 Mi Piace

L’HTML renderizzato da solo non è sufficiente. La griglia, il TOC e funzionalità simili necessitano anche del JS che interagisce con l’HTML per creare tale funzionalità. E quel JS risiede nell’app Ember, non può essere facilmente estratto per le pagine non pubblicate da Ember.

2 Mi Piace

Ho appena giocato con questo ieri e mi è stato consigliato di condividere qui i miei feedback e pensieri su questo thread…

  • Mi piace che sia “automatico” nel senso che imposta una griglia da solo.
  • Potrebbe essere una bella funzionalità aggiuntiva ordinare le immagini senza dover copiare/incollare le immagini nella lista, magari aggiungendo semplicemente dei numeri all’inizio di ogni immagine?
  • Mi piace che si possa facilmente disattivare la griglia nell’anteprima, ma per farla riapparire è necessario reinserire il codice, sembra un’area per un’esperienza migliorata avere l’icona della griglia che appare quando sono state aggiunte più di un’immagine per poterla attivare/disattivare secondo necessità.
  • Una possibile funzionalità futura finale sarebbe la possibilità di scegliere un’immagine particolare da “evidenziare” o mettere in risalto all’interno della griglia in modo che appaia più grande delle altre o si distingua in qualche modo.

Tutto sommato, comunque, un’ottima nuova opzione per aggiungere più immagini senza che le immagini prendano il sopravvento su un post :slight_smile:

5 Mi Piace