Browse Source

Static build

Alexandre Flament 3 years ago
parent
commit
85033f3d09

BIN
searx/static/themes/simple/css/images/layers-2x.png


BIN
searx/static/themes/simple/css/images/layers.png


BIN
searx/static/themes/simple/css/images/marker-icon-2x.png


BIN
searx/static/themes/simple/css/images/marker-icon.png


BIN
searx/static/themes/simple/css/images/marker-shadow.png


+ 640 - 0
searx/static/themes/simple/css/leaflet.css

@@ -0,0 +1,640 @@
+/* required styles */
+
+.leaflet-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-container,
+.leaflet-pane > svg,
+.leaflet-pane > canvas,
+.leaflet-zoom-box,
+.leaflet-image-layer,
+.leaflet-layer {
+	position: absolute;
+	left: 0;
+	top: 0;
+	}
+.leaflet-container {
+	overflow: hidden;
+	}
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+	-webkit-user-select: none;
+	   -moz-user-select: none;
+	        user-select: 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 */
+.leaflet-safari .leaflet-tile {
+	image-rendering: -webkit-optimize-contrast;
+	}
+/* hack that prevents hw layers "stretching" when loading new tiles */
+.leaflet-safari .leaflet-tile-container {
+	width: 1600px;
+	height: 1600px;
+	-webkit-transform-origin: 0 0;
+	}
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+	display: block;
+	}
+/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
+/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
+.leaflet-container .leaflet-overlay-pane svg,
+.leaflet-container .leaflet-marker-pane img,
+.leaflet-container .leaflet-shadow-pane img,
+.leaflet-container .leaflet-tile-pane img,
+.leaflet-container img.leaflet-image-layer,
+.leaflet-container .leaflet-tile {
+	max-width: none !important;
+	max-height: none !important;
+	}
+
+.leaflet-container.leaflet-touch-zoom {
+	-ms-touch-action: pan-x pan-y;
+	touch-action: pan-x pan-y;
+	}
+.leaflet-container.leaflet-touch-drag {
+	-ms-touch-action: pinch-zoom;
+	/* Fallback for FF which doesn't support pinch-zoom */
+	touch-action: none;
+	touch-action: pinch-zoom;
+}
+.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.leaflet-container {
+	-webkit-tap-highlight-color: transparent;
+}
+.leaflet-container a {
+	-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
+}
+.leaflet-tile {
+	filter: inherit;
+	visibility: hidden;
+	}
+.leaflet-tile-loaded {
+	visibility: inherit;
+	}
+.leaflet-zoom-box {
+	width: 0;
+	height: 0;
+	-moz-box-sizing: border-box;
+	     box-sizing: border-box;
+	z-index: 800;
+	}
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
+.leaflet-overlay-pane svg {
+	-moz-user-select: none;
+	}
+
+.leaflet-pane         { z-index: 400; }
+
+.leaflet-tile-pane    { z-index: 200; }
+.leaflet-overlay-pane { z-index: 400; }
+.leaflet-shadow-pane  { z-index: 500; }
+.leaflet-marker-pane  { z-index: 600; }
+.leaflet-tooltip-pane   { z-index: 650; }
+.leaflet-popup-pane   { z-index: 700; }
+
+.leaflet-map-pane canvas { z-index: 100; }
+.leaflet-map-pane svg    { z-index: 200; }
+
+.leaflet-vml-shape {
+	width: 1px;
+	height: 1px;
+	}
+.lvml {
+	behavior: url(#default#VML);
+	display: inline-block;
+	position: absolute;
+	}
+
+
+/* control positioning */
+
+.leaflet-control {
+	position: relative;
+	z-index: 800;
+	pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+	pointer-events: auto;
+	}
+.leaflet-top,
+.leaflet-bottom {
+	position: absolute;
+	z-index: 1000;
+	pointer-events: none;
+	}
+.leaflet-top {
+	top: 0;
+	}
+.leaflet-right {
+	right: 0;
+	}
+.leaflet-bottom {
+	bottom: 0;
+	}
+.leaflet-left {
+	left: 0;
+	}
+.leaflet-control {
+	float: left;
+	clear: both;
+	}
+.leaflet-right .leaflet-control {
+	float: right;
+	}
+.leaflet-top .leaflet-control {
+	margin-top: 10px;
+	}
+.leaflet-bottom .leaflet-control {
+	margin-bottom: 10px;
+	}
+.leaflet-left .leaflet-control {
+	margin-left: 10px;
+	}
+.leaflet-right .leaflet-control {
+	margin-right: 10px;
+	}
+
+
+/* zoom and fade animations */
+
+.leaflet-fade-anim .leaflet-tile {
+	will-change: opacity;
+	}
+.leaflet-fade-anim .leaflet-popup {
+	opacity: 0;
+	-webkit-transition: opacity 0.2s linear;
+	   -moz-transition: opacity 0.2s linear;
+	        transition: opacity 0.2s linear;
+	}
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+	opacity: 1;
+	}
+.leaflet-zoom-animated {
+	-webkit-transform-origin: 0 0;
+	    -ms-transform-origin: 0 0;
+	        transform-origin: 0 0;
+	}
+.leaflet-zoom-anim .leaflet-zoom-animated {
+	will-change: transform;
+	}
+.leaflet-zoom-anim .leaflet-zoom-animated {
+	-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);
+	        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);
+	}
+.leaflet-zoom-anim .leaflet-tile,
+.leaflet-pan-anim .leaflet-tile {
+	-webkit-transition: none;
+	   -moz-transition: none;
+	        transition: none;
+	}
+
+.leaflet-zoom-anim .leaflet-zoom-hide {
+	visibility: hidden;
+	}
+
+
+/* cursors */
+
+.leaflet-interactive {
+	cursor: pointer;
+	}
+.leaflet-grab {
+	cursor: -webkit-grab;
+	cursor:    -moz-grab;
+	cursor:         grab;
+	}
+.leaflet-crosshair,
+.leaflet-crosshair .leaflet-interactive {
+	cursor: crosshair;
+	}
+.leaflet-popup-pane,
+.leaflet-control {
+	cursor: auto;
+	}
+.leaflet-dragging .leaflet-grab,
+.leaflet-dragging .leaflet-grab .leaflet-interactive,
+.leaflet-dragging .leaflet-marker-draggable {
+	cursor: move;
+	cursor: -webkit-grabbing;
+	cursor:    -moz-grabbing;
+	cursor:         grabbing;
+	}
+
+/* marker & overlays interactivity */
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-image-layer,
+.leaflet-pane > svg path,
+.leaflet-tile-container {
+	pointer-events: none;
+	}
+
+.leaflet-marker-icon.leaflet-interactive,
+.leaflet-image-layer.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: auto;
+	}
+
+/* visual tweaks */
+
+.leaflet-container {
+	background: #ddd;
+	outline: 0;
+	}
+.leaflet-container a {
+	color: #0078A8;
+	}
+.leaflet-container a.leaflet-active {
+	outline: 2px solid orange;
+	}
+.leaflet-zoom-box {
+	border: 2px dotted #38f;
+	background: rgba(255,255,255,0.5);
+	}
+
+
+/* general typography */
+.leaflet-container {
+	font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+	}
+
+
+/* general toolbar styles */
+
+.leaflet-bar {
+	box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+	border-radius: 4px;
+	}
+.leaflet-bar a,
+.leaflet-bar a:hover {
+	background-color: #fff;
+	border-bottom: 1px solid #ccc;
+	width: 26px;
+	height: 26px;
+	line-height: 26px;
+	display: block;
+	text-align: center;
+	text-decoration: none;
+	color: black;
+	}
+.leaflet-bar a,
+.leaflet-control-layers-toggle {
+	background-position: 50% 50%;
+	background-repeat: no-repeat;
+	display: block;
+	}
+.leaflet-bar a:hover {
+	background-color: #f4f4f4;
+	}
+.leaflet-bar a:first-child {
+	border-top-left-radius: 4px;
+	border-top-right-radius: 4px;
+	}
+.leaflet-bar a:last-child {
+	border-bottom-left-radius: 4px;
+	border-bottom-right-radius: 4px;
+	border-bottom: none;
+	}
+.leaflet-bar a.leaflet-disabled {
+	cursor: default;
+	background-color: #f4f4f4;
+	color: #bbb;
+	}
+
+.leaflet-touch .leaflet-bar a {
+	width: 30px;
+	height: 30px;
+	line-height: 30px;
+	}
+.leaflet-touch .leaflet-bar a:first-child {
+	border-top-left-radius: 2px;
+	border-top-right-radius: 2px;
+	}
+.leaflet-touch .leaflet-bar a:last-child {
+	border-bottom-left-radius: 2px;
+	border-bottom-right-radius: 2px;
+	}
+
+/* zoom control */
+
+.leaflet-control-zoom-in,
+.leaflet-control-zoom-out {
+	font: bold 18px 'Lucida Console', Monaco, monospace;
+	text-indent: 1px;
+	}
+
+.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out  {
+	font-size: 22px;
+	}
+
+
+/* layers control */
+
+.leaflet-control-layers {
+	box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+	background: #fff;
+	border-radius: 5px;
+	}
+.leaflet-control-layers-toggle {
+	background-image: url(images/layers.png);
+	width: 36px;
+	height: 36px;
+	}
+.leaflet-retina .leaflet-control-layers-toggle {
+	background-image: url(images/layers-2x.png);
+	background-size: 26px 26px;
+	}
+.leaflet-touch .leaflet-control-layers-toggle {
+	width: 44px;
+	height: 44px;
+	}
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+	display: none;
+	}
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+	display: block;
+	position: relative;
+	}
+.leaflet-control-layers-expanded {
+	padding: 6px 10px 6px 6px;
+	color: #333;
+	background: #fff;
+	}
+.leaflet-control-layers-scrollbar {
+	overflow-y: scroll;
+	overflow-x: hidden;
+	padding-right: 5px;
+	}
+.leaflet-control-layers-selector {
+	margin-top: 2px;
+	position: relative;
+	top: 1px;
+	}
+.leaflet-control-layers label {
+	display: block;
+	}
+.leaflet-control-layers-separator {
+	height: 0;
+	border-top: 1px solid #ddd;
+	margin: 5px -10px 5px -6px;
+	}
+
+/* Default icon URLs */
+.leaflet-default-icon-path {
+	background-image: url(images/marker-icon.png);
+	}
+
+
+/* attribution and scale controls */
+
+.leaflet-container .leaflet-control-attribution {
+	background: #fff;
+	background: rgba(255, 255, 255, 0.7);
+	margin: 0;
+	}
+.leaflet-control-attribution,
+.leaflet-control-scale-line {
+	padding: 0 5px;
+	color: #333;
+	}
+.leaflet-control-attribution a {
+	text-decoration: none;
+	}
+.leaflet-control-attribution a:hover {
+	text-decoration: underline;
+	}
+.leaflet-container .leaflet-control-attribution,
+.leaflet-container .leaflet-control-scale {
+	font-size: 11px;
+	}
+.leaflet-left .leaflet-control-scale {
+	margin-left: 5px;
+	}
+.leaflet-bottom .leaflet-control-scale {
+	margin-bottom: 5px;
+	}
+.leaflet-control-scale-line {
+	border: 2px solid #777;
+	border-top: none;
+	line-height: 1.1;
+	padding: 2px 5px 1px;
+	font-size: 11px;
+	white-space: nowrap;
+	overflow: hidden;
+	-moz-box-sizing: border-box;
+	     box-sizing: border-box;
+
+	background: #fff;
+	background: rgba(255, 255, 255, 0.5);
+	}
+.leaflet-control-scale-line:not(:first-child) {
+	border-top: 2px solid #777;
+	border-bottom: none;
+	margin-top: -2px;
+	}
+.leaflet-control-scale-line:not(:first-child):not(:last-child) {
+	border-bottom: 2px solid #777;
+	}
+
+.leaflet-touch .leaflet-control-attribution,
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+	box-shadow: none;
+	}
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+	border: 2px solid rgba(0,0,0,0.2);
+	background-clip: padding-box;
+	}
+
+
+/* popup */
+
+.leaflet-popup {
+	position: absolute;
+	text-align: center;
+	margin-bottom: 20px;
+	}
+.leaflet-popup-content-wrapper {
+	padding: 1px;
+	text-align: left;
+	border-radius: 12px;
+	}
+.leaflet-popup-content {
+	margin: 13px 19px;
+	line-height: 1.4;
+	}
+.leaflet-popup-content p {
+	margin: 18px 0;
+	}
+.leaflet-popup-tip-container {
+	width: 40px;
+	height: 20px;
+	position: absolute;
+	left: 50%;
+	margin-left: -20px;
+	overflow: hidden;
+	pointer-events: none;
+	}
+.leaflet-popup-tip {
+	width: 17px;
+	height: 17px;
+	padding: 1px;
+
+	margin: -10px auto 0;
+
+	-webkit-transform: rotate(45deg);
+	   -moz-transform: rotate(45deg);
+	    -ms-transform: rotate(45deg);
+	        transform: rotate(45deg);
+	}
+.leaflet-popup-content-wrapper,
+.leaflet-popup-tip {
+	background: white;
+	color: #333;
+	box-shadow: 0 3px 14px rgba(0,0,0,0.4);
+	}
+.leaflet-container a.leaflet-popup-close-button {
+	position: absolute;
+	top: 0;
+	right: 0;
+	padding: 4px 4px 0 0;
+	border: none;
+	text-align: center;
+	width: 18px;
+	height: 14px;
+	font: 16px/14px Tahoma, Verdana, sans-serif;
+	color: #c3c3c3;
+	text-decoration: none;
+	font-weight: bold;
+	background: transparent;
+	}
+.leaflet-container a.leaflet-popup-close-button:hover {
+	color: #999;
+	}
+.leaflet-popup-scrolled {
+	overflow: auto;
+	border-bottom: 1px solid #ddd;
+	border-top: 1px solid #ddd;
+	}
+
+.leaflet-oldie .leaflet-popup-content-wrapper {
+	-ms-zoom: 1;
+	}
+.leaflet-oldie .leaflet-popup-tip {
+	width: 24px;
+	margin: 0 auto;
+
+	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+	}
+.leaflet-oldie .leaflet-popup-tip-container {
+	margin-top: -1px;
+	}
+
+.leaflet-oldie .leaflet-control-zoom,
+.leaflet-oldie .leaflet-control-layers,
+.leaflet-oldie .leaflet-popup-content-wrapper,
+.leaflet-oldie .leaflet-popup-tip {
+	border: 1px solid #999;
+	}
+
+
+/* div icon */
+
+.leaflet-div-icon {
+	background: #fff;
+	border: 1px solid #666;
+	}
+
+
+/* Tooltip */
+/* Base styles for the element that has a tooltip */
+.leaflet-tooltip {
+	position: absolute;
+	padding: 6px;
+	background-color: #fff;
+	border: 1px solid #fff;
+	border-radius: 3px;
+	color: #222;
+	white-space: nowrap;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+	pointer-events: none;
+	box-shadow: 0 1px 3px rgba(0,0,0,0.4);
+	}
+.leaflet-tooltip.leaflet-clickable {
+	cursor: pointer;
+	pointer-events: auto;
+	}
+.leaflet-tooltip-top:before,
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+	position: absolute;
+	pointer-events: none;
+	border: 6px solid transparent;
+	background: transparent;
+	content: "";
+	}
+
+/* Directions */
+
+.leaflet-tooltip-bottom {
+	margin-top: 6px;
+}
+.leaflet-tooltip-top {
+	margin-top: -6px;
+}
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-top:before {
+	left: 50%;
+	margin-left: -6px;
+	}
+.leaflet-tooltip-top:before {
+	bottom: 0;
+	margin-bottom: -12px;
+	border-top-color: #fff;
+	}
+.leaflet-tooltip-bottom:before {
+	top: 0;
+	margin-top: -12px;
+	margin-left: -6px;
+	border-bottom-color: #fff;
+	}
+.leaflet-tooltip-left {
+	margin-left: -6px;
+}
+.leaflet-tooltip-right {
+	margin-left: 6px;
+}
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+	top: 50%;
+	margin-top: -6px;
+	}
+.leaflet-tooltip-left:before {
+	right: 0;
+	margin-right: -12px;
+	border-left-color: #fff;
+	}
+.leaflet-tooltip-right:before {
+	left: 0;
+	margin-left: -12px;
+	border-right-color: #fff;
+	}

