際際滷

際際滷Share a Scribd company logo
Async navigation with a lightweight ES6 framework
sezioni di pagina async
con ES6 + D8 +
la vera storia di
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 framework
INGREDIENTI
- Drupal
- Drupal.settings /
drupalSettings
- hook_menu/routing
- hook_theme (7/8)
- Sf YAML parser
- ES6 + webpack +
polyfill
- jQuery
PER CUCINARE BENE
PERCH YAML?
Fornisce, insieme ai template, un sistema abbastanza
intuitivo di impaginazione dei contenuti
PERCH ES6?
* Why not? transpiler >>> compatibilit
* Contiene una discreta dose di "syntactic sugar", per
oggetti e tipi di dati di uso comune
*  pi湛 orientato a organizzare il codice a oggetti in
modi "familiari" (classi vs. prototype)
PERCH ES6?
* Rende il comportamento del codice pi湛 prevedibile
rispetto alle versioni precedenti (es. scope delle var)
* Moduli
* Promises (per AJAX)
ES6: COSA ABBIAMO SFRUTTATO FINORA?
* Syntactic sugar
* Accenno di modularit
* Classi
ES6: COSA SFRUTTEREMO IN FUTURO?
* ES7 async
* Generators
* Promises
(insomma, next-gen AJAX)
COMPONENTI DEL SISTEMA
* una rotta unica
* template pagina
* hook_theme
* YAML >>> blocchi
* GOAT-core
* JS per clic su tab
ROUTING
Una sola rotta
restituisce con JSON i
contenuti di ogni blocco.
La rotta accetta un
parametro che indica
quale blocco recuperare.
Per convenzione, il
parametro identificativo
coincide con il nome
dellelemento di
hook_theme
THEMING
Un template per la pagina
contenitore di
destinazione delle
sezioni. Contiene tutti i
contenitori di markup che
definiscono le sezioni.
Un elemento hook_theme
per ogni blocco da
implementare, indica
quale template usare come
contenitore per i
blocchi.
CLASSI
Uninterfaccia definisce
quali metodi devono
implementare i singoli
blocchi.
Una factory provvede ad
associare ogni
identificativo di blocco
(elemento hook_theme -
vd. altra slide) con la
relativa classe.
YAML + SETTINGS
Un file YAML di
definizione di sezioni,
regioni, blocchi: viene
elaborato dalla classe
parser.
Una volta elaborata la
configurazione, viene
passata agli script
tramite drupalSettings.
-CORE
Una libreria generica che
si occupa di mostrare e
nascondere i blocchi
allinterno delle varie
sezioni.
Interagisce con i
drupalSettings.
Riceve i dati sulla
sezione da mostrare da
uno script che gestisce i
click sulle tab.
-CORE
Nella versione D7 il
codice server-side si
occupa anche di caricare
dinamicamente le librerie
eventualmente richieste
dai contenuti caricati
via AJAX, per il
funzionamento di alcuni
widget (es. i filtri
esposti AJAX di Views).
Il futuro di
* Gestione di URL che
portano direttamente a un
tab interno
* Gestione della
cronologia di navigazione
attraverso le tab
* AJAX moderno
(promises, ES7)
* Possibilit di
configurare la necessit
di refresh per sezioni o
singoli blocchi
PROBLEMI E ANNOTAZIONI - ES6
* retrocompatibilit >>> transpiler + polyfill
* moduli: decidere se usare librerie fornite da Drupal
(es. jQuery come modulo >>> DEPENDENCY)
* transpiler >>> layer aggiuntivo da gestire durante
sviluppo e debug
PROBLEMI E ANNOTAZIONI - D8
* Supportare le librerie JS "di terzi" 竪 un po' pi湛
problematico (WIP) >>> attachment
* Obsolescenza delle librerie fornite stock da D8
GRAZIE!
Marcello Testi
@pinolo
marcello.testi@sparkfabrik.com
Edoardo Dusi
@edodusi
edoardo.dusi@sparkfabrik.com
Async navigation with a lightweight ES6 framework

More Related Content

Async navigation with a lightweight ES6 framework

  • 2. sezioni di pagina async con ES6 + D8 +
  • 6. INGREDIENTI - Drupal - Drupal.settings / drupalSettings - hook_menu/routing - hook_theme (7/8) - Sf YAML parser - ES6 + webpack + polyfill - jQuery
  • 8. PERCH YAML? Fornisce, insieme ai template, un sistema abbastanza intuitivo di impaginazione dei contenuti
  • 9. PERCH ES6? * Why not? transpiler >>> compatibilit * Contiene una discreta dose di "syntactic sugar", per oggetti e tipi di dati di uso comune * pi湛 orientato a organizzare il codice a oggetti in modi "familiari" (classi vs. prototype)
  • 10. PERCH ES6? * Rende il comportamento del codice pi湛 prevedibile rispetto alle versioni precedenti (es. scope delle var) * Moduli * Promises (per AJAX)
  • 11. ES6: COSA ABBIAMO SFRUTTATO FINORA? * Syntactic sugar * Accenno di modularit * Classi
  • 12. ES6: COSA SFRUTTEREMO IN FUTURO? * ES7 async * Generators * Promises (insomma, next-gen AJAX)
  • 13. COMPONENTI DEL SISTEMA * una rotta unica * template pagina * hook_theme * YAML >>> blocchi * GOAT-core * JS per clic su tab
  • 14. ROUTING Una sola rotta restituisce con JSON i contenuti di ogni blocco. La rotta accetta un parametro che indica quale blocco recuperare. Per convenzione, il parametro identificativo coincide con il nome dellelemento di hook_theme
  • 15. THEMING Un template per la pagina contenitore di destinazione delle sezioni. Contiene tutti i contenitori di markup che definiscono le sezioni. Un elemento hook_theme per ogni blocco da implementare, indica quale template usare come contenitore per i blocchi.
  • 16. CLASSI Uninterfaccia definisce quali metodi devono implementare i singoli blocchi. Una factory provvede ad associare ogni identificativo di blocco (elemento hook_theme - vd. altra slide) con la relativa classe.
  • 17. YAML + SETTINGS Un file YAML di definizione di sezioni, regioni, blocchi: viene elaborato dalla classe parser. Una volta elaborata la configurazione, viene passata agli script tramite drupalSettings.
  • 18. -CORE Una libreria generica che si occupa di mostrare e nascondere i blocchi allinterno delle varie sezioni. Interagisce con i drupalSettings. Riceve i dati sulla sezione da mostrare da uno script che gestisce i click sulle tab.
  • 19. -CORE Nella versione D7 il codice server-side si occupa anche di caricare dinamicamente le librerie eventualmente richieste dai contenuti caricati via AJAX, per il funzionamento di alcuni widget (es. i filtri esposti AJAX di Views).
  • 20. Il futuro di * Gestione di URL che portano direttamente a un tab interno * Gestione della cronologia di navigazione attraverso le tab * AJAX moderno (promises, ES7) * Possibilit di configurare la necessit di refresh per sezioni o singoli blocchi
  • 21. PROBLEMI E ANNOTAZIONI - ES6 * retrocompatibilit >>> transpiler + polyfill * moduli: decidere se usare librerie fornite da Drupal (es. jQuery come modulo >>> DEPENDENCY) * transpiler >>> layer aggiuntivo da gestire durante sviluppo e debug
  • 22. PROBLEMI E ANNOTAZIONI - D8 * Supportare le librerie JS "di terzi" 竪 un po' pi湛 problematico (WIP) >>> attachment * Obsolescenza delle librerie fornite stock da D8