]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - Gruntfile.js
Merge pull request #2624 from Rurik19/master
[github/wallabag/wallabag.git] / Gruntfile.js
index c63c392b2819309974d3833de142e3139391651f..72473b21c5d0aced6976698d2641674c381e19e2 100644 (file)
@@ -3,171 +3,161 @@ module.exports = function (grunt) {
 
   grunt.initConfig({
     appDir: 'app/Resources/static',
-    buildDir: 'web/bundles/wallabagcore',
+    buildDir: 'app/Resources/build',
+    modulesDir: 'node_modules',
+    releaseDir: 'web/bundles/wallabagcore',
 
     postcss: {
       material: {
         options: {
-          map: {
-              inline: false
-          },
-
           processors: [
             require('pixrem')(),
-            require('autoprefixer')({browsers: 'last 2 versions'}),
-            require('cssnano')()
-          ]
+            require('autoprefixer')({ browsers: 'last 2 versions' }),
+            require('cssnano')(),
+          ],
         },
         src: '<%= buildDir %>/material.css',
-        dest: '<%= buildDir %>/themes/material/css/style.min.css'
+        dest: '<%= releaseDir %>/themes/material/css/style.min.css',
       },
       baggy: {
         options: {
-          map: {
-              inline: false
-          },
-
           processors: [
             require('pixrem')(),
-            require('autoprefixer')({browsers: 'last 2 versions'}),
-            require('cssnano')()
-          ]
+            require('autoprefixer')({ browsers: 'last 2 versions' }),
+            require('cssnano')(),
+          ],
         },
         src: '<%= buildDir %>/baggy.css',
-        dest: '<%= buildDir %>/themes/baggy/css/style.min.css'
-      }
+        dest: '<%= releaseDir %>/themes/baggy/css/style.min.css',
+      },
     },
     concat: {
       options: {
-        separator: ';'
-      },
-      jsMaterial: {
-        src: [
-          'node_modules/jquery/dist/jquery.js',
-          'node_modules/jquery-ui/jquery-ui.js',
-          'node_modules/materialize-css/bin/materialize.js',
-          '<%= appDir %>/themes/_global/js/restoreScroll.js',
-          '<%= appDir %>/themes/material/js/init.js'
-        ],
-        dest: '<%= buildDir %>/material.js'
-      },
-      jsBaggy: {
-        src: [
-          'node_modules/jquery/dist/jquery.js',
-          'node_modules/jquery-ui/jquery-ui.js',
-          '<%= appDir %>/themes/baggy/js/init.js',
-          '<%= appDir %>/themes/_global/js/restoreScroll.js',
-          '<%= appDir %>/themes/baggy/js/autoClose.js',
-          '<%= appDir %>/themes/baggy/js/autoCompleteTags.js',
-          '<%= appDir %>/themes/baggy/js/closeMessage.js',
-          '<%= appDir %>/themes/baggy/js/popupForm.js',
-          '<%= appDir %>/themes/baggy/js/saveLink.js'
-        ],
-        dest: '<%= buildDir %>/baggy.js'
+        separator: ';',
       },
       cssMaterial: {
         src: [
           'node_modules/materialize-css/bin/materialize.css',
-          '<%= appDir %>/themes/material/css/*.css'
+          '<%= appDir %>/themes/material/css/*.css',
         ],
-        dest: '<%= buildDir %>/material.css'
+        dest: '<%= buildDir %>/material.css',
       },
       cssBaggy: {
         src: [
-          '<%= appDir %>/themes/baggy/css/*.css'
+          '<%= appDir %>/themes/baggy/css/*.css',
         ],
-        dest: '<%= buildDir %>/baggy.css'
-      }
+        dest: '<%= buildDir %>/baggy.css',
+      },
     },
     browserify: {
-      '<%= buildDir %>/material.browser.js': ['<%= buildDir %>/material.js'],
-      '<%= buildDir %>/baggy.browser.js': ['<%= buildDir %>/baggy.js']
+      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: {
-          '<%= buildDir %>/themes/material/js/material.min.js':
-            ['<%= buildDir %>/material.browser.js']
-        },
-        options: {
-          sourceMap: true,
-        },
+          '<%= releaseDir %>/themes/material/js/material.min.js':
+            ['<%= buildDir %>/material.browser.js'],
+        }
       },
       baggy: {
         files: {
-          '<%= buildDir %>/themes/baggy/js/baggy.min.js':
-            ['<%= buildDir %>/baggy.browser.js']
-        },
-        options: {
-          sourceMap: true,
-        },
+          '<%= releaseDir %>/themes/baggy/js/baggy.min.js':
+            ['<%= buildDir %>/baggy.browser.js'],
+        }
       },
     },
     copy: {
       pickerjs: {
         expand: true,
-        cwd: 'node_modules/pickadate/lib',
+        cwd: '<%= modulesDir %>/pickadate/lib',
         src: 'picker.js',
-        dest: '<%= buildDir %>'
+        dest: '<%= buildDir %>',
       },
       annotator: {
         expand: true,
-        cwd: 'node_modules/annotator/pkg',
+        cwd: '<%= modulesDir %>/annotator/pkg',
         src: 'annotator.min.js',
-        dest: '<%= buildDir %>/themes/_global/js/'
-      }
-    },
-    symlink: {
+        dest: '<%= buildDir %>/themes/_global/js/',
+      },
       baggyfonts: {
         files: [
           {
             expand: true,
-            overwrite: true,
-            cwd: "<%= appDir %>/lib/icomoon-bower/",
-            src: "fonts",
-            dest: "<%= buildDir %>/themes/baggy/"
+            cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
+            src: 'IcoMoon-Free.ttf',
+            dest: '<%= releaseDir %>/themes/baggy/fonts/',
           },
           {
             expand: true,
-            overwrite: true,
-            cwd: "<%= appDir %>/lib/bower-pt-sans/fonts",
-            src: "*",
-            dest: "<%= buildDir %>/themes/baggy/fonts/"
-          }
-        ]
+            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: "<%= appDir %>/lib/icomoon-bower/",
-            src: "fonts",
-            dest: "<%= buildDir %>/themes/material/"
+            cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
+            src: 'IcoMoon-Free.ttf',
+            dest: '<%= releaseDir %>/themes/material/fonts',
           },
           {
             expand: true,
             overwrite: true,
-            cwd: "node_modules/materialize-css/",
-            src: "font",
-            dest: "<%= buildDir %>/themes/material"
+            cwd: '<%= modulesDir %>/roboto-fontface/fonts/Roboto',
+            src: '*',
+            dest: '<%= releaseDir %>/themes/material/font/roboto',
           },
           {
             expand: true,
             overwrite: true,
-            cwd: "<%= appDir %>/lib/roboto-fontface/fonts/",
-            src: "*",
-            dest: "<%= buildDir %>/themes/material/fonts/roboto/"
+            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/',
           },
