Pre-requis :
Passer le tout en mode décompressé sans cache et en twig debug :
- Cf. WIKI perso
Suivre les indication de SI1A sur le site INEA:
- Création de feuilles de styles SASS :
- Voir la documentation du projet INEA sur Venezia (SI1A)
On copie le starterKit SASS dans la partie custom dans un nouveau thème custom (bofip_themes/bofip_bootstrap_sass) :
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/contrib/bootstrap/starterkits$ cp -pvr sass /var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass
'sass' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass'
'sass/templates' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/templates'
………………………………………………………………...
'sass/scss/style.scss' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/scss/style.scss'
'sass/scss/jquery-ui' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/scss/jquery-ui'
'sass/scss/jquery-ui/_autocomplete.scss' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/scss/jquery-ui/_autocomplete.scss'
'sass/scss/_overrides.scss' -> '/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/scss/_overrides.scss'
Les noms de fichiers :
On a renommé les 3 fichiers :
- cf. les commentaires dans le listage du répertoire
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ ll
total 424
drwxr-xr-x 7 jpmena www-data 4096 févr. 12 10:37 ./
drwxrwsr-x 7 jpmena www-data 4096 févr. 2 15:28 ../
# on a renommé THEMENAME.starterkit.yml
-rwxr-xr-x 1 jpmena www-data 614 févr. 2 16:11 bofip_bootstrap_sass.info.yml*
# on a renommé THEMENAME.libraries.yml
-rwxr-xr-x 1 jpmena www-data 777 janv. 20 07:14 bofip_bootstrap_sass.libraries.yml*
# on a renommé THEMENAME.theme
-rwxr-xr-x 1 jpmena www-data 95 janv. 20 07:14 bofip_bootstrap_sass.theme*
drwxr-xr-x 4 jpmena www-data 4096 janv. 20 07:14 config/
drwxrwxr-x 2 jpmena jpmena 4096 févr. 12 09:21 docs/
-rwxr-xr-x 1 jpmena www-data 1150 janv. 20 07:14 favicon.ico*
drwxr-xr-x 2 jpmena www-data 4096 janv. 20 07:14 images/
-rwxr-xr-x 1 jpmena www-data 1295 janv. 20 07:14 logo.svg*
-rwxr-xr-x 1 jpmena www-data 2687 janv. 20 07:14 README.md*
-rw-r--r-- 1 jpmena www-data 378677 févr. 2 16:57 screenshot.png
drwxr-xr-x 4 jpmena www-data 4096 janv. 20 07:14 scss/
drwxr-xr-x 2 jpmena www-data 4096 janv. 20 07:14 templates/
On a renommé également les 2 fichiers du sous-répertoire config :
- cf. les commentaires dans le listage des répertoires
# on renomme THEMENAME.schema.yml cf ci dessous
pmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ ll config/schema/
total 12
drwxr-xr-x 2 jpmena www-data 4096 févr. 2 16:12 ./
drwxr-xr-x 4 jpmena www-data 4096 janv. 20 07:14 ../
-rwxr-xr-x 1 jpmena www-data 171 févr. 2 17:52 bofip_bootstrap_sass.schema.yml*
# on renomme THEMENAME.settings.yml cf ci dessous
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ ll config/install/
total 12
drwxr-xr-x 2 jpmena www-data 4096 févr. 2 16:12 ./
drwxr-xr-x 4 jpmena www-data 4096 janv. 20 07:14 ../
-rwxr-xr-x 1 jpmena www-data 749 janv. 20 07:14 bofip_bootstrap_sass.settings.yml*
Adaptations du contenu de certains fichiers :
Le contenu du fichier bofip_bootstrap_sass.info.yml …
- cf. les commentaires que j’ai ajoutés
core: 8.x
type: theme
base theme: bootstrap
# changement du name et de description pour proposer
# quelque code de parlant à l'interface d'administration
name: 'BOFIP SASS'
description: 'Thème BOFIP basé les sur le Kit BootStrap3/SASS - https://github.com/twbs/bootstrap-sass (not for beginners).'
package: 'Bootstrap'
regions:
navigation: 'Navigation'
navigation_collapsible: 'Navigation (Collapsible)'
header: 'Top Bar'
highlighted: 'Highlighted'
help: 'Help'
content: 'Content'
sidebar_first: 'Primary'
sidebar_second: 'Secondary'
footer: 'Footer'
page_top: 'Page top'
page_bottom: 'Page bottom'
# changement de THEMENAME à bofip_inea_sass (nom actuel de mon thème)
## pour les références ci dessous !!!
libraries:
- 'bofip_bootstrap_sass/global-styling'
- 'bofip_bootstrap_sass/bootstrap-scripts'
core: 8.x
type: theme
base theme: bootstrap
Le contenu du fichier config/schema/bofip_bootstrap_sass …
# Schema for the theme setting configuration file of the THEMETITLE theme.
## changer le label ci dessous ('THEMETITLE settings' dans le Kis SASS) pour un label unique sur tous les projets drupal embarqués par mon instance
# Schema for the theme setting configuration file of the THEMETITLE theme.
bofip_bootstrap_sass.settings:
type: theme_settings
label: 'bofip_bootstrap_sass settings'
Ajouter les librairies Booststrap SASS
Ressources
- Le fichier Gulpfile.js du projet INEA
- Le projet Booststrap 3 sous SASS
- Un travail analogue en Bootstrap4 a été réalisé pour le Theming du Comité de Roller du 93
Placement des sources Booststrap SASS
- On récupère donc le dernier Tag des sources bootstrap SASS et on renomme de façon à suivre le chemin relatif précédent:
# on détarre l'archive Github au bon endroit
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom$ tar xf bootstrap-sass-3.3.7.tar.gz -C bofip_themes/bofip_bootstrap_sass/
# on renomme le répertoire
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom$ cd bofip_themes/bofip_bootstrap_sass/
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ mv -v bootstrap-sass-3.3.7 bootstrap
'bootstrap-sass-3.3.7' -> 'bootstrap'
Sources javascript
- Le fichier bofip_bootstrap_sass/bofip_bootstrap_sass.libraries.yml fait référence aux sources javascript de Bootstrap à travers le chemin relatif: bootstrap/assets/javascripts/bootstrap
bootstrap-scripts:
js:
bootstrap/assets/javascripts/bootstrap/affix.js: {}
bootstrap/assets/javascripts/bootstrap/alert.js: {}
bootstrap/assets/javascripts/bootstrap/button.js: {}
bootstrap/assets/javascripts/bootstrap/carousel.js: {}
bootstrap/assets/javascripts/bootstrap/collapse.js: {}
bootstrap/assets/javascripts/bootstrap/dropdown.js: {}
bootstrap/assets/javascripts/bootstrap/modal.js: {}
bootstrap/assets/javascripts/bootstrap/tooltip.js: {}
bootstrap/assets/javascripts/bootstrap/popover.js: {}
bootstrap/assets/javascripts/bootstrap/scrollspy.js: {}
bootstrap/assets/javascripts/bootstrap/tab.js: {}
bootstrap/assets/javascripts/bootstrap/transition.js: {}
- noter que l’ajout de ces fichiers Javascripts suppose la présence de la librairie Bootstrap.js qui, si elle n’est pas à récupérer du CDN peut se faire localement grâce au projet Bootstrap Library
Sources SASS:
- Le répertoire récupéré du KIT SASS ne vient pas vide:
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ ll scss
total 28
drwxr-xr-x 4 jpmena www-data 4096 janv. 20 07:14 ./
drwxr-xr-x 8 jpmena www-data 4096 févr. 12 13:40 ../
drwxr-xr-x 2 jpmena www-data 4096 janv. 20 07:14 component/
-rw-r--r-- 1 jpmena www-data 542 janv. 20 07:14 _default-variables.scss
drwxr-xr-x 2 jpmena www-data 4096 janv. 20 07:14 jquery-ui/
-rw-r--r-- 1 jpmena www-data 1254 janv. 20 07:14 _overrides.scss
-rw-r--r-- 1 jpmena www-data 176 janv. 20 07:14 style.scss
le fichier principal scss/style.scss
- c’est le fichier SASS principal:
- Il inclue *_default-variables.scss* et *_overrides.scss* (cf. contenu ci après)
// Default variables.
@import "default-variables";
// Bootstrap Framework.
@import '../bootstrap/assets/stylesheets/bootstrap';
// Base-theme overrides.
@import 'overrides';
- on voit qu’il inclue les source sass de bootstrap (cf. placement juste ci dessus des sources bootstrap), le fichier _bofip_bootstrap_sass/bootstrap/assets/stylesheets/bootstrap.scss fait appel par défaut à toutes les ressources sass bootstrap:
- La difficulté sera dans un second temps (quand le projet sera plus avancé) de définir un tel fichier *scss/_booststrap.scss* dans nos sources scss ramené aux imports minimaux !!!
- et de l’inclure dans notre scss/style.scss en lieu et place de *bootstrap/assets/stylesheets/_bootstrap.scss*
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
// Core variables and mixins
@import "bootstrap/variables";
@import "bootstrap/mixins";
// Reset and dependencies
@import "bootstrap/normalize";
@import "bootstrap/print";
@import "bootstrap/glyphicons";
// Core CSS
@import "bootstrap/scaffolding";
@import "bootstrap/type";
@import "bootstrap/code";
@import "bootstrap/grid";
@import "bootstrap/tables";
@import "bootstrap/forms";
@import "bootstrap/buttons";
// Components
@import "bootstrap/component-animations";
..................................
@import "bootstrap/wells";
@import "bootstrap/close";
// Components w/ JavaScript
@import "bootstrap/modals";
@import "bootstrap/tooltip";
@import "bootstrap/popovers";
@import "bootstrap/carousel";
// Utility classes
@import "bootstrap/utilities";
@import "bootstrap/responsive-utilities";
- Le fichier scss/style.scss est le fichier que l’outillage va compiler en css/style.css
- en effet bofip_bootstrap_sass/bofip_bootstrap_sass.libraries.yml y fait référence (cf. contenu ci après):
global-styling:
css:
theme:
css/style.css: {} # c'est le fichier résultant de la compilation de scss/style.scss
le fichier *scss/_default-variables.scss*
- Il est importé par style.scss et doit :
- permettre de redéfinir les variables présentes sous *../bootstrap/assets/stylesheets/bootstrap/_variables.scss*
- les variables de ce fichier sont sufixées par !default;
- ce qui signifie qu’elles s’imposent uniquement si elle n’ont pas été défini auparant (sans le !default; bien sûr)!!!
- c’est à ce niveau qu’intervient notre fichier *scss/_default-variables.scss*
- Un exemple de son usage nous est donné dans le contenu livré par le KitSASS:
« scss /** * Default Variables. * * Modify this file to provide default Bootstrap Framework variables. The * Bootstrap Framework will not override any variables defined here because it * uses the!default` flag which will only set their default if not already * defined here. You can copy existing variables directly from the following file: * ./THEMENAME/bootstrap/assets/stylesheets/bootstrap/_variables.scss */
// Set the proper directory for the Bootstrap Glyphicon font. $icon-font-path: ‘../bootstrap/assets/fonts/bootstrap/’; « `
le fichier *scss/_overrides.scss*
- Il est importé par style.scss et est chargé
- d’apporter la customisation Bootstrap par rapport aux spécificités de Drupal 8
- Il n’est pas vide et son contenu fait appel aux fichiers sass présents sous scss/component
mise en place de l’outillage SASS / Gulp
Prérequis: installation d’un compilateur SASS
- Le site de SASS recommande l’installation de SASS comme paquet (Gem) de Ruby
- J’ai choisi l’option de facilité, le paquet apt ruby-sass
# installation du paquet ruby-sass par apt
## il installe autmatiquement ruby et les Gem qui vont bien pour la compilation SASS
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ sudo apt install ruby-sass
[sudo] Mot de passe de jpmena :
...................
# on vérifie
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ sass --version
Sass 3.4.21 (Selective Steve)
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ whereis sass
sass: /usr/bin/sass /usr/share/man/man1/sass.1.gz
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ ll /usr/bin/sass
-rwxr-xr-x 1 root root 142 janv. 25 2016 /usr/bin/sass*
- /usr/bin/sass est un script Ruby !!!
#!/usr/bin/ruby
# The command line Sass parser.
require 'sass'
require 'sass/exec'
opts = Sass::Exec::SassScss.new(ARGV, :sass)
opts.parse!
Prérequis NodeJS/npm présents sur le poste:
- La version NodeJS présente dans les paquets Ubuntu est buggy et ancienne.
- Installation depuis la dernière version Node JS/npm depuis le site officiel s’impose
Installation de la dernière version Node JS/npm
- Télécharger la dernière version Node JS/Npm
- La détarer et ajouter le répertoire des binaires dans le PATH Linux
- et on teste la prise en compte !!!
bash # je l'ai téléchargé dans un sous-répertoire Ateliers de mon $HOME jpmena@jpmena-HP-ProDesk-600-G2-MT:~/Ateliers$ ls -ltr | tail -1 -rw-rw-r-- 1 jpmena jpmena 11410120 févr. 13 08:02 node-v8.9.4-linux-x64.tar.xz # On dé-tare jpmena@jpmena-HP-ProDesk-600-G2-MT:~/Ateliers$ tar xf node-v8.9.4-linux-x64.tar.xz # on ajoute le chemin du répertoire des binaires node et npm dans le PATH jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ tail -3 .profile # set PATH so it includes user's private bin directories NODE_HOME=$HOME/Ateliers/node-v8.9.4-linux-x64 PATH="$NODE_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH" # On teste la prise en compte de ce chemin ## on active la nouvelle configuration jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ source .profile ## On vérifie la version de Node jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ node --version v8.9.4 ## On vérifie la version de npm jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ npm --version 5.6.0
installation du client Gulp
- La page d’accueil du projet Gulp nous présente un écran avec les 4 commandes à passer
# Installation du client Gulp (global '-g' à mon utilisateur)
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ npm install gulp-cli -g
/home/jpmena/Ateliers/node-v8.9.4-linux-x64/bin/gulp -> /home/jpmena/Ateliers/node-v8.9.4-linux-x64/lib/node_modules/gulp-cli/bin/gulp.js
+ gulp-cli@2.0.1
added 244 packages in 12.06s
# vérification
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ gulp --version
[08:17:32] CLI version 2.0.1
#liste des commandes gulp disponibles:
jpmena@jpmena-HP-ProDesk-600-G2-MT:~$ gulp --help
Usage: gulp [options] tasks
Options:
--help, -h Show this help. [booléen]
--version, -v Print the global and local gulp versions. [booléen]
--require Will require a module before running the gulpfile.
This is useful for transpilers but also has other
applications. [chaine de caractère]
--gulpfile, -f Manually set path of gulpfile. Useful if you have
multiple gulpfiles. This will set the CWD to the
gulpfile directory as well. [chaine de caractère]
--cwd Manually set the CWD. The search for the gulpfile, as
well as the relativity of all requires will be from
here. [chaine de caractère]
--verify Will verify plugins referenced in project's
package.json against the plugins blacklist.
--tasks, -T Print the task dependency tree for the loaded
gulpfile. [booléen]
--tasks-simple Print a plaintext list of tasks for the loaded
gulpfile. [booléen]
--tasks-json Print the task dependency tree, in JSON format, for
the loaded gulpfile.
--tasks-depth, --depth Specify the depth of the task dependency tree.[nombre]
--compact-tasks Reduce the output of task dependency tree by printing
only top tasks and their child tasks. [booléen]
--sort-tasks Will sort top tasks of task dependency tree. [booléen]
--color Will force gulp and gulp plugins to display colors,
even when no color support is detected. [booléen]
--no-color Will force gulp and gulp plugins to not display
colors, even when color support is detected. [booléen]
--silent, -S Suppress all gulp logging. [booléen]
--continue Continue execution of tasks upon failure. [booléen]
--series Run tasks given on the CLI in series (the default is
parallel). [booléen]
--log-level, -L Set the loglevel. -L for least verbose and -LLLL for
most verbose. -LLL is default. [comptage]
Création d’une GulpFile à la racine de notre thème
- On reprend du GulpFile.js du projet INEA la partie spécifique à la compilation SASS
- On laisse de côté la génération KSS (documentation automatique des composants Bootstrap de la charte)
- Dans ce projet les répertoire js, fonts et css sont dans un sour répertoire dist
- on adapte le fichier _*.libraries.yml_ « `yaml global-styling: css: theme: dist/css/style.css: {}
bootstrap-scripts: js: bootstrap/assets/javascripts/bootstrap/affix.js: {} bootstrap/assets/javascripts/bootstrap/alert.js: {} bootstrap/assets/javascripts/bootstrap/button.js: {} bootstrap/assets/javascripts/bootstrap/carousel.js: {} bootstrap/assets/javascripts/bootstrap/collapse.js: {} bootstrap/assets/javascripts/bootstrap/dropdown.js: {} bootstrap/assets/javascripts/bootstrap/modal.js: {} bootstrap/assets/javascripts/bootstrap/tooltip.js: {} bootstrap/assets/javascripts/bootstrap/popover.js: {} bootstrap/assets/javascripts/bootstrap/scrollspy.js: {} bootstrap/assets/javascripts/bootstrap/tab.js: {} bootstrap/assets/javascripts/bootstrap/transition.js: {} « ` * on adapte aussi le fichier .gitignore pour exclure le répertoire dist des sources
création d’un package.json qui permet de charger les bibliothèques dont Gulp a besoin
- on initialise un fichier package.json
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (bofip_bootstrap_sass) #on répond aux différentes questions (souvent valeurs par défaut)
.......
- Ajout des librairies qui sont appelées (required) par le fichier gulpfile.js:
- on passe les commandes npm require qui vont bien
# on installe gulp et le mémorise dans les dépendances de développement
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ npm install gulp --save-dev
......................................
+ gulp@3.9.1
added 274 packages in 11.468s
# on installe l'interfaces sass pour gulp et le mémorise dans les dépendances de développement
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ npm install gulp-sass --save-dev
............................................................
+ gulp-sass@3.1.0
added 173 packages in 11.924s
# on installe l'interfaces sass gulp-sourcemap et le mémorise dans les dépendances de développement
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ npm install gulp-sourcemaps --save-dev
.........................
+ gulp-sourcemaps@2.6.4
added 30 packages in 4.898s
- le résultat dans mon cas est un fichier package.json à la racine de mon thème et qui contient
- Pour réinstaller toutes les librairies nécessaires à partir de ce fichier un npm install sera suffisant
{
"name": "bofip_bootstrap_sass",
"version": "0.0.1",
"description": "Compilation des assets",
"main": "gulpfile.js",
"directories": {
"doc": "docs"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"gulp",
"sass"
],
"author": "JPmena",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^2.6.4"
}
}
- on adapte aussi le fichier .gitignore pour exclure le répertoire node_modules des sources
lancement de la compilation
- Lancement de la tâche css
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ gulp css
[10:53:09] Using gulpfile /var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass/gulpfile.js
[10:53:09] Starting 'css'...
[10:53:09] Finished 'css' after 219 ms
- on a bien un répertoire créé dist/css qui n’existait pas avant
- bien sûr, dist fait partie du .gitignore !!!
jpmena@jpmena-HP-ProDesk-600-G2-MT:/var/www/bofiptest/web/themes/custom/bofip_themes/bofip_bootstrap_sass$ ls -ltr dist/css/
total 588
-rw-rw-r-- 1 jpmena jpmena 433069 févr. 13 10:53 style.css.map
-rw-rw-r-- 1 jpmena jpmena 166192 févr. 13 10:53 style.css