Browse Source

Merge pull request #127 from pointhi/template_oscar_map

Template oscar, add map support
Adam Tauber 10 years ago
parent
commit
075a5fe898
38 changed files with 778 additions and 95 deletions
  1. 47 2
      searx/engines/openstreetmap.py
  2. 93 0
      searx/static/oscar/css/leaflet.min.css
  3. 5 0
      searx/static/oscar/css/oscar.min.css
  4. BIN
      searx/static/oscar/img/loader.gif
  5. BIN
      searx/static/oscar/img/map/layers-2x.png
  6. BIN
      searx/static/oscar/img/map/layers.png
  7. BIN
      searx/static/oscar/img/map/marker-icon-2x.png
  8. BIN
      searx/static/oscar/img/map/marker-icon.png
  9. BIN
      searx/static/oscar/img/map/marker-shadow.png
  10. 5 0
      searx/static/oscar/js/leaflet-0.7.3.min.js
  11. 36 0
      searx/static/oscar/js/require-2.1.15.min.js
  12. 160 0
      searx/static/oscar/js/scripts.js
  13. 4 0
      searx/static/oscar/less/oscar/cursor.less
  14. 31 0
      searx/static/oscar/less/oscar/results.less
  15. 13 0
      searx/templates/courgette/result_templates/map.html
  16. 13 0
      searx/templates/default/result_templates/map.html
  17. 3 1
      searx/templates/oscar/base.html
  18. 7 2
      searx/templates/oscar/result_templates/default.html
  19. 2 1
      searx/templates/oscar/result_templates/images.html
  20. 74 0
      searx/templates/oscar/result_templates/map.html
  21. 7 4
      searx/templates/oscar/result_templates/torrent.html
  22. 9 4
      searx/templates/oscar/result_templates/videos.html
  23. BIN
      searx/translations/de/LC_MESSAGES/messages.mo
  24. 59 32
      searx/translations/de/LC_MESSAGES/messages.po
  25. BIN
      searx/translations/en/LC_MESSAGES/messages.mo
  26. 30 7
      searx/translations/en/LC_MESSAGES/messages.po
  27. BIN
      searx/translations/es/LC_MESSAGES/messages.mo
  28. 30 7
      searx/translations/es/LC_MESSAGES/messages.po
  29. BIN
      searx/translations/fr/LC_MESSAGES/messages.mo
  30. 30 7
      searx/translations/fr/LC_MESSAGES/messages.po
  31. BIN
      searx/translations/hu/LC_MESSAGES/messages.mo
  32. 30 7
      searx/translations/hu/LC_MESSAGES/messages.po
  33. BIN
      searx/translations/it/LC_MESSAGES/messages.mo
  34. 30 7
      searx/translations/it/LC_MESSAGES/messages.po
  35. BIN
      searx/translations/ja/LC_MESSAGES/messages.mo
  36. 30 7
      searx/translations/ja/LC_MESSAGES/messages.po
  37. BIN
      searx/translations/nl/LC_MESSAGES/messages.mo
  38. 30 7
      searx/translations/nl/LC_MESSAGES/messages.po

+ 47 - 2
searx/engines/openstreetmap.py

@@ -15,7 +15,7 @@ categories = ['map']
 paging = False
 
 # search-url
-url = 'https://nominatim.openstreetmap.org/search/{query}?format=json'
+url = 'https://nominatim.openstreetmap.org/search/{query}?format=json&polygon_geojson=1&addressdetails=1'
 
 result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
 
@@ -38,9 +38,54 @@ def response(resp):
         osm_type = r.get('osm_type', r.get('type'))
         url = result_base_url.format(osm_type=osm_type,
                                      osm_id=r['osm_id'])
+
+        osm = {'type':osm_type,
+               'id':r['osm_id']}
+
+        geojson =  r.get('geojson')
+
+        # if no geojson is found and osm_type is a node, add geojson Point
+        if not geojson and\
+           osm_type == 'node':
+            geojson = {u'type':u'Point', 
+                       u'coordinates':[r['lon'],r['lat']]}
+
+        address_raw = r.get('address')
+        address = {}
+
+        # get name
+        if r['class'] == 'amenity' or\
+           r['class'] == 'shop' or\
+           r['class'] == 'tourism' or\
+           r['class'] == 'leisure':
+            if address_raw.get('address29'):
+                address = {'name':address_raw.get('address29')}
+            else:
+                address = {'name':address_raw.get(r['type'])}
+
+        # add rest of adressdata, if something is already found
+        if address.get('name'):
+            address.update({'house_number':address_raw.get('house_number'),
+                       'road':address_raw.get('road'),
+                       'locality':address_raw.get('city',
+                                  address_raw.get('town', 
+                                  address_raw.get('village'))),
+                       'postcode':address_raw.get('postcode'),
+                       'country':address_raw.get('country'),
+                       'country_code':address_raw.get('country_code')})
+        else:
+            address = None
+
         # append result
