Guida
La struttura dei contenuti
├─ assets Contiene tutti i file statici, gli scess ed i file javascript.
├─ img * Immagini di base utilizzate nel tema.
├─ js * Tutti i javascript che non vengono inglobati tramite webpack ed il file app.js di configurazione.
├─ scss * File scss, divisi in cartelle per funzionalità, da modificare per editare lo stile del tema.
└─ webfonts * Fonts usati nel tema.
├─ data
└─ layout Contiene i file che possono essere usati come base per le pagine.
├─ default * Template applicato di default a tutte le pagine che vengono create nella cartella pages.
├─ styleguide * Template applicato alle pagine usate come styleguide.
└─ pages Contiene tutte le pagine del tema e quelle della styleguide.
├─ index * Pagina di apertura del tema, da aggiornare manualmente, per visualizzare la lista contenuti del tema.
├─ styleguide * Tutte le pagine della Styleguide.
├─ layout * Tutte le pagine esempio
└─ partials Contiene tutti gli snippet html da includere nelle pagine.
La cartella src /
contiene tutti i file sorgente da editare e che produrranno,
una volta compilato il bundle, una cartella dist /
con il tema pronto per la produzione.
Per avviare la compilazione del tema, dopo l'installazione, basta eseguire il comando:
yarn start
Durante lo sviluppo, Gulp aggiorna continuamente la cartella dist /
con nuove versioni dei file, visibili all'indirizzo:
http://localhost:8000/
Per compilare una build di produzione, basta eseguire il comando:
yarn build
Le caratteristiche del Tema
Questo tema utilizza il sistema di compilazione Gulp per automatizzare il processo di compilazione di Sass, elaborazione di JavaScript, copia di file e altro.
In particolare:
-
Copia delle risorse
Gulp copierà qualsiasi cosa sia contenuta nella cartellasrc/assets
così com'è nella cartellaassets
del progetto finale. I file Sass, quelli JavaScript e le immagini non fanno parte di questo processo di copia, in quanto soggetti alla compilazione. -
Compilazione delle Pagine
La cartella
src/
contiene tre cartelle usate per la generazione delle pagine HTML:pages/
,layouts/
, epartials/
. Il compilatore chiamato Panini viene utilizzato per elaborare le varie pagine del progetto, inserendole in un modello di default e inserendo eventuali snippet di codice HTML. Tutto ciò viene reso possibile dal linguaggio di templating Handlebars.
Per approfondire, Panini ha una sua pagina dedicata. -
Compilazione dei file Sass
I file Scss vengono compilati in CSS mediante Libsass (via node-sass). Il file
src/assets/scss/app.scss
importa tutti i moduli node installati, come ad esempio Foundation and Motion UI. Tutti i file Sass aggiunti dovranno essere richiamati in questo file, per essere compilati.Il CSS prodotto è un normale CSS. Viene anche creata una mappa sorgente, che può essere letta dagli strumenti per sviluppatori (come ad esempio Chrome Web Inspector).
Quando si compila per la produzione, il CSS viene anche compresso con clean-css, e minimizzato con UnCSS. UnCSS esegue la scansione dell'HTML delle pagine e rimuove le classi non utilizzate.
-
Compilazione del JavaScript
I file JavaScript vengono compilati tramite Babel (con il plugin es2015).
Il file principale è in
src/assets/js/app.js
, e importa Foundation, jQuery, whatInput, Highlight, lo script custom Toc e FontAwesome. Qualsiasi altro javascript si voglia includere nel pacchetto va richiamato in questo file, dopo aver inserito il file nella cartella js, oppure installato il modulo con node o yarn.Nella compilazione viene creata una mappa che esegue la mappatura ai file originali. Per impostazione predefinita, il file
app.js
in bundle non è compresso. Durante la creazione per la produzione, il file viene eseguito tramite UglifyJS per la compressione. L'intero processo di raggruppamento è gestito da Webpack, che gestisce tutte le risorse e le dipendenze e le compila in un unico file.Se non hai dimestichezza con import o module bundling, puoi approfondire qui:
-
Compressione delle immagini
Di default tutte le immagini vengono copiate così come sono dalla cartella
assets/img
nella cartelladist
. Durante la compilazione per la produzione, le immagini vengono eseguite tramite gulp-imagemin per la compressione. Il plugin supporta file JPEG, PNG, SVG e GIF. -
BrowserSync
Il pacchetto tema crea un BrowserSync server, che si apre su
http://localhost:8000
. Da questo URL è possibile vedere tutte le pagine compilate. Mentre il server è in esecuzione, ogni volta che salvi un file, tutte le pagine aperte si aggiorneranno automaticamente, permettendoti di vedere le modifiche in tempo reale mentre lavori.
Approfondimento: SCSS
La cartella scss /
è la cartella dove si trovano tutti i file scss da elaborare per modificare lo stile del tema.
Troviamo la cartella components /
, che ospita i file scss relativi ai componenti, suddivisi per funzionalità, come ad esempio font-awesome, o ancora per modello di base, ovvero se sono stati realizzati ad hoc per Unibo
oppure customizzati, sovrascrivendo i file di Zurb Foundation.
La cartella global /
, invece, contiene tutti i file scss che sono ritenuti di utilità generale.
Nella cartella styleguide /
, troviamo gli stili che vengono applicati nei template della guida. Questi stili vengono applicati di default nelle pagine della guida, ma possiamo usarne
le caratteristiche anche nelle altre pagine del nostro tema, assegnando la classe styleguide
al contenuto al quale vogliamo applicar lo stile della guida.
Infine abbiamo il file _settings.scss
nel quale poter modificare tutte le impostazioni generali del nostro css, dalle variabili colore, ai font,
al gutter delle griglie e ultimo, ma non meno importante, il file app.scss
.
Quest'ultimo è fondamentale perché è il file che viene letto per la compilazione del css compresso. Ogni qual volta creiamo un nuovo componente dobbiamo includerlo in questo
file, includendone il percorso corretto.
Se includiamo nel nostro tema un nuovo pacchetto, installandolo tramite npm, yarn o webpack, dobbiamo includere il relativo modulo nel file app.scss
in questo modo:
@import 'nome-del-modulo';
Gestione dei Layouts
I layout attualmente creati sono due:
-
default.html
Questo layout si applica automaticamente a tutte le pagine create nella cartella
pages /
-
styleguide.html
Questo layout serve per le pagine che andremo a creare nella cartella
styleguide /
. Per poter usare questo template è necessario aggiungere il codice:--- layout: styleguide title: Nome della pagina che vogliamo creare ---
nome-layout.html
e richiamandone il titolo in testa alla pagina con questo markdown:--- layout: nome-layout title: Nome della pagina che vogliamo creare ---
Inoltre, mentre nel layout default.html il contenuto della pagina viene sostituito all'interno del tag body, nel layout styleguide.html
abbiamo due colonne preimpostate. Il markup che dovremo scrivere nelle pagine sarà solo quello relativo al contenuto della pagina stessa, in quanto la colonna di sinistra,
con l'indice dei contenuti, viene generata automaticamente leggendo tutti gli h3
con un qualsiasi id inseriti nel contenuto della pagina.
Creazione delle Pagine
Qualsiasi file .html
venga creato all'interno della cartella pages /
verrà compilato come una pagina.
In ogni pagina è necessario inserire solo il contenuto del tag body
che vogliamo creare, perché il markup restante è preimpostato nel layout di default.
Le pagine nella cartella styleguide /
devono avere come intestazione il markdown che indica il template da applicare
---
layout: styleguide
title: Nome della pagina che vogliamo creare
---
e poi il markup che si vuole rappresentare.
La pagina index.html
va modificata solo quanto viene aggiunta una nuova pagina, inserendone il rispettivo link nel markup.
Gestione dei Partials
I partials sono degli snippet di codice .html
da inglobare in qualsiasi pagina o layout del pacchetto.
Per inglobare un Partials, il codice da usare è:
{{> nome-del-partial}}
In questa cartella sono stati suddivisi per funzionalità, ma non è necessario inserire il percorso specifico nel richiamarli in una pagina, l'importante è utilizzare il nome corretto senza estensione.
Inoltre con i partials Panini è possibile configurare azioni avanzate. Per approfondire: https://zurb.com/university/lessons/159