-          {
-            expand: true,
-            overwrite: true,
-            cwd: "<%= appDir %>/lib/material-design-icons/iconfont/",
-            src: "*",
-            dest: "<%= buildDir %>/themes/material/fonts/"
-          }
-        ]
+        ],
       },
+    },
+    symlink: {
       pics: {
         files: [
           {
@@ -175,40 +165,53 @@ module.exports = function (grunt) {
             overwrite: true,
             cwd: '<%= appDir %>/themes/_global/',
             src: 'img',
-            dest: '<%= buildDir %>/themes/_global/'
-          }
-        ]
-      }
+            dest: '<%= releaseDir %>/themes/_global/',
+          },
+        ],
+      },
     },
     clean: {
       css: {
-        src: [ '<%= buildDir %>/**/*.css' ]
+        src: ['<%= buildDir %>/**/*.css'],
       },
       js: {
-        src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map']
+        src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'],
       },
       all: {
-        src: ['./<%= buildDir %>']
+        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',
-    ['symlink:baggyfonts', 'symlink:materialfonts']
+    ['copy:baggyfonts', 'copy:materialfonts']
     );
 
   grunt.registerTask(
     'js',
     'Build and install js files',
-    ['clean:js', 'copy:pickerjs', 'concat:jsMaterial', 'concat:jsBaggy', 'browserify', 'uglify']
+    ['clean:js', 'copy:pickerjs', 'browserify', 'uglify']
     );
 
   grunt.registerTask(
     'default',
     'Build and install everything',
-    ['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'symlink']
+    ['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'copy', 'symlink']
     );
 
   grunt.registerTask(
@@ -216,4 +219,12 @@ module.exports = function (grunt) {
     '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');
+};