| 
									
										
										
										
											2021-06-24 12:12:13 +02:00
										 |  |  | /*jshint esversion: 6 */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  | module.exports = function(grunt) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const path = require('path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   grunt.initConfig({ | 
					
						
							|  |  |  |     pkg: grunt.file.readJSON('package.json'), | 
					
						
							|  |  |  |     watch: { | 
					
						
							|  |  |  |       scripts: { | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  |         files: ['gruntfile.js', 'src/**'], | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |         tasks: ['eslint', 'copy', 'concat', 'svg2jinja', 'uglify', 'image', 'less:development', 'less:production'] | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-08-01 16:04:19 +02:00
										 |  |  |     eslint: { | 
					
						
							|  |  |  |       options: { | 
					
						
							| 
									
										
										
										
											2021-10-22 10:03:45 +02:00
										 |  |  |         overrideConfigFile: '.eslintrc.json', | 
					
						
							| 
									
										
										
										
											2021-08-24 09:52:40 +02:00
										 |  |  |         failOnError: false | 
					
						
							| 
									
										
										
										
											2021-08-01 16:04:19 +02:00
										 |  |  |       }, | 
					
						
							|  |  |  |       target: [ | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |         'svg4web.svgo.js', | 
					
						
							| 
									
										
										
										
											2021-08-01 16:04:19 +02:00
										 |  |  |         'src/js/main/*.js', | 
					
						
							|  |  |  |         'src/js/head/*.js', | 
					
						
							|  |  |  |         '../__common__/js/*.js' | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |     stylelint: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         formatter: 'unix', | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       src: [ | 
					
						
							|  |  |  |         'src/less/**/*.less', | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-06-16 10:31:11 +02:00
										 |  |  |     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', | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2019-07-23 14:13:38 +02:00
										 |  |  |     concat: { | 
					
						
							|  |  |  |       head_and_body: { | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |           separator: ';' | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         files: { | 
					
						
							| 
									
										
										
										
											2021-10-01 16:33:31 +02:00
										 |  |  |           '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'] | 
					
						
							| 
									
										
										
										
											2019-07-23 14:13:38 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     uglify: { | 
					
						
							|  |  |  |       options: { | 
					
						
							| 
									
										
										
										
											2019-07-23 14:13:38 +02:00
										 |  |  |         output: { | 
					
						
							|  |  |  | 	        comments: 'some' | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2018-08-09 16:13:50 +02:00
										 |  |  |         ie8: false, | 
					
						
							|  |  |  |         warnings: true, | 
					
						
							|  |  |  |         compress: false, | 
					
						
							|  |  |  |         mangle: true, | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |         sourceMap: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       dist: { | 
					
						
							|  |  |  |         files: { | 
					
						
							| 
									
										
										
										
											2021-10-01 16:33:31 +02:00
										 |  |  |           'js/searxng.head.min.js': ['js/searxng.head.js'], | 
					
						
							|  |  |  |           'js/searxng.min.js': ['js/searxng.js'] | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |     image: { | 
					
						
							|  |  |  |       svg4web: { | 
					
						
							| 
									
										
										
										
											2021-11-07 16:45:00 +01:00
										 |  |  |         options: { | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |           svgo: ['--config', 'svg4web.svgo.js'] | 
					
						
							| 
									
										
										
										
											2021-11-07 16:45:00 +01:00
										 |  |  |         }, | 
					
						
							|  |  |  |         files: { | 
					
						
							|  |  |  |           '../../../templates/__common__/searxng-wordmark.min.svg': 'src/svg/searxng-wordmark.svg' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-06-16 13:28:08 +02:00
										 |  |  |     less: { | 
					
						
							|  |  |  |       development: { | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |           paths: ["less"], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         files: { | 
					
						
							| 
									
										
										
										
											2021-10-01 16:33:31 +02:00
										 |  |  |           "css/searxng.css": "src/less/style.less", | 
					
						
							|  |  |  |           "css/searxng-rtl.css": "src/less/style-rtl.less" | 
					
						
							| 
									
										
										
										
											2021-06-16 13:28:08 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       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: { | 
					
						
							| 
									
										
										
										
											2021-10-01 16:33:31 +02:00
										 |  |  |           "css/searxng.min.css": "src/less/style.less", | 
					
						
							|  |  |  |           "css/searxng-rtl.min.css": "src/less/style-rtl.less" | 
					
						
							| 
									
										
										
										
											2021-06-16 13:28:08 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  |     svg2jinja: { | 
					
						
							|  |  |  |       all: { | 
					
						
							|  |  |  |         src: { | 
					
						
							|  |  |  |           'warning': 'node_modules/ionicons/dist/svg/alert-outline.svg', | 
					
						
							|  |  |  |           'close': 'node_modules/ionicons/dist/svg/close-outline.svg', | 
					
						
							|  |  |  |           'chevron-up-outline': 'node_modules/ionicons/dist/svg/chevron-up-outline.svg', | 
					
						
							|  |  |  |           'chevron-right': 'node_modules/ionicons/dist/svg/chevron-forward-outline.svg', | 
					
						
							|  |  |  |           'chevron-left': 'node_modules/ionicons/dist/svg/chevron-back-outline.svg', | 
					
						
							|  |  |  |           'menu-outline': 'node_modules/ionicons/dist/svg/menu-outline.svg', | 
					
						
							|  |  |  |           'ellipsis-vertical-outline': 'node_modules/ionicons/dist/svg/ellipsis-vertical-outline.svg', | 
					
						
							|  |  |  |           'magnet-outline': 'node_modules/ionicons/dist/svg/magnet-outline.svg', | 
					
						
							|  |  |  |           'globe-outline': 'node_modules/ionicons/dist/svg/globe-outline.svg', | 
					
						
							|  |  |  |           'search-outline': 'node_modules/ionicons/dist/svg/search-outline.svg', | 
					
						
							|  |  |  |           'image-outline': 'node_modules/ionicons/dist/svg/image-outline.svg', | 
					
						
							|  |  |  |           'play-outline': 'node_modules/ionicons/dist/svg/play-outline.svg', | 
					
						
							|  |  |  |           'newspaper-outline': 'node_modules/ionicons/dist/svg/newspaper-outline.svg', | 
					
						
							|  |  |  |           'location-outline': 'node_modules/ionicons/dist/svg/location-outline.svg', | 
					
						
							|  |  |  |           'musical-notes-outline': 'node_modules/ionicons/dist/svg/musical-notes-outline.svg', | 
					
						
							|  |  |  |           'layers-outline': 'node_modules/ionicons/dist/svg/layers-outline.svg', | 
					
						
							|  |  |  |           'school-outline': 'node_modules/ionicons/dist/svg/school-outline.svg', | 
					
						
							|  |  |  |           'file-tray-full-outline': 'node_modules/ionicons/dist/svg/file-tray-full-outline.svg', | 
					
						
							|  |  |  |           'people-outline': 'node_modules/ionicons/dist/svg/people-outline.svg', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         dest: '../../../templates/simple/icons.html', | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   grunt.registerMultiTask('svg2jinja', 'Create Jinja2 macro', function() { | 
					
						
							|  |  |  |     const ejs = require('ejs'), svgo = require('svgo'); | 
					
						
							|  |  |  |     const icons = {} | 
					
						
							|  |  |  |     for(const iconName in this.data.src) { | 
					
						
							|  |  |  |         const svgFileName = this.data.src[iconName]; | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             const svgContent = grunt.file.read(svgFileName, { encoding: 'utf8' }) | 
					
						
							|  |  |  |             const svgoResult = svgo.optimize(svgContent, { | 
					
						
							|  |  |  |               path: svgFileName, | 
					
						
							|  |  |  |               multipass: true, | 
					
						
							|  |  |  |               plugins: [ | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                   name: "removeTitle", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                   name: "removeXMLNS", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                   name: "addAttributesToSVGElement", | 
					
						
							|  |  |  |                   params: { | 
					
						
							| 
									
										
										
										
											2021-11-13 15:51:08 +01:00
										 |  |  |                     attributes: [ | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  |                       { "aria-hidden": "true" } | 
					
						
							|  |  |  |                     ] | 
					
						
							| 
									
										
										
										
											2021-11-13 15:51:08 +01:00
										 |  |  |                   } | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  |                 } | 
					
						
							|  |  |  |               ] | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |             icons[iconName] = svgoResult.data.replace("'", "\\'"); | 
					
						
							|  |  |  |         } catch (err) { | 
					
						
							|  |  |  |           grunt.log.error(err); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const template = `{# this file was generated by searx/static/themes/simple/gruntfile.js #}
 | 
					
						
							|  |  |  | {%- set icons = { | 
					
						
							|  |  |  | <% for (const iconName in icons) { %>  '<%- iconName %>':'<%- icons[iconName] %>', | 
					
						
							|  |  |  | <% } %> | 
					
						
							| 
									
										
										
										
											2021-11-13 15:51:08 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  | -%} | 
					
						
							| 
									
										
										
										
											2021-11-13 15:51:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  | {% macro icon(action, alt) -%} | 
					
						
							|  |  |  |   {{ icons[action] | replace("ionicon", "ion-icon") | safe }} | 
					
						
							|  |  |  | {%- endmacro %} | 
					
						
							| 
									
										
										
										
											2021-11-13 15:51:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  | {% macro icon_small(action) -%} | 
					
						
							|  |  |  |   {{ icons[action] | replace("ionicon", "ion-icon-small") | safe }} | 
					
						
							|  |  |  | {%- endmacro %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% macro icon_big(action, alt) -%} | 
					
						
							|  |  |  |   {{ icons[action] | replace("ionicon", "ion-icon-big") | safe }} | 
					
						
							|  |  |  | {%- endmacro %} | 
					
						
							|  |  |  | `;
 | 
					
						
							|  |  |  |     const result = ejs.render(template, { icons }); | 
					
						
							|  |  |  |     grunt.file.write(this.data.dest, result, { encoding: 'utf8' }); | 
					
						
							|  |  |  |     grunt.log.ok(this.data.dest + " created"); | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   grunt.loadNpmTasks('grunt-contrib-watch'); | 
					
						
							| 
									
										
										
										
											2021-06-16 10:31:11 +02:00
										 |  |  |   grunt.loadNpmTasks('grunt-contrib-copy'); | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |   grunt.loadNpmTasks('grunt-contrib-uglify'); | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |   grunt.loadNpmTasks('grunt-image'); | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  |   grunt.loadNpmTasks('grunt-contrib-jshint'); | 
					
						
							|  |  |  |   grunt.loadNpmTasks('grunt-contrib-concat'); | 
					
						
							|  |  |  |   grunt.loadNpmTasks('grunt-contrib-less'); | 
					
						
							|  |  |  |   grunt.loadNpmTasks('grunt-contrib-cssmin'); | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |   grunt.loadNpmTasks('grunt-stylelint'); | 
					
						
							| 
									
										
										
										
											2021-08-01 16:04:19 +02:00
										 |  |  |   grunt.loadNpmTasks('grunt-eslint'); | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   grunt.registerTask('test', ['jshint']); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |   grunt.registerTask('default', [ | 
					
						
							| 
									
										
										
										
											2021-08-24 09:52:40 +02:00
										 |  |  |     'eslint', | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |     'stylelint', | 
					
						
							|  |  |  |     'copy', | 
					
						
							|  |  |  |     'concat', | 
					
						
							| 
									
										
										
										
											2021-11-13 10:42:07 +01:00
										 |  |  |     'svg2jinja', | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |     'uglify', | 
					
						
							| 
									
										
										
										
											2021-11-14 13:26:12 +01:00
										 |  |  |     'image', | 
					
						
							| 
									
										
										
										
											2021-06-22 13:33:05 +02:00
										 |  |  |     'less:development', | 
					
						
							|  |  |  |     'less:production' | 
					
						
							|  |  |  |   ]); | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:01 +01:00
										 |  |  | }; |