mirror of https://github.com/searxng/searxng.git
227 lines
6.3 KiB
JavaScript
227 lines
6.3 KiB
JavaScript
/*jshint esversion: 6 */
|
|
|
|
module.exports = function(grunt) {
|
|
|
|
const path = require('path');
|
|
|
|
grunt.initConfig({
|
|
pkg: grunt.file.readJSON('package.json'),
|
|
watch: {
|
|
scripts: {
|
|
files: ['src/**'],
|
|
tasks: ['eslint', 'copy', 'concat', 'uglify', 'htmlmin', 'less:development', 'less:production']
|
|
}
|
|
},
|
|
eslint: {
|
|
options: {
|
|
configFile: '.eslintrc.json',
|
|
failOnError: false
|
|
},
|
|
target: [
|
|
'src/js/main/*.js',
|
|
'src/js/head/*.js',
|
|
'../__common__/js/*.js'
|
|
],
|
|
},
|
|
stylelint: {
|
|
options: {
|
|
formatter: 'unix',
|
|
},
|
|
src: [
|
|
'src/less/**/*.less',
|
|
]
|
|
},
|
|
copy: {
|
|
js: {
|
|
expand: true,
|
|
cwd: './node_modules',
|
|
dest: './js/',
|
|
flatten: true,
|
|
filter: 'isFile',
|
|
timestamp: true,
|
|
src: [
|
|
'./leaflet/dist/leaflet.js',
|
|
]
|
|
},
|
|
css: {
|
|
expand: true,
|
|
cwd: './node_modules',
|
|
dest: './css/',
|
|
flatten: true,
|
|
filter: 'isFile',
|
|
timestamp: true,
|
|
src: [
|
|
'./leaflet/dist/leaflet.css',
|
|
]
|
|
},
|
|
leaflet_images: {
|
|
expand: true,
|
|
cwd: './node_modules',
|
|
dest: './css/images/',
|
|
flatten: true,
|
|
filter: 'isFile',
|
|
timestamp: true,
|
|
src: [
|
|
'./leaflet/dist/images/*.png',
|
|
]
|
|
},
|
|
},
|
|
concat: {
|
|
head_and_body: {
|
|
options: {
|
|
separator: ';'
|
|
},
|
|
files: {
|
|
'js/searxng.head.js': ['src/js/head/*.js'],
|
|
'js/searxng.js': ['src/js/main/*.js', '../__common__/js/*.js', './node_modules/autocomplete-js/dist/autocomplete.js']
|
|
}
|
|
}
|
|
},
|
|
uglify: {
|
|
options: {
|
|
output: {
|
|
comments: 'some'
|
|
},
|
|
ie8: false,
|
|
warnings: true,
|
|
compress: false,
|
|
mangle: true,
|
|
sourceMap: true
|
|
},
|
|
dist: {
|
|
files: {
|
|
'js/searxng.head.min.js': ['js/searxng.head.js'],
|
|
'js/searxng.min.js': ['js/searxng.js']
|
|
}
|
|
}
|
|
},
|
|
htmlmin: {
|
|
dist: {
|
|
options: {
|
|
removeComments: true,
|
|
collapseWhitespace: true
|
|
},
|
|
files: {
|
|
'../../../templates/__common__/searxng-wordmark.min.svg': 'src/svg/searxng-wordmark.svg'
|
|
}
|
|
}
|
|
},
|
|
webfont: {
|
|
icons: {
|
|
// src: 'node_modules/ionicons-npm/src/*.svg',
|
|
src: [
|
|
'node_modules/ionicons-npm/src/navicon-round.svg',
|
|
'node_modules/ionicons-npm/src/search.svg',
|
|
'node_modules/ionicons-npm/src/play.svg',
|
|
'node_modules/ionicons-npm/src/link.svg',
|
|
'node_modules/ionicons-npm/src/chevron-up.svg',
|
|
'node_modules/ionicons-npm/src/chevron-left.svg',
|
|
'node_modules/ionicons-npm/src/chevron-right.svg',
|
|
'node_modules/ionicons-npm/src/arrow-down-a.svg',
|
|
'node_modules/ionicons-npm/src/arrow-up-a.svg',
|
|
'node_modules/ionicons-npm/src/arrow-swap.svg',
|
|
'node_modules/ionicons-npm/src/telephone.svg',
|
|
'node_modules/ionicons-npm/src/android-arrow-dropdown.svg',
|
|
'node_modules/ionicons-npm/src/android-globe.svg',
|
|
'node_modules/ionicons-npm/src/android-time.svg',
|
|
'node_modules/ionicons-npm/src/location.svg',
|
|
'node_modules/ionicons-npm/src/alert-circled.svg',
|
|
'node_modules/ionicons-npm/src/android-alert.svg',
|
|
'node_modules/ionicons-npm/src/ios-film-outline.svg',
|
|
'node_modules/ionicons-npm/src/music-note.svg',
|
|
'node_modules/ionicons-npm/src/ion-close-round.svg',
|
|
'node_modules/ionicons-npm/src/android-more-vertical.svg',
|
|
'src/fonts/magnet.svg',
|
|
'node_modules/ionicons-npm/src/android-close.svg',
|
|
],
|
|
dest: 'fonts',
|
|
destLess: 'src/generated',
|
|
options: {
|
|
font: 'ion',
|
|
hashes : true,
|
|
syntax: 'bem',
|
|
styles : 'font,icon',
|
|
types : 'eot,woff2,woff,ttf,svg',
|
|
order : 'eot,woff2,woff,ttf,svg',
|
|
stylesheets : ['css', 'less'],
|
|
relativeFontPath : '../fonts/',
|
|
autoHint : false,
|
|
normalize : false,
|
|
// ligatures : true,
|
|
optimize : true,
|
|
// fontHeight : 400,
|
|
rename : function(name) {
|
|
basename = path.basename(name);
|
|
if (basename === 'android-alert.svg') {
|
|
return 'error.svg';
|
|
}
|
|
if (basename === 'alert-circled.svg') {
|
|
return 'warning.svg';
|
|
}
|
|
if (basename === 'ion-close-round.svg') {
|
|
return 'close.svg';
|
|
}
|
|
return basename.replace(/(ios|md|android)-/i, '');
|
|
},
|
|
templateOptions: {
|
|
baseClass: 'ion-icon',
|
|
classPrefix: 'ion-'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
less: {
|
|
development: {
|
|
options: {
|
|
paths: ["less"],
|
|
},
|
|
files: {
|
|
"css/searxng.css": "src/less/style.less",
|
|
"css/searxng-rtl.css": "src/less/style-rtl.less"
|
|
}
|
|
},
|
|
production: {
|
|
options: {
|
|
paths: ["less"],
|
|
plugins: [
|
|
new (require('less-plugin-clean-css'))()
|
|
],
|
|
sourceMap: true,
|
|
sourceMapURL: (name) => { const s = name.split('/'); return s[s.length - 1] + '.map';},
|
|
outputSourceFiles: false,
|
|
sourceMapRootpath: '../',
|
|
},
|
|
files: {
|
|
"css/searxng.min.css": "src/less/style.less",
|
|
"css/searxng-rtl.min.css": "src/less/style-rtl.less"
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
|
grunt.loadNpmTasks('grunt-contrib-htmlmin');
|
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
|
grunt.loadNpmTasks('grunt-contrib-less');
|
|
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
|
grunt.loadNpmTasks('grunt-webfont');
|
|
grunt.loadNpmTasks('grunt-stylelint');
|
|
grunt.loadNpmTasks('grunt-eslint');
|
|
|
|
grunt.registerTask('test', ['jshint']);
|
|
|
|
grunt.registerTask('default', [
|
|
'eslint',
|
|
'stylelint',
|
|
'copy',
|
|
'concat',
|
|
'uglify',
|
|
'htmlmin',
|
|
'less:development',
|
|
'less:production'
|
|
]);
|
|
};
|