Merge pull request #151 from searxng/mod_oscar
make themes: 2 node_modules directories instead of 3
							
								
								
									
										2
									
								
								.github/workflows/integration.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -55,7 +55,7 @@ jobs: | |||||||
|     - name: Checkout |     - name: Checkout | ||||||
|       uses: actions/checkout@v2 |       uses: actions/checkout@v2 | ||||||
|     - name: Install Ubuntu packages |     - name: Install Ubuntu packages | ||||||
|       run: sudo ./utils/searx.sh install packages |       run: sudo ./utils/searx.sh install buildhost | ||||||
|     - name: Install node dependencies |     - name: Install node dependencies | ||||||
|       run: make V=1 node.env |       run: make V=1 node.env | ||||||
|     - name: Build themes |     - name: Build themes | ||||||
|  | |||||||
							
								
								
									
										53
									
								
								manage
									
									
									
									
									
								
							
							
						
						| @ -13,7 +13,6 @@ source_dot_config | |||||||
| 
 | 
 | ||||||
| PYOBJECTS="searx" | PYOBJECTS="searx" | ||||||
| PY_SETUP_EXTRAS='[test]' | PY_SETUP_EXTRAS='[test]' | ||||||
| NPM_PACKAGES="less@2.7 less-plugin-clean-css grunt-cli" |  | ||||||
| GECKODRIVER_VERSION="v0.28.0" | GECKODRIVER_VERSION="v0.28.0" | ||||||
| # SPHINXOPTS= | # SPHINXOPTS= | ||||||
| 
 | 
 | ||||||
