RSS Git Download  Clone
Raw Blame History
const fs = require('fs');
const fsExtra = require('fs-extra');

module.exports = function (grunt) {

    const themeDir = './public/less/theme';

    const filesLess = {
    }


    const root = './node_modules/bootswatch';
    const watches = fs.readdirSync(root);
    const themes = ['default'];
    const excluded = ['fonts'];
    const themeCss = {
        'bootstrap-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}`] = `/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[`public/css/bootstrap-${theme}.css`] = less;

    }


    fs.writeFileSync(`./public/js/themes.js`, `
module.exports = ${JSON.stringify(themeCss, null, 4)}
`);

//    grunt.log.writeln(JSON.stringify(filesLess, null, 2))

    grunt.loadNpmTasks('grunt-contrib-less');


    const builder = require(`corifeus-builder`);
    const loader = new builder.loader(grunt);
    loader.js({
        replacer: {
            type: 'p3x',
            npmio: false,
        },
        config:
            {
                clean: {
                    /*
                    themes: [
                        themeDir
                    ],
                    fonts: [
                        'public/fonts'
                    ]
                    */
                },
                copy: {
                    tweomji: {
                        files: [
                            {
                                cwd: 'node_modules/twemoji/2/svg',
                                expand: true,
                                src: [
                                    '**',
                                ],
                                dest: './public/webpack/assets/twemoji/svg'
                            },

                        ]
                    },
                },
                less: {
                    development: {
                        options: {
                            compress: true,
                        },
                        files: filesLess
                    },

                },

                watch: {
                    less: {
                        files: ['public/less/*.*'],
                        tasks: ['less'],
                        options: {
                            atBegin: true,
                            //spawn: false,
                        },
                    },
                }
            }
    });

    grunt.registerTask('default', ['clean','less', 'copy', 'cory-npm', 'cory-replace']);
    grunt.registerTask('build', ['default']);
    grunt.registerTask('run', ['watch:less']);

};