+ 3 - 5
searx/static/themes/simple/css/searx-rtl.css

@@ -1,4 +1,4 @@
-/*! searx | 16-06-2021 |  */
+/*! searx | 16-06-2021 | https://github.com/searxng/searxng */
 /*
 * searx, A privacy-respecting, hackable metasearch engine
 *
@@ -1672,14 +1672,13 @@ td:hover .engine-tooltip,
 }
 @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");
+  src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a");
+  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-style: normal;
 }
 .ion-icon {
   display: inline-block;
-  vertical-align: middle;
   line-height: 1;
   font-weight: normal;
   font-style: normal;
@@ -1758,7 +1757,6 @@ td:hover .engine-tooltip,
 }
 .ion-icon-big {
   display: inline-block;
-  vertical-align: middle;
   line-height: 1;
   font-weight: normal;
   font-style: normal;

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx-rtl.min.css


File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx-rtl.min.css.map


+ 3 - 5
searx/static/themes/simple/css/searx.css

@@ -1,4 +1,4 @@
-/*! searx | 16-06-2021 |  */
+/*! searx | 16-06-2021 | https://github.com/searxng/searxng */
 /*
 * searx, A privacy-respecting, hackable metasearch engine
 *
@@ -1672,14 +1672,13 @@ td:hover .engine-tooltip,
 }
 @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");
+  src: url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a");
+  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-style: normal;
 }
 .ion-icon {
   display: inline-block;
-  vertical-align: middle;
   line-height: 1;
   font-weight: normal;
   font-style: normal;
@@ -1758,7 +1757,6 @@ td:hover .engine-tooltip,
 }
 .ion-icon-big {
   display: inline-block;
-  vertical-align: middle;
   line-height: 1;
   font-weight: normal;
   font-style: normal;

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx.min.css


File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx.min.css.map


+ 7 - 7
searx/static/themes/simple/fonts/ion.css

@@ -1,14 +1,15 @@
 /* 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");
+	src:url("../fonts/ion.eot?14747ff3e5db3853c40bc9540e9f6c3a");
+	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-style:normal;
 }
@@ -18,7 +19,6 @@
 		font-family:"ion";
 	
 	display:inline-block;
-	vertical-align:middle;
 	line-height:1;
 	font-weight:normal;
 	font-style:normal;

BIN
searx/static/themes/simple/fonts/ion.eot


+ 7 - 7
searx/static/themes/simple/fonts/ion.html

@@ -58,14 +58,15 @@
 		/* Generated by grunt-webfont */
 
 
