Merge pull request #151 from searxng/mod_oscar

make themes: 2 node_modules directories instead of 3
This commit is contained in:
Alexandre Flament 2021-06-17 10:46:50 +02:00 committed by GitHub
commit 92c68fe636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 1371 additions and 2042 deletions

View File

@ -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
View File

@ -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 $?
} }

View File

@ -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"
} }
} }

View File

@ -1 +1,2 @@
/node_modules /node_modules
ion.less

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 696 B

After

Width:  |  Height:  |  Size: 696 B

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 618 B

View File

@ -25,6 +25,10 @@
user-select: none; user-select: none;
-webkit-user-drag: none; -webkit-user-drag: none;
} }
/* Prevents IE11 from highlighting tiles in blue */
.leaflet-tile::selection {
background: transparent;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ /* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile { .leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast; image-rendering: -webkit-optimize-contrast;
@ -45,7 +49,8 @@
.leaflet-container .leaflet-marker-pane img, .leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img, .leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img, .leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer { .leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
max-width: none !important; max-width: none !important;
max-height: none !important; max-height: none !important;
} }
@ -168,7 +173,6 @@
opacity: 0; opacity: 0;
-webkit-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear; -moz-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear; transition: opacity 0.2s linear;
} }
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
@ -185,14 +189,12 @@
.leaflet-zoom-anim .leaflet-zoom-animated { .leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
-o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1); transition: transform 0.25s cubic-bezier(0,0,0.25,1);
} }
.leaflet-zoom-anim .leaflet-tile, .leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile { .leaflet-pan-anim .leaflet-tile {
-webkit-transition: none; -webkit-transition: none;
-moz-transition: none; -moz-transition: none;
-o-transition: none;
transition: none; transition: none;
} }
@ -209,6 +211,7 @@
.leaflet-grab { .leaflet-grab {
cursor: -webkit-grab; cursor: -webkit-grab;
cursor: -moz-grab; cursor: -moz-grab;
cursor: grab;
} }
.leaflet-crosshair, .leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive { .leaflet-crosshair .leaflet-interactive {
@ -224,6 +227,7 @@
cursor: move; cursor: move;
cursor: -webkit-grabbing; cursor: -webkit-grabbing;
cursor: -moz-grabbing; cursor: -moz-grabbing;
cursor: grabbing;
} }
/* marker & overlays interactivity */ /* marker & overlays interactivity */
@ -237,7 +241,8 @@
.leaflet-marker-icon.leaflet-interactive, .leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive, .leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive { .leaflet-pane > svg path.leaflet-interactive,
svg.leaflet-image-layer.leaflet-interactive path {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto; pointer-events: auto;
} }
@ -494,7 +499,6 @@
-webkit-transform: rotate(45deg); -webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg); -moz-transform: rotate(45deg);
-ms-transform: rotate(45deg); -ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg); transform: rotate(45deg);
} }
.leaflet-popup-content-wrapper, .leaflet-popup-content-wrapper,
@ -528,7 +532,7 @@
} }
.leaflet-oldie .leaflet-popup-content-wrapper { .leaflet-oldie .leaflet-popup-content-wrapper {
zoom: 1; -ms-zoom: 1;
} }
.leaflet-oldie .leaflet-popup-tip { .leaflet-oldie .leaflet-popup-tip {
width: 24px; width: 24px;

View File

@ -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;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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']);
}; };

File diff suppressed because one or more lines are too long

View 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";

View File

@ -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

View File

@ -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"}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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)
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because one or more lines are too long

View File

@ -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";
}
}

View File

@ -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"
} }
} }

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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";

View File

@ -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]);

View File

@ -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;

View File

@ -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