-        results.append({'title': title,
+        results.append({'template': 'map.html',
+                        'title': title,
                         'content': '',
+                        'longitude': r['lon'],
+                        'latitude': r['lat'],
+                        'boundingbox': r['boundingbox'],
+                        'geojson': geojson,
+                        'address': address,
+                        'osm': osm,
                         'url': url})
 
     # return results

+ 93 - 0
searx/static/oscar/css/leaflet.min.css

@@ -0,0 +1,93 @@
+.leaflet-map-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-pane,.leaflet-tile-container,.leaflet-overlay-pane,.leaflet-shadow-pane,.leaflet-marker-pane,.leaflet-popup-pane,.leaflet-overlay-pane svg,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}
+.leaflet-container{overflow:hidden;-ms-touch-action:none}
+.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}
+.leaflet-marker-icon,.leaflet-marker-shadow{display:block}
+.leaflet-container img{max-width:none !important}
+.leaflet-container img.leaflet-image-layer{max-width:15000px !important}
+.leaflet-tile{filter:inherit;visibility:hidden}
+.leaflet-tile-loaded{visibility:inherit}
+.leaflet-zoom-box{width:0;height:0}
+.leaflet-overlay-pane svg{-moz-user-select:none}
+.leaflet-tile-pane{z-index:2}
+.leaflet-objects-pane{z-index:3}
+.leaflet-overlay-pane{z-index:4}
+.leaflet-shadow-pane{z-index:5}
+.leaflet-marker-pane{z-index:6}
+.leaflet-popup-pane{z-index:7}
+.leaflet-vml-shape{width:1px;height:1px}
+.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}
+.leaflet-control{position:relative;z-index:7;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}
+.leaflet-fade-anim .leaflet-tile,.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}
+.leaflet-fade-anim .leaflet-tile-loaded,.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}
+.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0, 0, .25, 1);-moz-transition:-moz-transform .25s cubic-bezier(0, 0, .25, 1);-o-transition:-o-transform .25s cubic-bezier(0, 0, .25, 1);transition:transform .25s cubic-bezier(0, 0, .25, 1)}
+.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile,.leaflet-touching .leaflet-zoom-animated{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}
+.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}
+.leaflet-clickable{cursor:pointer}
+.leaflet-container{cursor:-webkit-grab;cursor:-moz-grab}
+.leaflet-popup-pane,.leaflet-control{cursor:auto}
+.leaflet-dragging .leaflet-container,.leaflet-dragging .leaflet-clickable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing}
+.leaflet-container{background:#ddd;outline:0}
+.leaflet-container a{color:#0078a8}
+.leaflet-container a.leaflet-active{outline:2px solid #ffa500}
+.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,0.5)}
+.leaflet-container{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}
+.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:#000}
+.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-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:1px}
+.leaflet-control-zoom-out{font-size:20px}
+.leaflet-touch .leaflet-control-zoom-in{font-size:22px}
+.leaflet-touch .leaflet-control-zoom-out{font-size:24px}
+.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(../img/map/layers.png);width:36px;height:36px}
+.leaflet-retina .leaflet-control-layers-toggle{background-image:url(../img/map/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-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}
+.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:content-box;box-sizing:content-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}
+.leaflet-popup{position:absolute;text-align:center}
+.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{margin:0 auto;width:40px;height:20px;position:relative;overflow:hidden}
+.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);-o-transform:rotate(45deg);transform:rotate(45deg)}
+.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;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;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{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}
+.leaflet-div-icon{background:#fff;border:1px solid #666}

+ 5 - 0
searx/static/oscar/css/oscar.min.css

@@ -3,11 +3,15 @@ body{margin-bottom:80px}
 .footer{position:absolute;bottom:0;width:100%;height:60px}
 input[type=checkbox]:checked~.label_hide_if_checked{display:none}
 input[type=checkbox]:not(:checked)~.label_hide_if_not_checked{display:none}
+.result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px}
+.result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:bold}
+.result-content{margin-top:5px}.result-content .highlight{font-weight:bold}
 .result-default{clear:both}
 .result-images{float:left !important}
 .img-thumbnail{margin:5px;max-height:128px;min-height:128px}
 .result-videos{clear:both}
 .result-torrents{clear:both}
+.result-map{clear:both}
 .suggestion_item{margin:2px 5px}
 .result_download{margin-right:5px}
 #pagination{margin-top:30px;padding-bottom:50px}
@@ -15,3 +19,4 @@ input[type=checkbox]:not(:checked)~.label_hide_if_not_checked{display:none}
 .infobox .infobox_part:last-child{margin-bottom:0}
 .search_categories{margin:10px 0;text-transform:capitalize}
 .cursor-text{cursor:text !important}
+.cursor-pointer{cursor:pointer !important}

BIN
searx/static/oscar/img/loader.gif


BIN
searx/static/oscar/img/map/layers-2x.png


BIN
searx/static/oscar/img/map/layers.png


BIN
searx/static/oscar/img/map/marker-icon-2x.png


BIN
searx/static/oscar/img/map/marker-icon.png


BIN
searx/static/oscar/img/map/marker-shadow.png


File diff suppressed because it is too large
+ 5 - 0
searx/static/oscar/js/leaflet-0.7.3.min.js


+ 36 - 0
searx/static/oscar/js/require-2.1.15.min.js