+
 @font-face {
 	font-family:"ion";
-	src:url("ion.eot?ce7a0ead692560b4405a96d5b8471f51");
-	src:url("ion.eot?#iefix") format("embedded-opentype"),
-		url("ion.woff2?ce7a0ead692560b4405a96d5b8471f51") format("woff2"),
-		url("ion.woff?ce7a0ead692560b4405a96d5b8471f51") format("woff"),
-		url("ion.ttf?ce7a0ead692560b4405a96d5b8471f51") format("truetype"),
-		url("ion.svg?ce7a0ead692560b4405a96d5b8471f51#ion") format("svg");
+	src:url("ion.eot?14747ff3e5db3853c40bc9540e9f6c3a");
+	src:url("ion.eot?14747ff3e5db3853c40bc9540e9f6c3a#iefix") format("embedded-opentype"),
+		url("ion.woff2?14747ff3e5db3853c40bc9540e9f6c3a") format("woff2"),
+		url("ion.woff?14747ff3e5db3853c40bc9540e9f6c3a") format("woff"),
+		url("ion.ttf?14747ff3e5db3853c40bc9540e9f6c3a") format("truetype"),
+		url("ion.svg?14747ff3e5db3853c40bc9540e9f6c3a#ion") format("svg");
 	font-weight:normal;
 	font-style:normal;
 }