| @ -296,43 +295,29 @@ gecko.driver() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| node.env() { | node.env() { | ||||||
|     local err=0 |     if ! required_commands npm fontforge ttfautohint; then | ||||||
|     pushd "${REPO_ROOT}" &> /dev/null |         info_msg "to install build tools use::" | ||||||
|     # shellcheck disable=SC2230 |         info_msg "   sudo -H ./utils/searx.sh install buildhost" | ||||||
|     which npm &> /dev/null || die 1 'node.env - npm is not found!' |         die 1 "install needed build tools first" | ||||||
|  |     fi | ||||||
| 
 | 
 | ||||||
|     (   set -e |     (   set -e | ||||||
|         # shellcheck disable=SC2030 |  | ||||||
|         PATH="$(npm bin):$PATH" |  | ||||||
|         export PATH |  | ||||||
| 
 | 
 | ||||||
|         build_msg INSTALL "npm install $NPM_PACKAGES" |         build_msg INSTALL "searx/static/themes/oscar/package.json" | ||||||
|         # shellcheck disable=SC2086 |         npm --prefix searx/static/themes/oscar install | ||||||
|         npm install $NPM_PACKAGES |  | ||||||
| 
 | 
 | ||||||
|         cd "${REPO_ROOT}/searx/static/themes/oscar" |         build_msg INSTALL "searx/static/themes/simple/package.json" | ||||||
|         build_msg INSTALL "($(pwd)) npm install" |         npm --prefix searx/static/themes/simple install | ||||||
|         npm install |  | ||||||
| 
 |  | ||||||
|         build_msg INSTALL "($(pwd)) npm install" |  | ||||||
|         cd "${REPO_ROOT}/searx/static/themes/simple" |  | ||||||
|         npm install |  | ||||||
|     ) |     ) | ||||||
|     err=$? |     dump_return $? | ||||||
|     popd &> /dev/null |  | ||||||
|     dump_return "$err" |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| node.clean() { | node.clean() { | ||||||
| 
 |  | ||||||
|     build_msg CLEAN "locally installed npm dependencies" |     build_msg CLEAN "locally installed npm dependencies" | ||||||
|     rm -rf \ |     (   set -e | ||||||
|        ./node_modules  \ |         npm --prefix searx/static/themes/oscar run clean | ||||||
|        ./package-lock.json \ |         npm --prefix searx/static/themes/simple run clean | ||||||
|        ./searx/static/themes/oscar/package-lock.json \ |     ) | ||||||
|        ./searx/static/themes/oscar/node_modules \ |  | ||||||
|        ./searx/static/themes/simple/package-lock.json \ |  | ||||||
|        ./searx/static/themes/simple/node_modules |  | ||||||
|     dump_return $? |     dump_return $? | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -481,16 +466,14 @@ themes.all() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| themes.oscar() { | themes.oscar() { | ||||||
|     local gruntfile=searx/static/themes/oscar/gruntfile.js |     build_msg GRUNT "theme: oscar" | ||||||
|     build_msg GRUNT "${gruntfile}" |     npm --prefix searx/static/themes/oscar run build | ||||||
|     PATH="$(npm bin):$PATH" grunt --gruntfile "${gruntfile}" |  | ||||||
|     dump_return $? |     dump_return $? | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| themes.simple() { | themes.simple() { | ||||||
|     local gruntfile=searx/static/themes/simple/gruntfile.js |     build_msg GRUNT "theme: simple" | ||||||
|     build_msg GRUNT "${gruntfile}" |     npm --prefix searx/static/themes/simple run build | ||||||
|     PATH="$(npm bin):$PATH" grunt --gruntfile "${gruntfile}" |  | ||||||
|     dump_return $? |     dump_return $? | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,23 +1,27 @@ | |||||||
| { | { | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "grunt": "^1.3.0", |         "grunt": "~1.4.1", | ||||||
|         "grunt-cli": "^1.3.2", |         "grunt-cli": "^1.4.3", | ||||||
|         "grunt-contrib-concat": "~1.0.1", |         "grunt-contrib-concat": "~1.0.1", | ||||||
|         "grunt-contrib-copy": "^1.0.0", |         "grunt-contrib-copy": "^1.0.0", | ||||||
|         "grunt-contrib-jshint": "~3.0.0", |         "grunt-contrib-jshint": "~3.0.0", | ||||||
|         "grunt-contrib-less": "~3.0.0", |         "grunt-contrib-less": "~3.0.0", | ||||||
|         "grunt-contrib-uglify": "~5.0.0", |         "grunt-contrib-uglify": "~5.0.1", | ||||||
|         "grunt-contrib-watch": "~1.1.0" |         "grunt-contrib-watch": "~1.1.0", | ||||||
|     }, |         "jslint": "^0.12.1", | ||||||
|     "scripts": { |         "less": "^4.1.1", | ||||||
|         "build": "npm install && grunt", |         "less-plugin-clean-css": "^1.5.1" | ||||||
|         "start": "grunt watch", |  | ||||||
|         "test": "grunt" |  | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "bootstrap": "^3.4.1", |         "bootstrap": "^3.4.1", | ||||||
|         "corejs-typeahead": "^1.3.1", |         "corejs-typeahead": "^1.3.1", | ||||||
|         "jquery": "^3.6.0", |         "jquery": "^3.6.0", | ||||||
|         "leaflet": "^1.7.1" |         "leaflet": "^1.7.1" | ||||||
|  |     }, | ||||||
|  |     "scripts": { | ||||||
|  |         "all": "npm install && grunt", | ||||||
|  |         "build": "grunt", | ||||||
|  |         "watch": "grunt watch", | ||||||
|  |         "clean": "rm -Rf node_modules package-lock.json" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								searx/static/themes/simple/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1 +1,2 @@ | |||||||
| /node_modules | /node_modules | ||||||
|  | ion.less | ||||||
|  | |||||||
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 696 B | 
| Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 618 B After Width: | Height: | Size: 618 B | 
| @ -1,4 +1,4 @@ | |||||||
| /*! searx | 09-06-2021 | https://github.com/searxng/searxng */ | /*! searx | 16-06-2021 | https://github.com/searxng/searxng */ | ||||||
| /* | /* | ||||||
| * searx, A privacy-respecting, hackable metasearch engine | * searx, A privacy-respecting, hackable metasearch engine | ||||||
| * | * | ||||||
| @ -1672,14 +1672,13 @@ td:hover .engine-tooltip, | |||||||
| } | } | ||||||
| @font-face { | @font-face { | ||||||
|   font-family: "ion"; |   font-family: "ion"; | ||||||
|   src: url("../fonts/ion.eot?ce7a0ead692560b4405a96d5b8471f51"); |   src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a"); | ||||||
|   src: url("../fonts/ion.eot?#iefix") format("embedded-opentype"), url("../fonts/ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"), url("../fonts/ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"), url("../fonts/ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"), url("../fonts/ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg"); |   src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a#iefix") format("embedded-opentype"), url("../fonts/ion.woff2?14747ff3e5db3853c40bc9540e9f6c3a") format("woff2"), url("../fonts/ion.woff?14747ff3e5db3853c40bc9540e9f6c3a") format("woff"), url("../fonts/ion.ttf?14747ff3e5db3853c40bc9540e9f6c3a") format("truetype"), url("../fonts/ion.svg?14747ff3e5db3853c40bc9540e9f6c3a#ion") format("svg"); | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
| } | } | ||||||
| .ion-icon { | .ion-icon { | ||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   vertical-align: middle; |  | ||||||
|   line-height: 1; |   line-height: 1; | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
| @ -1758,7 +1757,6 @@ td:hover .engine-tooltip, | |||||||
| } | } | ||||||
| .ion-icon-big { | .ion-icon-big { | ||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   vertical-align: middle; |  | ||||||
|   line-height: 1; |   line-height: 1; | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| /*! searx | 09-06-2021 | https://github.com/searxng/searxng */ | /*! searx | 16-06-2021 | https://github.com/searxng/searxng */ | ||||||
| /* | /* | ||||||
| * searx, A privacy-respecting, hackable metasearch engine | * searx, A privacy-respecting, hackable metasearch engine | ||||||
| * | * | ||||||
| @ -1672,14 +1672,13 @@ td:hover .engine-tooltip, | |||||||
| } | } | ||||||
| @font-face { | @font-face { | ||||||
|   font-family: "ion"; |   font-family: "ion"; | ||||||
|   src: url("../fonts/ion.eot?ce7a0ead692560b4405a96d5b8471f51"); |   src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a"); | ||||||
|   src: url("../fonts/ion.eot?#iefix") format("embedded-opentype"), url("../fonts/ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"), url("../fonts/ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"), url("../fonts/ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"), url("../fonts/ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg"); |   src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a#iefix") format("embedded-opentype"), url("../fonts/ion.woff2?14747ff3e5db3853c40bc9540e9f6c3a") format("woff2"), url("../fonts/ion.woff?14747ff3e5db3853c40bc9540e9f6c3a") format("woff"), url("../fonts/ion.ttf?14747ff3e5db3853c40bc9540e9f6c3a") format("truetype"), url("../fonts/ion.svg?14747ff3e5db3853c40bc9540e9f6c3a#ion") format("svg"); | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
| } | } | ||||||
| .ion-icon { | .ion-icon { | ||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   vertical-align: middle; |  | ||||||
|   line-height: 1; |   line-height: 1; | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
| @ -1758,7 +1757,6 @@ td:hover .engine-tooltip, | |||||||
| } | } | ||||||
| .ion-icon-big { | .ion-icon-big { | ||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   vertical-align: middle; |  | ||||||
|   line-height: 1; |   line-height: 1; | ||||||
|   font-weight: normal; |   font-weight: normal; | ||||||
|   font-style: normal; |   font-style: normal; | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								searx/static/themes/simple/css/searx.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,14 +1,15 @@ | |||||||
| /* Generated by grunt-webfont */ | /* Generated by grunt-webfont */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| @font-face { | @font-face { | ||||||
| 	font-family:"ion"; | 	font-family:"ion"; | ||||||
| 	src:url("../fonts/ion.eot?ce7a0ead692560b4405a96d5b8471f51"); | 	src:url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a"); | ||||||
| 	src:url("../fonts/ion.eot?#iefix") format("embedded-opentype"), | 	src:url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a#iefix") format("embedded-opentype"), | ||||||
| 		url("../fonts/ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"), | 		url("../fonts/ion.woff2?14747ff3e5db3853c40bc9540e9f6c3a") format("woff2"), | ||||||
| 		url("../fonts/ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"), | 		url("../fonts/ion.woff?14747ff3e5db3853c40bc9540e9f6c3a") format("woff"), | ||||||
| 		url("../fonts/ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"), | 		url("../fonts/ion.ttf?14747ff3e5db3853c40bc9540e9f6c3a") format("truetype"), | ||||||
| 		url("../fonts/ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg"); | 		url("../fonts/ion.svg?14747ff3e5db3853c40bc9540e9f6c3a#ion") format("svg"); | ||||||
| 	font-weight:normal; | 	font-weight:normal; | ||||||
| 	font-style:normal; | 	font-style:normal; | ||||||
| } | } | ||||||
| @ -18,7 +19,6 @@ | |||||||
| 		font-family:"ion"; | 		font-family:"ion"; | ||||||
| 	 | 	 | ||||||
| 	display:inline-block; | 	display:inline-block; | ||||||
| 	vertical-align:middle; |  | ||||||
| 	line-height:1; | 	line-height:1; | ||||||
| 	font-weight:normal; | 	font-weight:normal; | ||||||
| 	font-style:normal; | 	font-style:normal; | ||||||
|  | |||||||
| @ -58,14 +58,15 @@ | |||||||
| 		/* Generated by grunt-webfont */ | 		/* Generated by grunt-webfont */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| @font-face { | @font-face { | ||||||
| 	font-family:"ion"; | 	font-family:"ion"; | ||||||
| 	src:url("ion.eot?ce7a0ead692560b4405a96d5b8471f51"); | 	src:url("ion.eot?14747ff3e5db3853c40bc9540e9f6c3a"); | ||||||
| 	src:url("ion.eot?#iefix") format("embedded-opentype"), | 	src:url("ion.eot?14747ff3e5db3853c40bc9540e9f6c3a#iefix") format("embedded-opentype"), | ||||||
| 		url("ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"), | 		url("ion.woff2?14747ff3e5db3853c40bc9540e9f6c3a") format("woff2"), | ||||||
| 		url("ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"), | 		url("ion.woff?14747ff3e5db3853c40bc9540e9f6c3a") format("woff"), | ||||||
| 		url("ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"), | 		url("ion.ttf?14747ff3e5db3853c40bc9540e9f6c3a") format("truetype"), | ||||||
| 		url("ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg"); | 		url("ion.svg?14747ff3e5db3853c40bc9540e9f6c3a#ion") format("svg"); | ||||||
| 	font-weight:normal; | 	font-weight:normal; | ||||||
| 	font-style:normal; | 	font-style:normal; | ||||||
| } | } | ||||||
| @ -75,7 +76,6 @@ | |||||||
| 		font-family:"ion"; | 		font-family:"ion"; | ||||||
| 	 | 	 | ||||||
| 	display:inline-block; | 	display:inline-block; | ||||||
| 	vertical-align:middle; |  | ||||||
| 	line-height:1; | 	line-height:1; | ||||||
| 	font-weight:normal; | 	font-weight:normal; | ||||||
| 	font-style:normal; | 	font-style:normal; | ||||||
|  | |||||||
| @ -1,12 +1,12 @@ | |||||||
| <?xml version="1.0" standalone="no"?> | <?xml version="1.0" standalone="no"?> | ||||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > | ||||||
| <!-- | <!-- | ||||||
| 2018-8-11: Created with FontForge (http://fontforge.org) | 2021-6-16: Created with FontForge (http://fontforge.org) | ||||||
| --> | --> | ||||||
| <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> | ||||||
| <metadata> | <metadata> | ||||||
| Created by FontForge 20170924 at Sat Aug 11 14:26:20 2018 | Created by FontForge 20190801 at Wed Jun 16 14:20:50 2021 | ||||||
|  By alexandre,,, |  By alexandre | ||||||
| 
 | 
 | ||||||
| </metadata> | </metadata> | ||||||
| <defs> | <defs> | ||||||
|  | |||||||
| Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB | 
| @ -6,12 +6,12 @@ module.exports = function(grunt) { | |||||||
|     pkg: grunt.file.readJSON('package.json'), |     pkg: grunt.file.readJSON('package.json'), | ||||||
|     watch: { |     watch: { | ||||||
|       scripts: { |       scripts: { | ||||||
|         files: ['<%= jshint.files %>', 'less/*.less'], |         files: ['src/**'], | ||||||
|         tasks: ['jshint', 'concat', 'uglify', 'webfont', 'less:development', 'less:production'] |         tasks: ['jshint', 'concat', 'uglify', 'webfont', 'less:development', 'less:production'] | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     jshint: { |     jshint: { | ||||||
|       files: ['js/searx_src/*.js', 'js/searx_header/*.js', '../__common__/js/*.js'], |       files: ['src/js/main/*.js', 'src/js/head/*.js', '../__common__/js/*.js'], | ||||||
|       options: { |       options: { | ||||||
|         reporterOutput: "", |         reporterOutput: "", | ||||||
|         proto: true, |         proto: true, | ||||||
| @ -23,14 +23,49 @@ module.exports = function(grunt) { | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     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: { |     concat: { | ||||||
|       head_and_body: { |       head_and_body: { | ||||||
|         options: { |         options: { | ||||||
|           separator: ';' |           separator: ';' | ||||||
|         }, |         }, | ||||||
|         files: { |         files: { | ||||||
|           'js/searx.head.js': ['js/searx_head/*.js'], |           'js/searx.head.js': ['src/js/head/*.js'], | ||||||
|           'js/searx.js': ['js/searx_src/*.js', '../__common__/js/*.js'] |           'js/searx.js': ['src/js/main/*.js', '../__common__/js/*.js', './node_modules/autocomplete-js/dist/autocomplete.js'] | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @ -53,35 +88,6 @@ module.exports = function(grunt) { | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     less: { |  | ||||||
|       development: { |  | ||||||
|         options: { |  | ||||||
|           paths: ["less"], |  | ||||||
|           banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | <%= process.env.GIT_URL %> */\n' |  | ||||||
|         }, |  | ||||||
|         files: { |  | ||||||
|           "css/searx.css": "less/style.less", |  | ||||||
|           "css/searx-rtl.css": "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: '../', |  | ||||||
|           banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | <%= process.env.GIT_URL %> */\n' |  | ||||||
|         }, |  | ||||||
|         files: { |  | ||||||
|           "css/searx.min.css": "less/style.less", |  | ||||||
|           "css/searx-rtl.min.css": "less/style-rtl.less" |  | ||||||
|         } |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     webfont: { |     webfont: { | ||||||
|       icons: { |       icons: { | ||||||
|         // src: 'node_modules/ionicons-npm/src/*.svg',
 |         // src: 'node_modules/ionicons-npm/src/*.svg',
 | ||||||
| @ -107,11 +113,11 @@ module.exports = function(grunt) { | |||||||
|           'node_modules/ionicons-npm/src/music-note.svg', |           'node_modules/ionicons-npm/src/music-note.svg', | ||||||
|           'node_modules/ionicons-npm/src/ion-close-round.svg', |           'node_modules/ionicons-npm/src/ion-close-round.svg', | ||||||
|           'node_modules/ionicons-npm/src/android-more-vertical.svg', |           'node_modules/ionicons-npm/src/android-more-vertical.svg', | ||||||
|           'magnet.svg', |           'src/fonts/magnet.svg', | ||||||
|           'node_modules/ionicons-npm/src/android-close.svg',	   |           'node_modules/ionicons-npm/src/android-close.svg',	   | ||||||
|         ], |         ], | ||||||
|         dest: 'fonts', |         dest: 'fonts', | ||||||
|         destLess: 'less', |         destLess: '.', | ||||||
|         options: { |         options: { | ||||||
|           font: 'ion', |           font: 'ion', | ||||||
|           hashes : true, |           hashes : true, | ||||||
| @ -145,10 +151,40 @@ module.exports = function(grunt) { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     }, | ||||||
|  |     less: { | ||||||
|  |       development: { | ||||||
|  |         options: { | ||||||
|  |           paths: ["less"], | ||||||
|  |           banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | <%= process.env.GIT_URL %> */\n' | ||||||
|  |         }, | ||||||
|  |         files: { | ||||||
|  |           "css/searx.css": "src/less/style.less", | ||||||
|  |           "css/searx-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: '../', | ||||||
|  |           banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | <%= process.env.GIT_URL %> */\n' | ||||||
|  |         }, | ||||||
|  |         files: { | ||||||
|  |           "css/searx.min.css": "src/less/style.less", | ||||||
|  |           "css/searx-rtl.min.css": "src/less/style-rtl.less" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   grunt.loadNpmTasks('grunt-contrib-watch'); |   grunt.loadNpmTasks('grunt-contrib-watch'); | ||||||
|  |   grunt.loadNpmTasks('grunt-contrib-copy'); | ||||||
|   grunt.loadNpmTasks('grunt-contrib-uglify'); |   grunt.loadNpmTasks('grunt-contrib-uglify'); | ||||||
|   grunt.loadNpmTasks('grunt-contrib-jshint'); |   grunt.loadNpmTasks('grunt-contrib-jshint'); | ||||||
|   grunt.loadNpmTasks('grunt-contrib-concat'); |   grunt.loadNpmTasks('grunt-contrib-concat'); | ||||||
| @ -158,5 +194,5 @@ module.exports = function(grunt) { | |||||||
| 
 | 
 | ||||||
|   grunt.registerTask('test', ['jshint']); |   grunt.registerTask('test', ['jshint']); | ||||||
| 
 | 
 | ||||||
|   grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less:development', 'less:production']); |   grunt.registerTask('default', ['jshint', 'copy', 'concat', 'uglify', 'webfont', 'less:development', 'less:production']); | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								searx/static/themes/simple/js/leaflet.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -33,7 +33,7 @@ | |||||||
|         infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', |         infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', | ||||||
|         static_path: script.getAttribute('data-static-path'), |         static_path: script.getAttribute('data-static-path'), | ||||||
|         translations: JSON.parse(script.getAttribute('data-translations')), |         translations: JSON.parse(script.getAttribute('data-translations')), | ||||||
|     } |     }; | ||||||
| 
 | 
 | ||||||
|     // update the css
 |     // update the css
 | ||||||
|     d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; |     d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| /*! simple/searx.min.js | 09-06-2021 | https://github.com/searxng/searxng */ | /*! simple/searx.min.js | 16-06-2021 | https://github.com/searxng/searxng */ | ||||||
| 
 | 
 | ||||||
| (function(t,e){"use strict";var a=e.currentScript||function(){var t=e.getElementsByTagName("script");return t[t.length-1]}();t.searx={touch:"ontouchstart"in t||t.DocumentTouch&&document instanceof DocumentTouch||false,method:a.getAttribute("data-method"),autocompleter:a.getAttribute("data-autocompleter")==="true",search_on_category_select:a.getAttribute("data-search-on-category-select")==="true",infinite_scroll:a.getAttribute("data-infinite-scroll")==="true",static_path:a.getAttribute("data-static-path"),translations:JSON.parse(a.getAttribute("data-translations"))};e.getElementsByTagName("html")[0].className=t.searx.touch?"js touch":"js"})(window,document); | (function(t,e){"use strict";var a=e.currentScript||function(){var t=e.getElementsByTagName("script");return t[t.length-1]}();t.searx={touch:"ontouchstart"in t||t.DocumentTouch&&document instanceof DocumentTouch||false,method:a.getAttribute("data-method"),autocompleter:a.getAttribute("data-autocompleter")==="true",search_on_category_select:a.getAttribute("data-search-on-category-select")==="true",infinite_scroll:a.getAttribute("data-infinite-scroll")==="true",static_path:a.getAttribute("data-static-path"),translations:JSON.parse(a.getAttribute("data-translations"))};e.getElementsByTagName("html")[0].className=t.searx.touch?"js touch":"js"})(window,document); | ||||||
| //# sourceMappingURL=searx.head.min.js.map
 | //# sourceMappingURL=searx.head.min.js.map
 | ||||||
| @ -1 +1 @@ | |||||||
| {"version":3,"sources":["searx.head.js"],"names":["w","d","script","currentScript","scripts","getElementsByTagName","length","searx","touch","DocumentTouch","document","method","getAttribute","autocompleter","search_on_category_select","infinite_scroll","static_path","translations","JSON","parse","className","window"],"mappings":";;CAiBA,SAAUA,EAAGC,GACT,aAGA,IAAIC,EAASD,EAAEE,eAAkB,WAC7B,IAAIC,EAAUH,EAAEI,qBAAqB,UACrC,OAAOD,EAAQA,EAAQE,OAAS,GAFH,GAMjCN,EAAEO,MAAQ,CACNC,MAAS,iBAAkBR,GAAMA,EAAES,eAAiBC,oBAAoBD,eAAkB,MAC1FE,OAAQT,EAAOU,aAAa,eAC5BC,cAAeX,EAAOU,aAAa,wBAA0B,OAC7DE,0BAA2BZ,EAAOU,aAAa,oCAAsC,OACrFG,gBAAiBb,EAAOU,aAAa,0BAA4B,OACjEI,YAAad,EAAOU,aAAa,oBACjCK,aAAcC,KAAKC,MAAMjB,EAAOU,aAAa,uBAIjDX,EAAEI,qBAAqB,QAAQ,GAAGe,UAAapB,EAAEO,MAAW,MAAE,WAAW,MArB7E,CAsBGc,OAAQX","file":"searx.head.min.js"} | {"version":3,"file":"searx.head.min.js","sources":["searx.head.js"],"names":["w","d","script","currentScript","scripts","getElementsByTagName","length","searx","touch","DocumentTouch","document","method","getAttribute","autocompleter","search_on_category_select","infinite_scroll","static_path","translations","JSON","parse","className","window"],"mappings":";;CAiBA,SAAUA,EAAGC,gBAIT,IAAIC,EAASD,EAAEE,eAAkB,WAC7B,IAAIC,EAAUH,EAAEI,qBAAqB,UACrC,OAAOD,EAAQA,EAAQE,OAAS,GAFH,GAMjCN,EAAEO,MAAQ,CACNC,MAAS,iBAAkBR,GAAMA,EAAES,eAAiBC,oBAAoBD,eAAkB,MAC1FE,OAAQT,EAAOU,aAAa,eAC5BC,cAAeX,EAAOU,aAAa,wBAA0B,OAC7DE,0BAA2BZ,EAAOU,aAAa,oCAAsC,OACrFG,gBAAiBb,EAAOU,aAAa,0BAA4B,OACjEI,YAAad,EAAOU,aAAa,oBACjCK,aAAcC,KAAKC,MAAMjB,EAAOU,aAAa,uBAIjDX,EAAEI,qBAAqB,QAAQ,GAAGe,UAAapB,EAAEO,MAAW,MAAE,WAAW,MArB7E,CAsBGc,OAAQX"} | ||||||
							
								
								
									
										26
									
								
								searx/static/themes/simple/js/searx.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,536 +0,0 @@ | |||||||
| (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ |  | ||||||
| /* |  | ||||||
|  * @license MIT |  | ||||||
|  * |  | ||||||
|  * Autocomplete.js v2.6.3 |  | ||||||
|  * Developed by Baptiste Donaux |  | ||||||
|  * http://autocomplete-js.com
 |  | ||||||
|  * |  | ||||||
|  * (c) 2017, Baptiste Donaux |  | ||||||
|  */ |  | ||||||
| "use strict"; |  | ||||||
| var ConditionOperator; |  | ||||||
| (function (ConditionOperator) { |  | ||||||
|     ConditionOperator[ConditionOperator["AND"] = 0] = "AND"; |  | ||||||
|     ConditionOperator[ConditionOperator["OR"] = 1] = "OR"; |  | ||||||
| })(ConditionOperator || (ConditionOperator = {})); |  | ||||||
| var EventType; |  | ||||||
| (function (EventType) { |  | ||||||
|     EventType[EventType["KEYDOWN"] = 0] = "KEYDOWN"; |  | ||||||
|     EventType[EventType["KEYUP"] = 1] = "KEYUP"; |  | ||||||
| })(EventType || (EventType = {})); |  | ||||||
| /** |  | ||||||
|  * Core |  | ||||||
|  * |  | ||||||
|  * @class |  | ||||||
|  * @author Baptiste Donaux <baptiste.donaux@gmail.com> @baptistedonaux |  | ||||||
|  */ |  | ||||||
| var AutoComplete = (function () { |  | ||||||
|     // Constructor
 |  | ||||||
|     function AutoComplete(params, selector) { |  | ||||||
|         if (params === void 0) { params = {}; } |  | ||||||
|         if (selector === void 0) { selector = "[data-autocomplete]"; } |  | ||||||
|         if (Array.isArray(selector)) { |  | ||||||
|             selector.forEach(function (s) { |  | ||||||
|                 new AutoComplete(params, s); |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|         else if (typeof selector == "string") { |  | ||||||
|             var elements = document.querySelectorAll(selector); |  | ||||||
|             Array.prototype.forEach.call(elements, function (input) { |  | ||||||
|                 new AutoComplete(params, input); |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             var specificParams = AutoComplete.merge(AutoComplete.defaults, params, { |  | ||||||
|                 DOMResults: document.createElement("div") |  | ||||||
|             }); |  | ||||||
|             AutoComplete.prototype.create(specificParams, selector); |  | ||||||
|             return specificParams; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     AutoComplete.prototype.create = function (params, element) { |  | ||||||
|         params.Input = element; |  | ||||||
|         if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute("type") === false || params.Input.getAttribute("type").match(/^TEXT|SEARCH$/i))) { |  | ||||||
|             params.Input.setAttribute("autocomplete", "off"); |  | ||||||
|             params._Position(params); |  | ||||||
|             params.Input.parentNode.appendChild(params.DOMResults); |  | ||||||
|             params.$Listeners = { |  | ||||||
|                 blur: params._Blur.bind(params), |  | ||||||
|                 destroy: AutoComplete.prototype.destroy.bind(null, params), |  | ||||||
|                 focus: params._Focus.bind(params), |  | ||||||
|                 keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP), |  | ||||||
|                 keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN), |  | ||||||
|                 position: params._Position.bind(params) |  | ||||||
|             }; |  | ||||||
|             for (var event in params.$Listeners) { |  | ||||||
|                 params.Input.addEventListener(event, params.$Listeners[event]); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.getEventsByType = function (params, type) { |  | ||||||
|         var mappings = {}; |  | ||||||
|         for (var key in params.KeyboardMappings) { |  | ||||||
|             var event = EventType.KEYUP; |  | ||||||
|             if (params.KeyboardMappings[key].Event !== undefined) { |  | ||||||
|                 event = params.KeyboardMappings[key].Event; |  | ||||||
|             } |  | ||||||
|             if (event == type) { |  | ||||||
|                 mappings[key] = params.KeyboardMappings[key]; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return mappings; |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.event = function (params, type, event) { |  | ||||||
|         var eventIdentifier = function (condition) { |  | ||||||
|             if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) { |  | ||||||
|                 condition = AutoComplete.merge({ |  | ||||||
|                     Not: false |  | ||||||
|                 }, condition); |  | ||||||
|                 if (condition.hasOwnProperty("Is")) { |  | ||||||
|                     if (condition.Is == event.keyCode) { |  | ||||||
|                         match = !condition.Not; |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         match = condition.Not; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 else if (condition.hasOwnProperty("From") && condition.hasOwnProperty("To")) { |  | ||||||
|                     if (event.keyCode >= condition.From && event.keyCode <= condition.To) { |  | ||||||
|                         match = !condition.Not; |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         match = condition.Not; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }; |  | ||||||
|         for (var name in AutoComplete.prototype.getEventsByType(params, type)) { |  | ||||||
|             var mapping = AutoComplete.merge({ |  | ||||||
|                 Operator: ConditionOperator.AND |  | ||||||
|             }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator; |  | ||||||
|             mapping.Conditions.forEach(eventIdentifier); |  | ||||||
|             if (match === true) { |  | ||||||
|                 mapping.Callback.call(params, event); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.makeRequest = function (params, callback) { |  | ||||||
|         var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(queryParams); |  | ||||||
|         if (method.match(/^GET$/i)) { |  | ||||||
|             if (url.indexOf("?") !== -1) { |  | ||||||
|                 url += "&" + queryParamsStringify; |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 url += "?" + queryParamsStringify; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         request.open(method, url, true); |  | ||||||
|         for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) { |  | ||||||
|             request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]); |  | ||||||
|         } |  | ||||||
|         request.onreadystatechange = function () { |  | ||||||
|             if (request.readyState == 4 && request.status == 200) { |  | ||||||
|                 params.$Cache[queryParams] = request.response; |  | ||||||
|                 callback(request.response); |  | ||||||
|             } |  | ||||||
|         }; |  | ||||||
|         return request; |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.ajax = function (params, request, timeout) { |  | ||||||
|         if (timeout === void 0) { timeout = true; } |  | ||||||
|         if (params.$AjaxTimer) { |  | ||||||
|             window.clearTimeout(params.$AjaxTimer); |  | ||||||
|         } |  | ||||||
|         if (timeout === true) { |  | ||||||
|             params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             if (params.Request) { |  | ||||||
|                 params.Request.abort(); |  | ||||||
|             } |  | ||||||
|             params.Request = request; |  | ||||||
|             params.Request.send(params._QueryArg() + "=" + params._Pre()); |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.cache = function (params, callback) { |  | ||||||
|         var response = params._Cache(params._Pre()); |  | ||||||
|         if (response === undefined) { |  | ||||||
|             var request = AutoComplete.prototype.makeRequest(params, callback); |  | ||||||
|             AutoComplete.prototype.ajax(params, request); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             callback(response); |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|     AutoComplete.prototype.destroy = function (params) { |  | ||||||
|         for (var event in params.$Listeners) { |  | ||||||
|             params.Input.removeEventListener(event, params.$Listeners[event]); |  | ||||||
|         } |  | ||||||
|         params.DOMResults.parentNode.removeChild(params.DOMResults); |  | ||||||
|     }; |  | ||||||
|     return AutoComplete; |  | ||||||
| }()); |  | ||||||
| AutoComplete.merge = function () { |  | ||||||
|     var merge = {}, tmp; |  | ||||||
|     for (var i = 0; i < arguments.length; i++) { |  | ||||||
|         for (tmp in arguments[i]) { |  | ||||||
|             merge[tmp] = arguments[i][tmp]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return merge; |  | ||||||
| }; |  | ||||||
| AutoComplete.defaults = { |  | ||||||
|     Delay: 150, |  | ||||||
|     EmptyMessage: "No result here", |  | ||||||
|     Highlight: { |  | ||||||
|         getRegex: function (value) { |  | ||||||
|             return new RegExp(value, "ig"); |  | ||||||
|         }, |  | ||||||
|         transform: function (value) { |  | ||||||
|             return "<strong>" + value + "</strong>"; |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     HttpHeaders: { |  | ||||||
|         "Content-type": "application/x-www-form-urlencoded" |  | ||||||
|     }, |  | ||||||
|     Limit: 0, |  | ||||||
|     MinChars: 0, |  | ||||||
|     HttpMethod: "GET", |  | ||||||
|     QueryArg: "q", |  | ||||||
|     Url: null, |  | ||||||
|     KeyboardMappings: { |  | ||||||
|         "Enter": { |  | ||||||
|             Conditions: [{ |  | ||||||
|                     Is: 13, |  | ||||||
|                     Not: false |  | ||||||
|                 }], |  | ||||||
|             Callback: function (event) { |  | ||||||
|                 if (this.DOMResults.getAttribute("class").indexOf("open") != -1) { |  | ||||||
|                     var liActive = this.DOMResults.querySelector("li.active"); |  | ||||||
|                     if (liActive !== null) { |  | ||||||
|                         event.preventDefault(); |  | ||||||
|                         this._Select(liActive); |  | ||||||
|                         this.DOMResults.setAttribute("class", "autocomplete"); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             }, |  | ||||||
|             Operator: ConditionOperator.AND, |  | ||||||
|             Event: EventType.KEYDOWN |  | ||||||
|         }, |  | ||||||
|         "KeyUpAndDown_down": { |  | ||||||
|             Conditions: [{ |  | ||||||
|                     Is: 38, |  | ||||||
|                     Not: false |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     Is: 40, |  | ||||||
|                     Not: false |  | ||||||
|                 }], |  | ||||||
|             Callback: function (event) { |  | ||||||
|                 event.preventDefault(); |  | ||||||
|             }, |  | ||||||
|             Operator: ConditionOperator.OR, |  | ||||||
|             Event: EventType.KEYDOWN |  | ||||||
|         }, |  | ||||||
|         "KeyUpAndDown_up": { |  | ||||||
|             Conditions: [{ |  | ||||||
|                     Is: 38, |  | ||||||
|                     Not: false |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     Is: 40, |  | ||||||
|                     Not: false |  | ||||||
|                 }], |  | ||||||
|             Callback: function (event) { |  | ||||||
|                 event.preventDefault(); |  | ||||||
|                 var first = this.DOMResults.querySelector("li:first-child:not(.locked)"), last = this.DOMResults.querySelector("li:last-child:not(.locked)"), active = this.DOMResults.querySelector("li.active"); |  | ||||||
|                 if (active) { |  | ||||||
|                     var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName("li").length; |  | ||||||
|                     if (position < 0) { |  | ||||||
|                         position = lisCount - 1; |  | ||||||
|                     } |  | ||||||
|                     else if (position >= lisCount) { |  | ||||||
|                         position = 0; |  | ||||||
|                     } |  | ||||||
|                     active.classList.remove("active"); |  | ||||||
|                     active.parentElement.children.item(position).classList.add("active"); |  | ||||||
|                 } |  | ||||||
|                 else if (last && event.keyCode == 38) { |  | ||||||
|                     last.classList.add("active"); |  | ||||||
|                 } |  | ||||||
|                 else if (first) { |  | ||||||
|                     first.classList.add("active"); |  | ||||||
|                 } |  | ||||||
|             }, |  | ||||||
|             Operator: ConditionOperator.OR, |  | ||||||
|             Event: EventType.KEYUP |  | ||||||
|         }, |  | ||||||
|         "AlphaNum": { |  | ||||||
|             Conditions: [{ |  | ||||||
|                     Is: 13, |  | ||||||
|                     Not: true |  | ||||||
|                 }, { |  | ||||||
|                     From: 35, |  | ||||||
|                     To: 40, |  | ||||||
|                     Not: true |  | ||||||
|                 }], |  | ||||||
|             Callback: function () { |  | ||||||
|                 var oldValue = this.Input.getAttribute("data-autocomplete-old-value"), currentValue = this._Pre(); |  | ||||||
|                 if (currentValue !== "" && currentValue.length >= this._MinChars()) { |  | ||||||
|                     if (!oldValue || currentValue != oldValue) { |  | ||||||
|                         this.DOMResults.setAttribute("class", "autocomplete open"); |  | ||||||
|                     } |  | ||||||
|                     AutoComplete.prototype.cache(this, function (response) { |  | ||||||
|                         this._Render(this._Post(response)); |  | ||||||
|                         this._Open(); |  | ||||||
|                     }.bind(this)); |  | ||||||
|                 } |  | ||||||
|             }, |  | ||||||
|             Operator: ConditionOperator.AND, |  | ||||||
|             Event: EventType.KEYUP |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     DOMResults: null, |  | ||||||
|     Request: null, |  | ||||||
|     Input: null, |  | ||||||
|     /** |  | ||||||
|      * Return the message when no result returns |  | ||||||
|      */ |  | ||||||
|     _EmptyMessage: function () { |  | ||||||
|         var emptyMessage = ""; |  | ||||||
|         if (this.Input.hasAttribute("data-autocomplete-empty-message")) { |  | ||||||
|             emptyMessage = this.Input.getAttribute("data-autocomplete-empty-message"); |  | ||||||
|         } |  | ||||||
|         else if (this.EmptyMessage !== false) { |  | ||||||
|             emptyMessage = this.EmptyMessage; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             emptyMessage = ""; |  | ||||||
|         } |  | ||||||
|         return emptyMessage; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Returns the maximum number of results |  | ||||||
|      */ |  | ||||||
|     _Limit: function () { |  | ||||||
|         var limit = this.Input.getAttribute("data-autocomplete-limit"); |  | ||||||
|         if (isNaN(limit) || limit === null) { |  | ||||||
|             return this.Limit; |  | ||||||
|         } |  | ||||||
|         return parseInt(limit, 10); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Returns the minimum number of characters entered before firing ajax |  | ||||||
|      */ |  | ||||||
|     _MinChars: function () { |  | ||||||
|         var minchars = this.Input.getAttribute("data-autocomplete-minchars"); |  | ||||||
|         if (isNaN(minchars) || minchars === null) { |  | ||||||
|             return this.MinChars; |  | ||||||
|         } |  | ||||||
|         return parseInt(minchars, 10); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Apply transformation on labels response |  | ||||||
|      */ |  | ||||||
|     _Highlight: function (label) { |  | ||||||
|         return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Returns the HHTP method to use |  | ||||||
|      */ |  | ||||||
|     _HttpMethod: function () { |  | ||||||
|         if (this.Input.hasAttribute("data-autocomplete-method")) { |  | ||||||
|             return this.Input.getAttribute("data-autocomplete-method"); |  | ||||||
|         } |  | ||||||
|         return this.HttpMethod; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Returns the query param to use |  | ||||||
|      */ |  | ||||||
|     _QueryArg: function () { |  | ||||||
|         if (this.Input.hasAttribute("data-autocomplete-param-name")) { |  | ||||||
|             return this.Input.getAttribute("data-autocomplete-param-name"); |  | ||||||
|         } |  | ||||||
|         return this.QueryArg; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Returns the URL to use for AJAX request |  | ||||||
|      */ |  | ||||||
|     _Url: function () { |  | ||||||
|         if (this.Input.hasAttribute("data-autocomplete")) { |  | ||||||
|             return this.Input.getAttribute("data-autocomplete"); |  | ||||||
|         } |  | ||||||
|         return this.Url; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Manage the close |  | ||||||
|      */ |  | ||||||
|     _Blur: function (now) { |  | ||||||
|         if (now === true) { |  | ||||||
|             this.DOMResults.setAttribute("class", "autocomplete"); |  | ||||||
|             this.Input.setAttribute("data-autocomplete-old-value", this.Input.value); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             var params = this; |  | ||||||
|             setTimeout(function () { |  | ||||||
|                 params._Blur(true); |  | ||||||
|             }, 150); |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Manage the cache |  | ||||||
|      */ |  | ||||||
|     _Cache: function (value) { |  | ||||||
|         return this.$Cache[value]; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Manage the open |  | ||||||
|      */ |  | ||||||
|     _Focus: function () { |  | ||||||
|         var oldValue = this.Input.getAttribute("data-autocomplete-old-value"); |  | ||||||
|         if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) { |  | ||||||
|             this.DOMResults.setAttribute("class", "autocomplete open"); |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Bind all results item if one result is opened |  | ||||||
|      */ |  | ||||||
|     _Open: function () { |  | ||||||
|         var params = this; |  | ||||||
|         Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"), function (li) { |  | ||||||
|             if (li.getAttribute("class") != "locked") { |  | ||||||
| 		            li.onclick = function (event) { |  | ||||||
|                     params._Select(li); |  | ||||||
|                 }; |  | ||||||
|                 li.onmouseenter = function () { |  | ||||||
|                     var active = params.DOMResults.querySelector("li.active"); |  | ||||||
|                     if (active !== li) { |  | ||||||
|                         if (active !== null) { |  | ||||||
|                             active.classList.remove("active"); |  | ||||||
|                         } |  | ||||||
|                         li.classList.add("active"); |  | ||||||
|                     } |  | ||||||
|                 }; |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Position the results HTML element |  | ||||||
|      */ |  | ||||||
|     _Position: function () { |  | ||||||
|         this.DOMResults.setAttribute("class", "autocomplete"); |  | ||||||
|         this.DOMResults.setAttribute("style", "top:" + (this.Input.offsetTop + this.Input.offsetHeight) + "px;left:" + this.Input.offsetLeft + "px;width:" + this.Input.clientWidth + "px;"); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Execute the render of results DOM element |  | ||||||
|      */ |  | ||||||
|     _Render: function (response) { |  | ||||||
|         var ul; |  | ||||||
|         if (typeof response == "string") { |  | ||||||
|             ul = this._RenderRaw(response); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             ul = this._RenderResponseItems(response); |  | ||||||
|         } |  | ||||||
|         if (this.DOMResults.hasChildNodes()) { |  | ||||||
|             this.DOMResults.removeChild(this.DOMResults.childNodes[0]); |  | ||||||
|         } |  | ||||||
|         this.DOMResults.appendChild(ul); |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * ResponseItems[] rendering |  | ||||||
|      */ |  | ||||||
|     _RenderResponseItems: function (response) { |  | ||||||
|         var ul = document.createElement("ul"), li = document.createElement("li"), limit = this._Limit(); |  | ||||||
|         // Order
 |  | ||||||
|         if (limit < 0) { |  | ||||||
|             response = response.reverse(); |  | ||||||
|         } |  | ||||||
|         else if (limit === 0) { |  | ||||||
|             limit = response.length; |  | ||||||
|         } |  | ||||||
|         for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) { |  | ||||||
|             li.innerHTML = response[item].Label; |  | ||||||
|             li.setAttribute("data-autocomplete-value", response[item].Value); |  | ||||||
|             ul.appendChild(li); |  | ||||||
|             li = document.createElement("li"); |  | ||||||
|         } |  | ||||||
|         return ul; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * string response rendering (RAW HTML) |  | ||||||
|      */ |  | ||||||
|     _RenderRaw: function (response) { |  | ||||||
|         var ul = document.createElement("ul"), li = document.createElement("li"); |  | ||||||
|         if (response.length > 0) { |  | ||||||
|             this.DOMResults.innerHTML = response; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             var emptyMessage = this._EmptyMessage(); |  | ||||||
|             if (emptyMessage !== "") { |  | ||||||
|                 li.innerHTML = emptyMessage; |  | ||||||
|                 li.setAttribute("class", "locked"); |  | ||||||
|                 ul.appendChild(li); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return ul; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Deal with request response |  | ||||||
|      */ |  | ||||||
|     _Post: function (response) { |  | ||||||
|         try { |  | ||||||
|             var returnResponse = []; |  | ||||||
|             //JSON return
 |  | ||||||
|             var json = JSON.parse(response); |  | ||||||
|             if (Object.keys(json).length === 0) { |  | ||||||
|                 return ""; |  | ||||||
|             } |  | ||||||
|             if (Array.isArray(json)) { |  | ||||||
|                 for (var i = 0; i < Object.keys(json).length; i++) { |  | ||||||
|                     returnResponse[returnResponse.length] = { "Value": json[i], "Label": this._Highlight(json[i]) }; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 for (var value in json) { |  | ||||||
|                     returnResponse.push({ |  | ||||||
|                         "Value": value, |  | ||||||
|                         "Label": this._Highlight(json[value]) |  | ||||||
|                     }); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             return returnResponse; |  | ||||||
|         } |  | ||||||
|         catch (event) { |  | ||||||
|             //HTML return
 |  | ||||||
|             return response; |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Return the autocomplete value to send (before request) |  | ||||||
|      */ |  | ||||||
|     _Pre: function () { |  | ||||||
|         return this.Input.value; |  | ||||||
|     }, |  | ||||||
|     /** |  | ||||||
|      * Choice one result item |  | ||||||
|      */ |  | ||||||
|     _Select: function (item) { |  | ||||||
| 	console.log('test test test'); |  | ||||||
|         if (item.hasAttribute("data-autocomplete-value")) { |  | ||||||
|             this.Input.value = item.getAttribute("data-autocomplete-value"); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             this.Input.value = item.innerHTML; |  | ||||||
|         } |  | ||||||
|         this.Input.setAttribute("data-autocomplete-old-value", this.Input.value); |  | ||||||
|     }, |  | ||||||
|     $AjaxTimer: null, |  | ||||||
|     $Cache: {}, |  | ||||||
|     $Listeners: {} |  | ||||||
| }; |  | ||||||
| module.exports = AutoComplete; |  | ||||||
| 
 |  | ||||||
| },{}]},{},[1])(1) |  | ||||||
| }); |  | ||||||
| Before Width: | Height: | Size: 3.7 KiB | 
| Before Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 1.7 KiB | 
| Before Width: | Height: | Size: 1.7 KiB | 
| Before Width: | Height: | Size: 1.7 KiB | 
| @ -1,181 +0,0 @@ | |||||||
| // Generated by grunt-webfont |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| @font-face { |  | ||||||
| 	font-family:"ion"; |  | ||||||
| 	src:url("../fonts/ion.eot?ce7a0ead692560b4405a96d5b8471f51"); |  | ||||||
| 	src:url("../fonts/ion.eot?#iefix") format("embedded-opentype"), |  | ||||||
| 		url("../fonts/ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"), |  | ||||||
| 		url("../fonts/ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"), |  | ||||||
| 		url("../fonts/ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"), |  | ||||||
| 		url("../fonts/ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg"); |  | ||||||
| 	font-weight:normal; |  | ||||||
| 	font-style:normal; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .ion-icon { |  | ||||||
| 	&:before { |  | ||||||
| 		font-family:"ion"; |  | ||||||
| 	} |  | ||||||
| 	display:inline-block; |  | ||||||
| 	vertical-align:middle; |  | ||||||
| 	line-height:1; |  | ||||||
| 	font-weight:normal; |  | ||||||
| 	font-style:normal; |  | ||||||
| 	speak:none; |  | ||||||
| 	text-decoration:inherit; |  | ||||||
| 	text-transform:none; |  | ||||||
| 	text-rendering:auto; |  | ||||||
| 	-webkit-font-smoothing:antialiased; |  | ||||||
| 	-moz-osx-font-smoothing:grayscale; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // Icons |  | ||||||
| 
 |  | ||||||
| .ion-navicon-round { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f101"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-search { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f102"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-play { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f103"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-link { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f104"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-chevron-up { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f105"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-chevron-left { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f106"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-chevron-right { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f107"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-arrow-down-a { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f108"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-arrow-up-a { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f109"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-arrow-swap { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10a"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-arrow-dropdown { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10b"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-globe { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10c"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-time { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10d"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-location { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10e"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-warning { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f10f"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-error { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f110"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-film-outline { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f111"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-music-note { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f112"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-more-vertical { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f113"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-magnet { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f114"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| .ion-close { |  | ||||||
| 	&:before { |  | ||||||
| 		content:"\f115"; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @ -1,20 +1,28 @@ | |||||||
| { | { | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "grunt": "~1.0.3", |     "grunt-cli": "^1.4.3", | ||||||
|  |     "grunt": "~1.4.1", | ||||||
|  |     "grunt-contrib-copy": "^1.0.0", | ||||||
|     "grunt-contrib-concat": "~1.0.1", |     "grunt-contrib-concat": "~1.0.1", | ||||||
|     "grunt-contrib-cssmin": "^2.2.1", |     "grunt-contrib-cssmin": "^4.0.0", | ||||||
|     "grunt-contrib-jshint": "~1.1.0", |     "grunt-contrib-jshint": "~3.0.0", | ||||||
|     "grunt-contrib-less": "~3.0.0", |     "grunt-contrib-less": "~3.0.0", | ||||||
|     "grunt-contrib-uglify": "~3.4.0", |     "grunt-contrib-uglify": "~5.0.1", | ||||||
|     "grunt-contrib-watch": "~1.1.0", |     "grunt-contrib-watch": "~1.1.0", | ||||||
|     "grunt-webfont": "^1.7.1", |     "grunt-webfont": "^1.7.2", | ||||||
|     "ionicons-npm": "^2.0.1", |     "ionicons-npm": "^2.0.1", | ||||||
|     "jslint": "^0.12.0", |     "jslint": "^0.12.1", | ||||||
|  |     "less": "^4.1.1", | ||||||
|     "less-plugin-clean-css": "^1.5.1" |     "less-plugin-clean-css": "^1.5.1" | ||||||
|   }, |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "autocomplete-js": "2.7.1", | ||||||
|  |     "leaflet": "^1.7.1" | ||||||
|  |   }, | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "npm install && grunt", |     "all": "npm install && grunt", | ||||||
|     "start": "grunt watch", |     "build": "grunt", | ||||||
|     "test": "grunt" |     "watch": "grunt watch", | ||||||
|  |     "clean": "rm -Rf node_modules package-lock.json ion.less" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB | 
| @ -33,7 +33,7 @@ | |||||||
|         infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', |         infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', | ||||||
|         static_path: script.getAttribute('data-static-path'), |         static_path: script.getAttribute('data-static-path'), | ||||||
|         translations: JSON.parse(script.getAttribute('data-translations')), |         translations: JSON.parse(script.getAttribute('data-translations')), | ||||||
|     } |     }; | ||||||
| 
 | 
 | ||||||
|     // update the css
 |     // update the css
 | ||||||
|     d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; |     d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; | ||||||
| @ -31,8 +31,8 @@ | |||||||
|       var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox); |       var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox); | ||||||
|       var map_geojson = JSON.parse(this.dataset.mapGeojson); |       var map_geojson = JSON.parse(this.dataset.mapGeojson); | ||||||
| 
 | 
 | ||||||
|       searx.loadStyle('leaflet/leaflet.css'); |       searx.loadStyle('css/leaflet.css'); | ||||||
|       searx.loadScript('leaflet/leaflet.js', function() { |       searx.loadScript('js/leaflet.js', function() { | ||||||
|         var map_bounds = null; |         var map_bounds = null; | ||||||
|         if(map_boundingbox) { |         if(map_boundingbox) { | ||||||
|           var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]); |           var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]); | ||||||
| @ -22,7 +22,7 @@ | |||||||
| @import "autocomplete.less"; | @import "autocomplete.less"; | ||||||
| 
 | 
 | ||||||
| // ion-icon | // ion-icon | ||||||
| @import "ion.less"; | @import "../../ion.less"; | ||||||
| 
 | 
 | ||||||
| .ion-icon-big { | .ion-icon-big { | ||||||
|   .ion-icon; |   .ion-icon; | ||||||
| @ -51,7 +51,8 @@ shellcheck" | |||||||
| BUILD_PACKAGES_debian="\ | BUILD_PACKAGES_debian="\ | ||||||
| firefox graphviz imagemagick texlive-xetex librsvg2-bin | firefox graphviz imagemagick texlive-xetex librsvg2-bin | ||||||
| texlive-latex-recommended texlive-extra-utils fonts-dejavu | texlive-latex-recommended texlive-extra-utils fonts-dejavu | ||||||
| latexmk" | latexmk fontforge ttfautohint | ||||||
|  | npm" | ||||||
| 
 | 
 | ||||||
| # pacman packages | # pacman packages | ||||||
| SEARX_PACKAGES_arch="\ | SEARX_PACKAGES_arch="\ | ||||||
| @ -62,7 +63,8 @@ shellcheck" | |||||||
| 
 | 
 | ||||||
| BUILD_PACKAGES_arch="\ | BUILD_PACKAGES_arch="\ | ||||||
| firefox graphviz imagemagick texlive-bin extra/librsvg | firefox graphviz imagemagick texlive-bin extra/librsvg | ||||||
| texlive-core texlive-latexextra ttf-dejavu" | texlive-core texlive-latexextra ttf-dejavu fontforge ttfautohint | ||||||
|  | npm" | ||||||
| 
 | 
 | ||||||
| # dnf packages | # dnf packages | ||||||
| SEARX_PACKAGES_fedora="\ | SEARX_PACKAGES_fedora="\ | ||||||
| @ -75,9 +77,16 @@ BUILD_PACKAGES_fedora="\ | |||||||
| firefox graphviz graphviz-gd ImageMagick librsvg2-tools | firefox graphviz graphviz-gd ImageMagick librsvg2-tools | ||||||
| texlive-xetex-bin texlive-collection-fontsrecommended | texlive-xetex-bin texlive-collection-fontsrecommended | ||||||
| texlive-collection-latex dejavu-sans-fonts dejavu-serif-fonts | texlive-collection-latex dejavu-sans-fonts dejavu-serif-fonts | ||||||
| dejavu-sans-mono-fonts" | dejavu-sans-mono-fonts fontforge ttfautohint | ||||||
|  | npm" | ||||||
| 
 | 
 | ||||||
| # yum packages | # yum packages | ||||||
|  | # | ||||||
|  | # hint: We do no longer support yum packages, it is to complex to maintain | ||||||
|  | #       automate installation of packages like npm.  In the firts step we ignore | ||||||
|  | #       CentOS-7 as developer & build platform (the inital patch which brought | ||||||
|  | #       CentOS-7 supports was not intended to be a developer platform). | ||||||
|  | 
 | ||||||
| SEARX_PACKAGES_centos="\ | SEARX_PACKAGES_centos="\ | ||||||
| python36 python36-pip python36-lxml python-babel | python36 python36-pip python36-lxml python-babel | ||||||
| uwsgi uwsgi-plugin-python3 | uwsgi uwsgi-plugin-python3 | ||||||
|  | |||||||
 Alexandre Flament
						Alexandre Flament