forked from zaclys/searxng
		
	[mod] simple theme: use sharp instead of convert to create .png from .svg
define a custom grunt task, since grunt-sharp is too old (it can't be installed). in gruntfile.js, the image tasks are moved at the end the build chain. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
		
							parent
							
								
									8c4c4259d4
								
							
						
					
					
						commit
						59f4c792b4
					
				
					 3 changed files with 42 additions and 30 deletions
				
			
		
							
								
								
									
										30
									
								
								manage
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								manage
									
										
									
									
									
								
							|  | @ -708,42 +708,12 @@ themes.oscar() { | |||
| themes.simple() { | ||||
|     local static="searx/static/themes/simple" | ||||
|     (   set -e | ||||
|         convert_if_newer "src/brand/searxng-wordmark.svg" "$static/img/favicon.png" \ | ||||
|                          -transparent white -resize 64x64 | ||||
|         build_msg GRUNT "theme: simple" | ||||
|         npm --prefix searx/static/themes/simple run build | ||||
|     ) | ||||
|     dump_return $? | ||||
| } | ||||
| 
 | ||||
| convert_if_newer() { | ||||
| 
 | ||||
|     # usage: convert_if_newer <origfile> <outfile> [<options>, ...] | ||||
|     # | ||||
|     #    convert_if_newer "path/to/origin.svg" "path/to/converted.png" -resize 100x100 | ||||
|     # | ||||
|     # Run's ImageMagik' convert comand to generate <outfile> from <origfile>, if | ||||
|     # <origfile> is newer than <outfile>.  The command line is to convert is:: | ||||
|     # | ||||
|     #    convert <origfile> [<options>, ...] <outfile> | ||||
| 
 | ||||
|     local src_file="$1" && shift | ||||
|     local dst_file="$1" && shift | ||||
| 
 | ||||
|     if [[ "${src_file}" -nt "${dst_file}" ]]; then | ||||
|         if ! required_commands convert; then | ||||
|             info_msg "to install build tools use::" | ||||
|             info_msg "   sudo -H ./utils/searx.sh install buildhost" | ||||
|             die 1 "install needed build tools first" | ||||
|         fi | ||||
|         build_msg CONVERT "${src_file}" "$@" "${dst_file}" | ||||
|         convert "${src_file}" "$@" "${dst_file}" | ||||
|     else | ||||
|         build_msg CONVERT "${dst_file} (up-to-date)" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| PYLINT_FILES=() | ||||
| while IFS= read -r line; do | ||||
|    PYLINT_FILES+=("$line") | ||||
|  |  | |||
|  | @ -2,6 +2,8 @@ | |||
| 
 | ||||
| module.exports = function(grunt) { | ||||
| 
 | ||||
|   const eachAsync = require('each-async'); | ||||
| 
 | ||||
|   grunt.initConfig({ | ||||
| 
 | ||||
|     _brand: '../../../../src/brand', | ||||
|  | @ -19,6 +21,7 @@ module.exports = function(grunt) { | |||
|           'less:development', | ||||
|           'less:production', | ||||
|           'image', | ||||
|           'svg2png', | ||||
|           'svg2jinja' | ||||
|         ] | ||||
|       } | ||||
|  | @ -148,6 +151,13 @@ module.exports = function(grunt) { | |||
|         } | ||||
|       } | ||||
|     }, | ||||
|     svg2png: { | ||||
|       favicon: { | ||||
|         files: { | ||||
|           'img/favicon.png': '<%= _brand %>/searxng-wordmark.svg' | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     svg2jinja: { | ||||
|       all: { | ||||
|         src: { | ||||
|  | @ -232,6 +242,36 @@ module.exports = function(grunt) { | |||
|     grunt.log.ok(this.data.dest + " created"); | ||||
|   }); | ||||
| 
 | ||||
|   grunt.registerMultiTask('svg2png', 'Convert SVG to PNG', function () { | ||||
|     const sharp = require('sharp'), done = this.async(); | ||||
|     eachAsync(this.files, async (file, _index, next) => { | ||||
|       try { | ||||
|         if (file.src.length != 1) { | ||||
|           next("this task supports only one source per destination"); | ||||
|         } | ||||
|         const info = await sharp(file.src[0]) | ||||
|           .png({ | ||||
|             force: true, | ||||
|             compressionLevel: 9, | ||||
|             palette: true, | ||||
|           }) | ||||
|           .toFile(file.dest); | ||||
|         grunt.log.ok(file.dest + ' created (' + info.size + ' bytes, ' + info.width + 'px * ' + info.height + 'px)'); | ||||
|         next(); | ||||
|       } catch (error) { | ||||
|         grunt.fatal(error); | ||||
|         next(error); | ||||
|       } | ||||
|     }, error => { | ||||
|       if (error) { | ||||
|         grunt.fatal(error); | ||||
|         done(error); | ||||
|       } else { | ||||
|         done(); | ||||
|       } | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   grunt.loadNpmTasks('grunt-contrib-watch'); | ||||
|   grunt.loadNpmTasks('grunt-contrib-copy'); | ||||
|   grunt.loadNpmTasks('grunt-contrib-uglify'); | ||||
|  | @ -254,6 +294,7 @@ module.exports = function(grunt) { | |||
|     'less:development', | ||||
|     'less:production', | ||||
|     'image', | ||||
|     'svg2png', | ||||
|     'svg2jinja', | ||||
|   ]); | ||||
| }; | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
|     "ionicons": "^6.0.0", | ||||
|     "less": "^4.1.1", | ||||
|     "less-plugin-clean-css": "^1.5.1", | ||||
|     "sharp": "^0.29.3", | ||||
|     "stylelint": "^13.13.1", | ||||
|     "stylelint-config-standard": "^22.0.0", | ||||
|     "ejs": "^3.1.6", | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Alexandre Flament
						Alexandre Flament