const utils = require('corifeus-utils'); const fs = require('fs'); const fsExtra = require('fs-extra'); module.exports = function (grunt) { const themeDir = './themes/default/less/theme'; const filesLess = { 'themes/default/css/style.css': 'themes/default/less/style.less', 'themes/default/css/fontawesome.css': 'themes/default/less/fontawesome.less', } const root = './node_modules/bootswatch'; const watches = fs.readdirSync(root); const themes = ['default']; const excluded = ['fonts']; const themeCss = { 'bootstrap-default': '/themes/default/css/bootstrap-default.css', } for(let path of watches) { const stat = fs.statSync(`${root}/${path}`); if (stat.isDirectory() && !excluded.includes(path)) { themes.push(path); themeCss[`bootstrap-${path}`] = `/themes/default/css/bootstrap-${path}.css`; } } fsExtra.ensureDirSync(themeDir); for(let theme of themes) { const less = `${themeDir}/${theme}.less`; if (theme === 'default') { fs.writeFileSync(less, ` @import "../../../../node_modules/bootstrap/less/bootstrap"; @import "../default"; `) } else { fs.writeFileSync(less, ` @import "../../../../node_modules/bootstrap/less/bootstrap"; @import "../../../../node_modules/bootswatch/${theme}/variables"; @import "../../../../node_modules/bootswatch/${theme}/bootswatch"; @import "../default"; `) } // console.log(less) filesLess[`themes/default/css/bootstrap-${theme}.css`] = less; } fs.writeFileSync(`./themes/default/js/themes.js`, ` var themes = ${JSON.stringify(themeCss, null, 4)} `); // grunt.log.writeln(JSON.stringify(filesLess, null, 2)) grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-wiredep'); const builder = require(`corifeus-builder`); const loader = new builder.loader(grunt); loader.js({ replacer: { type: 'p3x', npmio: false, node: false, }, config: { clean: { /* themes: [ themeDir ], fonts: [ 'themes/default/fonts' ] */ }, copy: { bootstrap: { expand: true, cwd: './node_modules/bootstrap/fonts', src: '**', dest: 'themes/default/fonts/', }, fontawesome: { expand: true, cwd: './node_modules/font-awesome/fonts', src: '**', dest: 'themes/default/fonts/', }, }, less: { development: { files: filesLess }, }, wiredep: { target: { src: 'themes/default/twig/layout.twig', ignorePath: '../../..', // overrides: wiredepOverrides, // exclude: wiredepExclude fileTypes: { twig: { block: /(([ \t]*)<!--\s*bower:*(\S*)\s*-->)(\n|\r|.)*?(<!--\s*endbower\s*-->)/gi, detect: { js: /<script.*src=['"]([^'"]+)/gi, css: /<link.*href=['"]([^'"]+)/gi }, replace: { js: '<script src="\{\{ app.url_subdir \}\}{{filePath}}"></script>', css: '<link rel="stylesheet" href="\{\{ app.url_subdir \}\}{{filePath}}" />' } }, }, } }, watch: { scripts: { files: ['themes/default/**/*.*'], tasks: ['less'], options: { atBegin: true, spawn: false, }, }, } } }); grunt.registerTask('default', ['clean','copy', 'less', 'wiredep', 'cory-replace']); grunt.registerTask('build', ['default']); grunt.registerTask('run', ['watch:scripts']); };