@@ -0,0 +1,36 @@
+/*
+ RequireJS 2.1.15 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ Available via the MIT or new BSD license.
+ see: http://github.com/jrburke/requirejs for details
+*/
+var requirejs,require,define;
+(function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function T(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return fa.call(b,c)}function m(b,c){return t(b,c)&&b[c]}function B(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function U(b,c,d,e){c&&B(c,function(c,g){if(d||!t(b,g))e&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
+RegExp)?(b[g]||(b[g]={}),U(b[g],c,d,e)):b[g]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,e){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=e;d&&(c.originalError=d);return c}function ga(b){function c(a,k,b){var f,l,c,d,e,g,i,p,k=k&&k.split("/"),h=j.map,n=h&&h["*"];if(a){a=a.split("/");l=a.length-1;j.nodeIdCompat&&
+Q.test(a[l])&&(a[l]=a[l].replace(Q,""));"."===a[0].charAt(0)&&k&&(l=k.slice(0,k.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)if(d=l[c],"."===d)l.splice(c,1),c-=1;else if(".."===d&&!(0===c||1==c&&".."===l[2]||".."===l[c-1])&&0<c)l.splice(c-1,2),c-=2;a=a.join("/")}if(b&&h&&(k||n)){l=a.split("/");c=l.length;a:for(;0<c;c-=1){e=l.slice(0,c).join("/");if(k)for(d=k.length;0<d;d-=1)if(b=m(h,k.slice(0,d).join("/")))if(b=m(b,e)){f=b;g=c;break a}!i&&(n&&m(n,e))&&(i=m(n,e),p=c)}!f&&i&&(f=i,g=p);f&&(l.splice(0,
+g,f),a=l.join("/"))}return(f=m(j.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(k){if(k.getAttribute("data-requiremodule")===a&&k.getAttribute("data-requirecontext")===i.contextName)return k.parentNode.removeChild(k),!0})}function e(a){var k=m(j.paths,a);if(k&&H(k)&&1<k.length)return k.shift(),i.require.undef(a),i.makeRequire(null,{skipMap:!0})([a]),!0}function n(a){var k,c=a?a.indexOf("!"):-1;-1<c&&(k=a.substring(0,c),a=a.substring(c+1,a.length));return[k,a]}function p(a,
+k,b,f){var l,d,e=null,g=k?k.name:null,j=a,p=!0,h="";a||(p=!1,a="_@r"+(K+=1));a=n(a);e=a[0];a=a[1];e&&(e=c(e,g,f),d=m(r,e));a&&(e?h=d&&d.normalize?d.normalize(a,function(a){return c(a,g,f)}):-1===a.indexOf("!")?c(a,g,f):a:(h=c(a,g,f),a=n(h),e=a[0],h=a[1],b=!0,l=i.nameToUrl(h)));b=e&&!d&&!b?"_unnormalized"+(O+=1):"";return{prefix:e,name:h,parentMap:k,unnormalized:!!b,url:l,originalName:j,isDefine:p,id:(e?e+"!"+h:h)+b}}function s(a){var k=a.id,b=m(h,k);b||(b=h[k]=new i.Module(a));return b}function q(a,
+k,b){var f=a.id,c=m(h,f);if(t(r,f)&&(!c||c.defineEmitComplete))"defined"===k&&b(r[f]);else if(c=s(a),c.error&&"error"===k)b(c.error);else c.on(k,b)}function w(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(v(c,function(b){if(b=m(h,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)g.onError(a)}function x(){R.length&&(ha.apply(A,[A.length,0].concat(R)),R=[])}function y(a){delete h[a];delete V[a]}function F(a,b,c){var f=a.map.id;a.error?a.emit("error",a.error):(b[f]=!0,v(a.depMaps,function(f,
+d){var e=f.id,g=m(h,e);g&&(!a.depMatched[d]&&!c[e])&&(m(b,e)?(a.defineDep(d,r[e]),a.check()):F(g,b,c))}),c[f]=!0)}function D(){var a,b,c=(a=1E3*j.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],l=[],g=!1,h=!0;if(!W){W=!0;B(V,function(a){var i=a.map,j=i.id;if(a.enabled&&(i.isDefine||l.push(a),!a.error))if(!a.inited&&c)e(j)?g=b=!0:(f.push(j),d(j));else if(!a.inited&&(a.fetched&&i.isDefine)&&(g=!0,!i.prefix))return h=!1});if(c&&f.length)return a=C("timeout","Load timeout for modules: "+f,null,
+f),a.contextName=i.contextName,w(a);h&&v(l,function(a){F(a,{},{})});if((!c||b)&&g)if((z||ea)&&!X)X=setTimeout(function(){X=0;D()},50);W=!1}}function E(a){t(r,a[0])||s(p(a[0],null,!0)).init(a[1],a[2])}function I(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!Y?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function J(){var a;
+for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var W,Z,i,L,X,j={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},h={},V={},$={},A=[],r={},S={},aa={},K=1,O=1;L={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?r[a.map.id]=a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?
+a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m(j.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};Z=function(a){this.events=m($,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
+c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
+this.map.url;S[a]||(S[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&&
+(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
+this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f);
+if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval",
+"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b,
+a);this.check()}));this.errback&&q(a,"error",u(this,this.errback))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b,registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,
+nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,
+a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n,q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=
+!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d,e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==
+e&&(!("."===k||".."===k)||1<e))d=b.substring(e,b.length),b=b.substring(0,e);return i.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(r,p(b,a,!1,!0).id)},specified:function(b){b=p(b,a,!1,!0).id;return t(r,b)||t(h,b)}});a||(j.undef=function(b){x();var c=p(b,a,!0),e=m(h,b);d(b);delete r[b];delete S[c.url];delete $[b];T(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&($[b]=e.events),y(b))});return j},enable:function(a){m(h,a.id)&&s(a).enable()},completeLoad:function(a){var b,
+c,d=m(j.shim,a)||{},g=d.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=m(h,a);if(!b&&!t(r,a)&&c&&!c.inited){if(j.enforceDefine&&(!g||!da(g)))return e(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,d.deps||[],d.exportsFn])}D()},nameToUrl:function(a,b,c){var d,e,h;(d=m(j.pkgs,a))&&(a=d);if(d=m(aa,a))return i.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=j.paths;a=a.split("/");for(e=a.length;0<e;e-=1)if(h=a.slice(0,
+e).join("/"),h=m(d,h)){H(h)&&(h=h[0]);a.splice(0,e,h);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+d}return j.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+j.urlArgs):d},load:function(a,b){g.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ja.test((a.currentTarget||a.srcElement).readyState))N=null,a=I(a),i.completeLoad(a.id)},onScriptError:function(a){var b=I(a);if(!e(b.id))return w(C("scripterror",
+"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var g,x,y,D,I,E,N,J,s,O,ka=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,la=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,Q=/\.js$/,ia=/^\.\//;x=Object.prototype;var K=x.toString,fa=x.hasOwnProperty,ha=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),ea=!z&&"undefined"!==typeof importScripts,ja=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
+Y="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},q={},R=[],M=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;q=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(q=require,require=void 0);g=requirejs=function(b,c,d,e){var n,p="_";!H(b)&&"string"!==typeof b&&(n=b,H(c)?(b=c,c=d,d=e):b=[]);n&&n.context&&(p=n.context);(e=m(F,p))||(e=F[p]=g.s.newContext(p));n&&e.configure(n);return e.require(b,c,d)};g.config=function(b){return g(b)};
+g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.1.15";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=z;x=g.s={contexts:F,newContext:ga};g({});v(["toUrl","undef","defined","specified"],function(b){g[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;g.onError=ca;g.createNode=function(b){var c=
+b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var e=b&&b.config||{};if(z)return e=g.createNode(e,c,d),e.setAttribute("data-requirecontext",b.contextName),e.setAttribute("data-requiremodule",c),e.attachEvent&&!(e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code"))&&!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):
+(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"),s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=
+O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b}),e=N;e&&(b||
+(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this);

+ 160 - 0
searx/static/oscar/js/scripts.js

@@ -7,6 +7,13 @@
 
 */
 
+requirejs.config({
+baseUrl: '/static/oscar/js',
+paths: {
+app: '../app'
+}
+});
+
 if(searx.autocompleter) {
     searx.searchResults = new Bloodhound({
         datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
@@ -61,4 +68,157 @@ $(document).ready(function(){
             source: searx.searchResults.ttAdapter()
         });
     }
+    
+    $(".searx_overpass_request").on( "click", function( event ) {
+        var overpass_url = "http://overpass-api.de/api/interpreter?data=";
+        var query_start = overpass_url + "[out:json][timeout:25];(";
+        var query_end = ");out meta;";
+        
+        var osm_id = $(this).data('osm-id');
+        var osm_type = $(this).data('osm-type');
+        var result_table = $(this).data('result-table');
+        var result_table_loadicon = "#" + $(this).data('result-table-loadicon');
+        
+        // tags which can be ignored
+        var osm_ignore_tags = [ "addr:city", "addr:country", "addr:housenumber", "addr:postcode", "addr:street" ]
+        
+        if(osm_id && osm_type && result_table) {
+            result_table = "#" + result_table;
+            var query = null;
+            switch(osm_type) {
+                case 'node':
+                    query = query_start + "node(" + osm_id + ");" + query_end;
+                    break;
+                case 'way':
+                    query = query_start + "way(" + osm_id + ");" + query_end;
+                    break;
+                case 'relation':
+                    query = query_start + "relation(" + osm_id + ");" + query_end;
+                    break;
+                default:
+                    break;
+            }
+            if(query) {
+                //alert(query);
+                var ajaxRequest = $.ajax( query )
+                .done(function( html) {
+                    if(html && html['elements'] && html['elements'][0]) {
+                        var element = html['elements'][0];
+                        var newHtml = $(result_table).html();
+                        for (var row in element.tags) {
+                            if(element.tags["name"] == null || osm_ignore_tags.indexOf(row) == -1) {
+                                newHtml += "<tr><td>" + row + "</td><td>";
+                                switch(row) {
+                                    case "phone":
+                                    case "fax":
+                                        newHtml += "<a href=\"tel:" + element.tags[row].replace(/ /g,'') + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "email":
+                                        newHtml += "<a href=\"mailto:" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "website":
+                                    case "url":
+                                        newHtml += "<a href=\"" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "wikidata":
+                                        newHtml += "<a href=\"https://www.wikidata.org/wiki/" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "wikipedia":
+                                        if(element.tags[row].indexOf(":") != -1) {
+                                            newHtml += "<a href=\"https://" + element.tags[row].substring(0,element.tags[row].indexOf(":")) + ".wikipedia.org/wiki/" 
+                                                + element.tags[row].substring(element.tags[row].indexOf(":")+1) + "\">" + element.tags[row] + "</a>";
+                                            break;
+                                        }
+                                    default:
+                                        newHtml += element.tags[row];
+                                        break;
+                                }
+                                newHtml += "</td></tr>";
+                            }
+                        }
+                        $(result_table).html(newHtml);
+                        $(result_table).removeClass('hidden');
+                        $(result_table_loadicon).addClass('hidden');
+                    }
+                })
+                .fail(function() {
+                    alert( "could not load " );
+                })
+            }
+        }
+
+        // this event occour only once per element
+        $( this ).off( event );    
+    });
+
+    $(".searx_init_map").on( "click", function( event ) {
+        var leaflet_target = $(this).data('leaflet-target');
+        var map_lon = $(this).data('map-lon');
+        var map_lat = $(this).data('map-lat');
+        var map_zoom = $(this).data('map-zoom');
+        var map_boundingbox = $(this).data('map-boundingbox');
+        var map_geojson = $(this).data('map-geojson');
+  
+        require(['leaflet-0.7.3.min'], function(leaflet) {
+            if(map_boundingbox) {
+                var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]),
+                    northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]),
+                    map_bounds = L.latLngBounds(southWest, northEast);
+            }
+
+            // TODO hack
+            // change default imagePath
+            L.Icon.Default.imagePath = 	"/static/oscar/img/map";
+
+            // init map
+            var map = L.map(leaflet_target);
+
+            // create the tile layer with correct attribution
+	        var osmMapnikUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
+	        var osmMapnikAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';
+	        var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});
+	        
+	        var osmMapquestUrl='http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg';
+	        var osmMapquestAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors | Tiles Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> <img src="http://developer.mapquest.com/content/osm/mq_logo.png">';
+	        var osmMapquest = new L.TileLayer(osmMapquestUrl, {minZoom: 1, maxZoom: 18, subdomains: '1234', attribution: osmMapquestAttrib});
+	        
+	        var osmMapquestOpenAerialUrl='http://otile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg';
+	        var osmMapquestOpenAerialAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors | Tiles Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> <img src="https://developer.mapquest.com/content/osm/mq_logo.png"> | Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency';
+	        var osmMapquestOpenAerial = new L.TileLayer(osmMapquestOpenAerialUrl, {minZoom: 1, maxZoom: 11, subdomains: '1234', attribution: osmMapquestOpenAerialAttrib});
+
+            // init map view
+            if(map_bounds) {
+                // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021
+                setTimeout(function () {
+                    map.fitBounds(map_bounds, {
+                        maxZoom:17
+                    });
+                }, 0);
+            } else if (map_lon && map_lat) {
+                if(map_zoom) 
+                    map.setView(new L.LatLng(map_lat, map_lon),map_zoom);
+                else
+                    map.setView(new L.LatLng(map_lat, map_lon),8);
+            }
+
+	        map.addLayer(osmMapquest);
+	        
+	        var baseLayers = {
+             "OSM Mapnik": osmMapnik,
+             "MapQuest": osmMapquest/*,
+             "MapQuest Open Aerial": osmMapquestOpenAerial*/
+            };
+
+            L.control.layers(baseLayers).addTo(map);
+
+
+            if(map_geojson)
+                L.geoJson(map_geojson).addTo(map);
+            /*else if(map_bounds)
+                L.rectangle(map_bounds, {color: "#ff7800", weight: 3, fill:false}).addTo(map);*/
+        });
+
+        // this event occour only once per element
+        $( this ).off( event );
+    });
 });  

+ 4 - 0
searx/static/oscar/less/oscar/cursor.less

@@ -2,3 +2,7 @@
 .cursor-text {
     cursor: text !important;
 }
+
+.cursor-pointer {
+    cursor: pointer !important;
+}

+ 31 - 0
searx/static/oscar/less/oscar/results.less

@@ -1,3 +1,29 @@
+
+.result_header {
+    margin-bottom:5px;
+    margin-top:20px;
+
+    .favicon {
+        margin-bottom:-3px;
+    }
+    
+    a {
+        vertical-align: bottom;
+        
+        .highlight {
+            font-weight:bold;
+        }
+    }
+}
+
+.result-content {
+    margin-top: 5px;
+
+    .highlight {
+        font-weight:bold;
+    }
+}
+
 // default formating of results
 .result-default {
     clear: both;
@@ -24,6 +50,11 @@
     clear: both;
 }
 
+// map formating of results
+.result-map {
+    clear: both;
+}
+
 // suggestion
 .suggestion_item {
     margin: 2px 5px;

+ 13 - 0
searx/templates/courgette/result_templates/map.html

@@ -0,0 +1,13 @@
+<div class="result {{ result.class }}">
+
+  {% if result['favicon'] %}
+    <img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" />
+  {% endif %}
+
+  <div>
+    <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+	{% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
+    <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
+    <p class="url">{{ result.pretty_url }}</p>
+  </div>
+</div>

+ 13 - 0
searx/templates/default/result_templates/map.html

@@ -0,0 +1,13 @@
+<div class="result {{ result.class }}">
+
+  {% if result['favicon'] %}
+    <img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" />
+  {% endif %}
+
+  <div>
+    <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+    <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p>
+	{% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
+    <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p>
+  </div>
+</div>

+ 3 - 1
searx/templates/oscar/base.html

@@ -11,7 +11,8 @@
     
     <link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}" type="text/css" />
     <link rel="stylesheet" href="{{ url_for('static', filename='css/oscar.min.css') }}" type="text/css" />  
-    
+    <link rel="stylesheet" href="{{ url_for('static', filename='css/leaflet.min.css') }}" type="text/css" />
+
     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
     <!--[if lt IE 9]>
       <script src="{{ url_for('static', filename='js/html5shiv.min.js') }}"></script>
@@ -71,6 +72,7 @@
     <script src="{{ url_for('static', filename='js/jquery-1.11.1.min.js') }}"></script>
     <script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
     {% if autocomplete %}<script src="{{ url_for('static', filename='js/typeahead.bundle.min.js') }}"></script>{% endif %}
+    <script src="{{ url_for('static', filename='js/require-2.1.15.min.js') }}"></script>
     <script src="{{ url_for('static', filename='js/scripts.js') }}"></script>
 </body>
 </html>

+ 7 - 2
searx/templates/oscar/result_templates/default.html

@@ -1,8 +1,13 @@
-<h3>{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+{% from 'oscar/macros.html' import icon %}
+
+<h4 class="result_header">{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 
 {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.publishedDate }}" pubdate>{{ result.publishedDate }}</time>{% endif %}
+<small><a class="text-info" href="https://web.archive.org/web/{{ result.pretty_url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
+
+{% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %}
 
-{% if result.content %}<p>{{ result.content|safe }}</p>{% endif %}
+<div class="clearfix"></div>
 
 <span class="label label-default pull-right">{{ result.engine }}</span>
 <p class="text-muted">{{ result.pretty_url }}</p>

+ 2 - 1
searx/templates/oscar/result_templates/images.html

@@ -11,9 +11,10 @@
             </div>
             <div class="modal-body">
                 <img class="img-responsive center-block" src="{{ result.img_src }}" alt="{{ result.title }}">
-                {% if result.content %}<p>{{ result.content|safe }}</p>{% endif %}
+                {% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %}
             </div>
             <div class="modal-footer">
+                <div class="clearfix"></div>
                 <span class="label label-default pull-right">{{ result.engine }}</span>
                 <p class="text-muted pull-left">{{ result.pretty_url }}</p>
                 <div class="clearfix"></div>

+ 74 - 0
searx/templates/oscar/result_templates/map.html

@@ -0,0 +1,74 @@
+{% from 'oscar/macros.html' import icon %}
+
+<h4 class="result_header">{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
+
+{% if result.publishedDate %}<time class="text-muted" datetime="{{ result.publishedDate }}" pubdate>{{ result.publishedDate }}</time>{% endif %}
+
+<small><a class="text-info" href="https://web.archive.org/web/{{ result.pretty_url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
+
+{% if (result.latitude and result.longitude) or result.boundingbox %}
+    <small> &bull; <a class="text-info btn-collapse collapsed searx_init_map cursor-pointer" data-toggle="collapse" data-target="#result-map-{{ index }}" data-leaflet-target="osm-map-{{ index }}" data-map-lon="{{ result.longitude }}" data-map-lat="{{ result.latitude }}" {% if result.boundingbox %}data-map-boundingbox='{{ result.boundingbox|tojson|safe }}'{% endif %} {% if result.geojson %}data-map-geojson='{{ result.geojson|tojson|safe }}'{% endif %} data-btn-text-collapsed="{{ _('show map') }}" data-btn-text-not-collapsed="{{ _('hide map') }}">{{ icon('globe') }} {{ _('show map') }}</a></small>
+{% endif %}
+
+{% if result.osm and (result.osm.type and result.osm.id) %}
+    <small> &bull; <a class="text-info btn-collapse collapsed cursor-pointer searx_overpass_request" data-toggle="collapse" data-target="#result-overpass-{{ index }}" data-osm-type="{{ result.osm.type }}" data-osm-id="{{ result.osm.id }}" data-result-table="result-overpass-table-{{ index }}" data-result-table-loadicon="result-overpass-table-loading-{{ index }}" data-btn-text-collapsed="{{ _('show details') }}" data-btn-text-not-collapsed="{{ _('hide details') }}">{{ icon('map-marker') }} {{ _('show details') }}</a></small>
+{% endif %}
+
+{# {% if (result.latitude and result.longitude) %}
+    <small> &bull; <a class="text-info btn-collapse collapsed cursor-pointer" data-toggle="collapse" data-target="#result-geodata-{{ index }}" data-btn-text-collapsed="{{ _('show geodata') }}" data-btn-text-not-collapsed="{{ _('hide geodata') }}">{{ icon('map-marker') }} {{ _('show geodata') }}</a></small>
+{% endif %} #}
+
+<div class="container-fluid">
+
+{% if result.address %}
+<p class="row result-content result-adress col-xs-12 col-sm-5 col-md-4" itemscope itemtype="http://schema.org/PostalAddress">
+    {% if result.address.name %}
+        <strong itemprop="name">{{ result.address.name }}</strong><br/>
+    {% endif %}
+    {% if result.address.road %}
+        <span itemprop="streetAddress">
+            {% if result.address.house_number %}{{ result.address.house_number }}, {% endif %}
+            {{ result.address.road }}
+        </span><br/>
+    {% endif %}
+    {% if result.address.locality %}
+        <span itemprop="addressLocality">{{ result.address.locality }}</span>
+        {% if result.address.postcode %}, <span itemprop="postalCode">{{ result.address.postcode }}</span>{% endif %}
+        <br/>
+    {% endif %}
+    {% if result.address.country %}
+        <span itemprop="addressCountry">{{ result.address.country }}</span>
+    {% endif %}
+</p>
+{% endif %}
+
+{% if result.osm and (result.osm.type and result.osm.id) %}
+    <div class="row result-content collapse col-xs-12 col-sm-7 col-md-8" id="result-overpass-{{ index }}">
+        <div class="text-center" id="result-overpass-table-loading-{{ index }}"><img src="{{ url_for('static', filename='img/loader.gif') }}" alt="Loading ..."/></div>
+        <table class="table table-striped table-condensed hidden" id="result-overpass-table-{{ index }}">
+            <tr><th>key</th><th>value</th></tr>
+        </table>
+    </div>
+{% endif %}
+
+{# {% if (result.latitude and result.longitude) %}
+    <div class="row collapse col-xs-12 col-sm-5 col-md-4" id="result-geodata-{{ index }}">
+        <strong>Longitude:</strong> {{ result.longitude }} <br/>
+        <strong>Latitude:</strong> {{ result.latitude }}
+    </div>
+{% endif %} #}
+
+{% if result.content %}<p class="row result-content col-xs-12 col-sm-12 col-md-12">{{ result.content|safe }}</p>{% endif %}
+
+</div>
+    
+{% if (result.latitude and result.longitude) or result.boundingbox %}
+    <div class="collapse" id="result-map-{{ index }}">
+        <div style="height:300px; width:100%; margin: 10px 0;" id="osm-map-{{ index }}"></div>
+    </div>
+{% endif %}
+
+<div class="clearfix"></div>
+
+<span class="label label-default pull-right">{{ result.engine }}</span>
+<p class="text-muted">{{ result.pretty_url }}</p>

+ 7 - 4
searx/templates/oscar/result_templates/torrent.html

@@ -1,14 +1,17 @@
 {% from 'oscar/macros.html' import icon %}
 
-<h3>{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+<h4 class="result_header">{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 
 {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.publishedDate }}" pubdate>{{ result.publishedDate }}</time>{% endif %}
+<small><a class="text-info" href="https://web.archive.org/web/{{ result.pretty_url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 
-<p>{{ icon('transfer') }} {{ _('Seeder') }} <span class="badge">{{ result.seed }}</span>, {{ _('Leecher') }} <span class="badge">{{ result.leech }}</span></p>
+<p class="result-content">{{ icon('transfer') }} {{ _('Seeder') }} <span class="badge">{{ result.seed }}</span>, {{ _('Leecher') }} <span class="badge">{{ result.leech }}</span>
+<br/>
+<a href="{{ result.magnetlink }}" class="magnetlink">{{ icon('magnet') }} magnet link</a></p>
 
-<p><a href="{{ result.magnetlink }}" class="magnetlink">{{ icon('magnet') }} magnet link</a></p>
+{% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %}
 
-{% if result.content %}<p>{{ result.content|safe }}</p>{% endif %}
+<div class="clearfix"></div>
 
 <span class="label label-default pull-right">{{ result.engine }}</span>
 <p class="text-muted">{{ result.pretty_url }}</p>

+ 9 - 4
searx/templates/oscar/result_templates/videos.html

@@ -1,13 +1,18 @@
-<h3>{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+{% from 'oscar/macros.html' import icon %}
+
+<h4 class="result_header">{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
     
 {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.publishedDate }}" pubdate>{{ result.publishedDate }}</time>{% endif %}
-    
+<small><a class="text-info" href="https://web.archive.org/web/{{ result.pretty_url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
+
 <div class="container-fluid">
     <div class="row">
-        <img class="thumbnail col-xs-6 col-sm-4 col-md-4" src="{{ result.thumbnail|safe }}" />
-        {% if result.content %}<p class="col-xs-12 col-sm-8 col-md-8">{{ result.content|safe }}</p>{% endif %}
+        <img class="thumbnail col-xs-6 col-sm-4 col-md-4 result-content" src="{{ result.thumbnail|safe }}" />
+        {% if result.content %}<p class="col-xs-12 col-sm-8 col-md-8 result-content">{{ result.content|safe }}</p>{% endif %}
     </div>
 </div>
 
+<div class="clearfix"></div>
+
 <span class="label label-default pull-right">{{ result.engine }}</span>
 <p class="text-muted">{{ result.pretty_url }}</p>

BIN
searx/translations/de/LC_MESSAGES/messages.mo


+ 59 - 32
searx/translations/de/LC_MESSAGES/messages.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-03-15 18:40+0000\n"
 "Last-Translator: pointhi\n"
 "Language-Team: German "
@@ -216,13 +216,13 @@ msgstr "Suchmaschinenstatistik"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
-msgstr ""
+msgstr "eine privatsphären respektierende, hackbare Metasuchmaschine"
 
 #: searx/templates/oscar/navbar.html:6
 msgid "Toggle navigation"
@@ -230,7 +230,7 @@ msgstr ""
 
 #: searx/templates/oscar/navbar.html:15
 msgid "home"
-msgstr ""
+msgstr "Startseite"
 
 #: searx/templates/oscar/preferences.html:11
 msgid "General"
@@ -238,19 +238,19 @@ msgstr "Allgemein"
 
 #: searx/templates/oscar/preferences.html:12
 msgid "Engines"
-msgstr ""
+msgstr "Suchmaschinen"
 
 #: searx/templates/oscar/preferences.html:36
 msgid "What language do you prefer for search?"
-msgstr ""
+msgstr "Welche Sprache bevorzugst du für die Suche?"
 
 #: searx/templates/oscar/preferences.html:47
 msgid "Change the language of the layout"
-msgstr ""
+msgstr "Ändere die Sprache des Layouts"
 
 #: searx/templates/oscar/preferences.html:60
 msgid "Find stuff as you type"
-msgstr ""
+msgstr "finde Sachen während der Eingabe"
 
 #: searx/templates/oscar/preferences.html:70
 msgid ""
@@ -258,14 +258,17 @@ msgid ""
 "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
 " rel=\"external\">learn more about request methods</a>"
 msgstr ""
+"ändere wie Formulare übertragen werden, <a "
+"href=\"https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP-Anfragemethoden\""
+" rel=\"external\">lerne mehr über Anfragemethoden</a>"
 
 #: searx/templates/oscar/preferences.html:81
 msgid "Change searx layout"
-msgstr ""
+msgstr "ändere das Aussehen von searx"
 
 #: searx/templates/oscar/results.html:6
 msgid "Search results"
-msgstr ""
+msgstr "Suchergebnisse"
 
 #: searx/templates/oscar/results.html:73
 msgid "Links"
@@ -273,31 +276,31 @@ msgstr ""
 
 #: searx/templates/oscar/search.html:6 searx/templates/oscar/search_full.html:7
 msgid "Start search"
-msgstr ""
+msgstr "Suche starten"
 
 #: searx/templates/oscar/search_full.html:11
 msgid "Show search filters"
-msgstr ""
+msgstr "Suchfilter anzeigen"
 
 #: searx/templates/oscar/search_full.html:11
 msgid "Hide search filters"
-msgstr ""
+msgstr "Suchfilter verstecke"
 
 #: searx/templates/oscar/stats.html:2
 msgid "stats"
-msgstr ""
+msgstr "Statistiken"
 
 #: searx/templates/oscar/messages/first_time.html:4
 #: searx/templates/oscar/messages/no_results.html:5
 #: searx/templates/oscar/messages/save_settings_successfull.html:5
 #: searx/templates/oscar/messages/unknow_error.html:5
 msgid "Close"
-msgstr ""
+msgstr "Schließen"
 
 #: searx/templates/oscar/messages/first_time.html:6
 #: searx/templates/oscar/messages/no_data_available.html:3
 msgid "Heads up!"
-msgstr ""
+msgstr "Information!"
 
 #: searx/templates/oscar/messages/first_time.html:7
 msgid "It look like you are using searx first time."
@@ -305,55 +308,79 @@ msgstr ""
 
 #: searx/templates/oscar/messages/js_disabled.html:2
 msgid "Warning!"
-msgstr ""
+msgstr "Warnung!"
 
 #: searx/templates/oscar/messages/js_disabled.html:3
 msgid "Please enable JavaScript to use full functionality of this site."
-msgstr ""
+msgstr "Bitte aktiviere JavaScript um alle möglichkeiten dieser Seite zu nutzen."
 
 #: searx/templates/oscar/messages/no_data_available.html:4
 msgid "There is currently no data available. "
-msgstr ""
+msgstr "Es sind derzeit keine Daten vorhanden."
 
 #: searx/templates/oscar/messages/no_results.html:7
 msgid "Sorry!"
-msgstr ""
+msgstr "Entschuldigung!"
 
 #: searx/templates/oscar/messages/no_results.html:8
 msgid ""
 "we didn't find any results. Please use another query or search in more "
 "categories."
-msgstr ""
+msgstr "Es konnten keine Suchergebnisse gefunden werden. Bitte nutze einen "
+"anderen Suchbegriff oder Suche das gewünschte in einer anderen Kategorie."
 
 #: searx/templates/oscar/messages/save_settings_successfull.html:7
 msgid "Well done!"
-msgstr ""
+msgstr "Gut gemacht!"
 
 #: searx/templates/oscar/messages/save_settings_successfull.html:8
 msgid "Settings saved successfully."
-msgstr ""
+msgstr "Einstellungen wurden erfolgreich gespeichert."
 
 #: searx/templates/oscar/messages/unknow_error.html:7
 msgid "Oh snap!"
-msgstr ""
+msgstr "Verdammt!"
 
 #: searx/templates/oscar/messages/unknow_error.html:8
 msgid "Something went wrong."
-msgstr ""
+msgstr "Irgendetwas ist falsch gelaufen."
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
-msgstr ""
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
+msgstr "cached"
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr "Bild ansehen"
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
-msgstr ""
+msgstr "Seite besuchen"
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr "Karte anzeigen"
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr "Karte verstecken"
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr "Details anzeigen"
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr "Details verstecke"
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/en/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/en/LC_MESSAGES/messages.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-01-30 15:22+0100\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: en <LL@li.org>\n"
@@ -208,11 +208,11 @@ msgstr ""
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -333,19 +333,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/es/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/es/LC_MESSAGES/messages.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-09-08 11:01+0000\n"
 "Last-Translator: Alejandro León Aznar\n"
 "Language-Team: Spanish "
@@ -214,11 +214,11 @@ msgstr "Estadísticas del motor de búsqueda"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -339,19 +339,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/fr/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/fr/LC_MESSAGES/messages.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-09-07 21:24+0000\n"
 "Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
 "Language-Team: French "
@@ -216,11 +216,11 @@ msgstr "Statistiques du moteur"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -341,19 +341,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/hu/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/hu/LC_MESSAGES/messages.po

@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-09-07 21:30+0000\n"
 "Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
 "Language-Team: Hungarian "
@@ -213,11 +213,11 @@ msgstr "Kereső statisztikák"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -338,19 +338,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/it/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/it/LC_MESSAGES/messages.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-09-08 08:19+0000\n"
 "Last-Translator: dp <d.pitrolo@gmx.com>\n"
 "Language-Team: Italian "
@@ -214,11 +214,11 @@ msgstr "Statistiche dei motori"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -339,19 +339,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/ja/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/ja/LC_MESSAGES/messages.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-10-05 16:38+0200\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: ja <LL@li.org>\n"
@@ -208,11 +208,11 @@ msgstr ""
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -333,19 +333,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

BIN
searx/translations/nl/LC_MESSAGES/messages.mo


+ 30 - 7
searx/translations/nl/LC_MESSAGES/messages.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  searx\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-11-01 21:11+0100\n"
+"POT-Creation-Date: 2014-11-19 15:14+0100\n"
 "PO-Revision-Date: 2014-09-09 15:33+0000\n"
 "Last-Translator: André Koot <meneer@tken.net>\n"
 "Language-Team: Dutch "
@@ -214,11 +214,11 @@ msgstr "Zoekmachinestatistieken"
 msgid "Answers"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "Powered by"
 msgstr ""
 
-#: searx/templates/oscar/base.html:61
+#: searx/templates/oscar/base.html:62
 msgid "a privacy-respecting, hackable metasearch engine"
 msgstr ""
 
@@ -339,19 +339,42 @@ msgstr ""
 msgid "Something went wrong."
 msgstr ""
 
-#: searx/templates/oscar/result_templates/images.html:20
-msgid "Get image"
+#: searx/templates/oscar/result_templates/default.html:6
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/oscar/result_templates/videos.html:6
+msgid "cached"
 msgstr ""
 
 #: searx/templates/oscar/result_templates/images.html:21
+msgid "Get image"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/images.html:22
 msgid "View source"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "show map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:10
+msgid "hide map"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "show details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/map.html:14
+msgid "hide details"
+msgstr ""
+
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Seeder"
 msgstr ""
 
-#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/oscar/result_templates/torrent.html:8
 msgid "Leecher"
 msgstr ""
 

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