@@ -75,7 +76,6 @@
 		font-family:"ion";
 	
 	display:inline-block;
-	vertical-align:middle;
 	line-height:1;
 	font-weight:normal;
 	font-style:normal;

+ 3 - 3
searx/static/themes/simple/fonts/ion.svg

@@ -1,12 +1,12 @@
 <?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" >
 <!--
-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">
 <metadata>
-Created by FontForge 20170924 at Sat Aug 11 14:26:20 2018
- By alexandre,,,
+Created by FontForge 20190801 at Wed Jun 16 14:20:50 2021
+ By alexandre
 
 </metadata>
 <defs>

BIN
searx/static/themes/simple/fonts/ion.ttf


BIN
searx/static/themes/simple/fonts/ion.woff


BIN
searx/static/themes/simple/fonts/ion.woff2


File diff suppressed because it is too large
+ 4 - 0
searx/static/themes/simple/js/leaflet.js


+ 1 - 1
searx/static/themes/simple/js/searx.head.js

@@ -33,7 +33,7 @@
         infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true',
         static_path: script.getAttribute('data-static-path'),
         translations: JSON.parse(script.getAttribute('data-translations')),
-    }
+    };
 
     // update the css
     d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js";

+ 1 - 1
searx/static/themes/simple/js/searx.head.min.js

