magnolia-frontend-scripts
Version:
collection of gulp-scripts for building magnolia frontends
81 lines (60 loc) • 4.17 kB
Markdown
# Themes
The gulp-build-process can deal with several _themes_, each defining a main JS/SCSS for a single theme. A few steps are neccessary to define a theme:
## Define the theme in '.themerc'
**_.themerc_** should be located in your _frontend_-root folder, beside of files like **_.projectrc_**, **_.sasslintrc_**, etc. . If not, this file should be created (to make things easier there is an example-**_.themerc_** located in the `examples`-folder of the `magnolia-frontend-script`-module)
## Add your theme defintion
You can define the theme-cofiguration in a complex and a simple way. The complex way offers you a finer control about what is used to build and which output is generated. The simplier way is provided by a `themeDefBuilder` where you just provide a theme-name and the rest is automatically build.
(Note that for the theme-name you should always use something that is usable as filename, so ideally only letters, numbers, '-' and '_'.)
* Example of a complex theme-definition in a **_.themerc_** (note that you can access the base paths by using `themeDefBuilder.getBasePath()`)
```javascript
const bundles = (themeDefBuilder) => {
return [
{
name: 'my-theme',
js: {
// the main js; other js-files should be included via the main js
src: `${themeDefBuilder.getBasePath().srcClient}/themes/my-theme.js`,
dest: `${themeDefBuilder.getBasePath().distPublic}/themes`
},
css: {
// the main scss; other scss-files should be included via the main scss
src_main: `${themeDefBuilder.getBasePath().srcClient}/themes/my-theme.scss`,
// these are some global scss-files that might come in play for most other
// themes as well, so they can/should be defined here
src: [
`${themeDefBuilder.getBasePath().srcClient}/styles/global/_variables.scss`,
`${themeDefBuilder.getBasePath().srcClient}/styles/global/_mixins.scss`,
`${themeDefBuilder.getBasePath().srcClient}/styles/global/_*.scss`,
`${themeDefBuilder.getBasePath().srcClient}/styles/vendor/_*.scss`
],
dest: `${themeDefBuilder.getBasePath().distPublic}/themes`
},
print: {
// the main scss used for print view; other scss-files (related to the print view) should be included via the main scss
src: `${themeDefBuilder.getBasePath().srcClient}/themes/my-theme_print.scss`,
dest: `${themeDefBuilder.getBasePath().distPublic}/theme`
}
},
{... next theme ...}
]
};
module.exports = **bundles**;
```
* Example of a simple theme-definition in a **_.themerc_** (again `themeDefBuilder` comes in play)
```javascript
const bundles = (themeDefBuilder) => {
return [
themeDefBuilder.createThemeDefinitionFor('theme-example')
]
};
module.exports = bundles;
```
## Add your theme files
Based on your theme definition (s. above) you have to provide the source files (JS/SCSS). Note that in cases where you'd a definition but not a corresponding file, you want get no output file for it. It can also happen (based on the source file content) that you either won't get any output -in case- the content was useless (so it was lint'ed out).
If you followed the 'defaults' regarding paths and stuff the files could be located here:
* `build-ui/frontend/src/client/themes/my-theme.js`
* `build-ui/frontend/src/client/themes/my-theme.scss`
* `build-ui/frontend/src/client/themes/my-theme_print.scss`
Any further usage and organization of includes and stuff, related to a theme, is up to you, but recommend would be to create a subfolder with the theme-name and to place your organized files there.
## Reference your theme files
Finally you should use your theme files as you do some setup stuff in Magnolia itself