aboutsummaryrefslogblamecommitdiffhomepage
path: root/Gruntfile.js
blob: 72473b21c5d0aced6976698d2641674c381e19e2 (plain) (tree)
1
2
3
4
5
6
7
8




                                     
                                    
                               
                                           



                  

                                


                                                                     

                                            
                                                                    


                  

                                


                                                                     

                                         
                                                                 
        


                
                       
        


                                                             
                                                    
          
                                             


                 
                                                 
          

                                          

                 










                                                                                              









                                         



                                                             

                                                                                    



           



                 
                                                                 
                                                    
         


                
                                                           
                                                 
         




                     
                                               
                         
                                


                     
                                               
                                

                                                   



                         

                                                           
                                                          


                         
                                                              

                                                          


                         
                                                                                

                                                                                                                                         

            





                            

                                                           
                                                            



                            
                                                                  
                     
                                                                  



                            
                                                                                

                                                                                                                                         

            
        

              






                                                 
                                                      


            


            
                                          

           
                                                                     

            

                                   


                                       
      




                                                                                                   



                                                                 
     




                     
                                             




                                 
                                                         




                                   
                                                                                              






                                                                     



                                         
                                        


                                            
  
module.exports = function (grunt) {
  require('load-grunt-tasks')(grunt);

  grunt.initConfig({
    appDir: 'app/Resources/static',
    buildDir: 'app/Resources/build',
    modulesDir: 'node_modules',
    releaseDir: 'web/bundles/wallabagcore',

    postcss: {
      material: {
        options: {
          processors: [
            require('pixrem')(),
            require('autoprefixer')({ browsers: 'last 2 versions' }),
            require('cssnano')(),
          ],
        },
        src: '<%= buildDir %>/material.css',
        dest: '<%= releaseDir %>/themes/material/css/style.min.css',
      },
      baggy: {
        options: {
          processors: [
            require('pixrem')(),
            require('autoprefixer')({ browsers: 'last 2 versions' }),
            require('cssnano')(),
          ],
        },
        src: '<%= buildDir %>/baggy.css',
        dest: '<%= releaseDir %>/themes/baggy/css/style.min.css',
      },
    },
    concat: {
      options: {
        separator: ';',
      },
      cssMaterial: {
        src: [
          'node_modules/materialize-css/bin/materialize.css',
          '<%= appDir %>/themes/material/css/*.css',
        ],
        dest: '<%= buildDir %>/material.css',
      },
      cssBaggy: {
        src: [
          '<%= appDir %>/themes/baggy/css/*.css',
        ],
        dest: '<%= buildDir %>/baggy.css',
      },
    },
    browserify: {
      dist: {
        files: {
          '<%= buildDir %>/material.browser.js': ['<%= appDir %>/themes/material/js/init.js'],
          '<%= buildDir %>/baggy.browser.js': ['<%= appDir %>/themes/baggy/js/init.js']
        }
      },
      options: {
        sourceType: "module",
        transform: [
          ["babelify", {
          presets: ["es2015"]
        }], ["browserify-shim", {
            "jquery": {
              "exports": "$"
            },
            "materialize": "materialize",
            "jquery-ui": {
              "depends": "jquery",
              "exports": null
            }
          }]
        ],
        browserifyOptions: {
          browser: {
            "jQuery": "./node_modules/jquery/dist/jquery.js",
            "jquery.tinydot": "./node_modules/jquery.tinydot/src/jquery.tinydot.js",
            "jquery.ui": "./node_modules/jquery-ui-browserify/dist/jquery-ui.js"
          }
        }
      }

    },
    uglify: {
      material: {
        files: {
          '<%= releaseDir %>/themes/material/js/material.min.js':
            ['<%= buildDir %>/material.browser.js'],
        }
      },
      baggy: {
        files: {
          '<%= releaseDir %>/themes/baggy/js/baggy.min.js':
            ['<%= buildDir %>/baggy.browser.js'],
        }
      },
    },
    copy: {
      pickerjs: {
        expand: true,
        cwd: '<%= modulesDir %>/pickadate/lib',
        src: 'picker.js',
        dest: '<%= buildDir %>',
      },
      annotator: {
        expand: true,
        cwd: '<%= modulesDir %>/annotator/pkg',
        src: 'annotator.min.js',
        dest: '<%= buildDir %>/themes/_global/js/',
      },
      baggyfonts: {
        files: [
          {
            expand: true,
            cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
            src: 'IcoMoon-Free.ttf',
            dest: '<%= releaseDir %>/themes/baggy/fonts/',
          },
          {
            expand: true,
            cwd: '<%= modulesDir %>/ptsans-npm-webfont/fonts',
            src: 'ptsansbold.woff',
            dest: '<%= releaseDir %>/themes/baggy/fonts/',
          },
          {
            expand: true,
            cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
            src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
            dest: '<%= releaseDir %>/themes/baggy/fonts/',
          },
        ],
      },
      materialfonts: {
        files: [
          {
            expand: true,
            overwrite: true,
            cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
            src: 'IcoMoon-Free.ttf',
            dest: '<%= releaseDir %>/themes/material/fonts',
          },
          {
            expand: true,
            overwrite: true,
            cwd: '<%= modulesDir %>/roboto-fontface/fonts/Roboto',
            src: '*',
            dest: '<%= releaseDir %>/themes/material/font/roboto',
          },
          {
            expand: true,
            overwrite: true,
            cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
            src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
            dest: '<%= releaseDir %>/themes/material/fonts/',
          },
        ],
      },
    },
    symlink: {
      pics: {
        files: [
          {
            expand: true,
            overwrite: true,
            cwd: '<%= appDir %>/themes/_global/',
            src: 'img',
            dest: '<%= releaseDir %>/themes/_global/',
          },
        ],
      },
    },
    clean: {
      css: {
        src: ['<%= buildDir %>/**/*.css'],
      },
      js: {
        src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'],
      },
      all: {
        src: ['./<%= buildDir %>'],
      },
      release: {
        src: ['./<%= releaseDir %>/*'],
      }
    },
    eslint: {
      target: ['<%= appDir %>/themes/material/js/init.js', '<%= appDir %>/themes/baggy/js/init.js']
    },
    stylelint: {
      target: ['<%= appDir %>/themes/material/css/*.css', '<%= appDir %>/themes/baggy/css/*.css']
    },
    watch: {
      files: ['<%= appDir %>/**/*.css', '<%= appDir %>/**/*.js'],
      tasks: ['css', 'js']
    }
  });

  grunt.registerTask(
    'fonts',
    'Install fonts',
    ['copy:baggyfonts', 'copy:materialfonts']
    );

  grunt.registerTask(
    'js',
    'Build and install js files',
    ['clean:js', 'copy:pickerjs', 'browserify', 'uglify']
    );

  grunt.registerTask(
    'default',
    'Build and install everything',
    ['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'copy', 'symlink']
    );

  grunt.registerTask(
    'css',
    'Compiles the stylesheets.',
    ['clean:css', 'concat:cssMaterial', 'concat:cssBaggy', 'postcss']
  );

  grunt.registerTask(
      'tests',
      'Test css and js style conformity',
      ['eslint', 'stylelint', 'default']
  ),

  grunt.loadNpmTasks('grunt-contrib-watch');
};