@@ -1,4 +1,4 @@
-/*! simple/searx.min.js | 16-06-2021 |  */
+/*! 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);
 //# sourceMappingURL=searx.head.min.js.map

+ 595 - 591
searx/static/themes/simple/js/searx.js

@@ -162,603 +162,67 @@ window.searx = (function(w, d) {
   
   return searx;
 })(window, document);
-;(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];
+;searx.ready(function() {
+
+  searx.on('.result', 'click', function() {
+    highlightResult(this)(true);
+  });
+
+  searx.on('.result a', 'focus', function(e) {
+    var el = e.target;
+    while (el !== undefined) {
+      if (el.classList.contains('result')) {
+        if (el.getAttribute("data-vim-selected") === null) {
+          highlightResult(el)(true);
         }
+        break;
+      }
+      el = el.parentNode;
     }
-    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
-        }
+  }, true);
+
+  var vimKeys = {
+    27: {
+      key: 'Escape',
+      fun: removeFocus,
+      des: 'remove focus from the focused input',
+      cat: 'Control'
     },
-    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;
+    73: {
+      key: 'i',
+      fun: searchInputFocus,
+      des: 'focus on the search input',
+      cat: 'Control'
     },
-    /**
-     * 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);
+    66: {
+      key: 'b',
+      fun: scrollPage(-window.innerHeight),
+      des: 'scroll one page up',
+      cat: 'Navigation'
     },
-    /**
-     * 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);
+    70: {
+      key: 'f',
+      fun: scrollPage(window.innerHeight),
+      des: 'scroll one page down',
+      cat: 'Navigation'
     },
-    /**
-     * Apply transformation on labels response
-     */
-    _Highlight: function (label) {
-        return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);
+    85: {
+      key: 'u',
+      fun: scrollPage(-window.innerHeight / 2),
+      des: 'scroll half a page up',
+      cat: 'Navigation'
     },
-    /**
-     * 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;
+    68: {
+      key: 'd',
+      fun: scrollPage(window.innerHeight / 2),
+      des: 'scroll half a page down',
+      cat: 'Navigation'
     },
-    /**
-     * 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)
-});
-;searx.ready(function() {
-
-  searx.on('.result', 'click', function() {
-    highlightResult(this)(true);
-  });
-
-  searx.on('.result a', 'focus', function(e) {
-    var el = e.target;
-    while (el !== undefined) {
-      if (el.classList.contains('result')) {
-        if (el.getAttribute("data-vim-selected") === null) {
-          highlightResult(el)(true);
-        }
-        break;
-      }
-      el = el.parentNode;
-    }
-  }, true);
-
-  var vimKeys = {
-    27: {
-      key: 'Escape',
-      fun: removeFocus,
-      des: 'remove focus from the focused input',
-      cat: 'Control'
-    },
-    73: {
-      key: 'i',
-      fun: searchInputFocus,
-      des: 'focus on the search input',
-      cat: 'Control'
-    },
-    66: {
-      key: 'b',
-      fun: scrollPage(-window.innerHeight),
-      des: 'scroll one page up',
-      cat: 'Navigation'
-    },
-    70: {
-      key: 'f',
-      fun: scrollPage(window.innerHeight),
-      des: 'scroll one page down',
-      cat: 'Navigation'
-    },
-    85: {
-      key: 'u',
-      fun: scrollPage(-window.innerHeight / 2),
-      des: 'scroll half a page up',
-      cat: 'Navigation'
-    },
-    68: {
-      key: 'd',
-      fun: scrollPage(window.innerHeight / 2),
-      des: 'scroll half a page down',
-      cat: 'Navigation'
-    },
-    71: {
-      key: 'g',
-      fun: scrollPageTo(-document.body.scrollHeight, 'top'),
-      des: 'scroll to the top of the page',
-      cat: 'Navigation'
+    71: {
+      key: 'g',
+      fun: scrollPageTo(-document.body.scrollHeight, 'top'),
+      des: 'scroll to the top of the page',
+      cat: 'Navigation'
     },
     86: {
       key: 'v',
@@ -1097,8 +561,8 @@ module.exports = AutoComplete;
       var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);
       var map_geojson = JSON.parse(this.dataset.mapGeojson);
 
-      searx.loadStyle('leaflet/leaflet.css');
-      searx.loadScript('leaflet/leaflet.js', function() {
+      searx.loadStyle('css/leaflet.css');
+      searx.loadScript('js/leaflet.js', function() {
         var map_bounds = null;
         if(map_boundingbox) {
           var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);
@@ -1500,3 +964,543 @@ module.exports = AutoComplete;
   w.searx.ImageLayout = ImageLayout;
 
 }(window, document));
+;(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(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+/*
+ * @license MIT
+ *
+ * Autocomplete.js v2.7.1
+ * 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 = /** @class */ (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, callbackErr) {
+        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);
+            }
+            else if (request.status >= 400) {
+                callbackErr();
+            }
+        };
+        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, callbackErr) {
+        var response = params._Cache(params._Pre());
+        if (response === undefined) {
+            var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);
+            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);
+    };
+    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), this._Error);
+                    }
+                    else {
+                        this._Close();
+                    }
+                },
+                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 === void 0) { now = false; }
+            if (now) {
+                this._Close();
+            }
+            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 () {
+                        params._Select(li);
+                    };
+                }
+            });
+        },
+        _Close: function () {
+            this.DOMResults.setAttribute("class", "autocomplete");
+        },
+        /**
+         * 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) {
+            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);
+        },
+        /**
+         * Handle HTTP error on the request
+         */
+        _Error: function () {
+        },
+        $AjaxTimer: null,
+        $Cache: {},
+        $Listeners: {}
+    };
+    return AutoComplete;
+}());
+module.exports = AutoComplete;
+
+},{}]},{},[1])(1)
+});

File diff suppressed because it is too large
+ 1 - 1
searx/static/themes/simple/js/searx.min.js


File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/js/searx.min.js.map


Some files were not shown because too many files changed in this diff