]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - src/handlebar_helpers.js
API return absolute URLs on /search, relative on /details. Now handle both
[nominatim-ui.git] / src / handlebar_helpers.js
index 722d4bb6b904af3264bcebfa37c1b04f96df4e93..20ecb7c132711815b073e94bc3e46ce36213adfe 100644 (file)
@@ -17,14 +17,14 @@ Handlebars.registerHelper({
         return ((aAddressLine.isaddress && aAddressLine.isaddress == 'f') ? 'notused' : '');
     },
     // { osm_type: 'R', osm_id: 12345 }
-    // <a href="//www.openstreetmap.org/relation/12345">relation 12345</a
+    // <a href="https://www.openstreetmap.org/relation/12345">relation 12345</a
     osmLink: function(aPlace) {
         if (!aPlace.osm_type) return '';
         var sOSMType = formatOSMType(aPlace.osm_type, false);
         if (!sOSMType) return '';
 
         return new Handlebars.SafeString(
-            '<a href="//www.openstreetmap.org/' + sOSMType + '/' + aPlace.osm_id + '">' + sOSMType + ' ' + aPlace.osm_id + '</a>'
+            '<a href="https://www.openstreetmap.org/' + sOSMType + '/' + aPlace.osm_id + '">' + sOSMType + ' ' + aPlace.osm_id + '</a>'
         );
     },
     /* en:London_Borough_of_Redbridge => https://en.wikipedia.org/wiki/London_Borough_of_Redbridge */
@@ -42,16 +42,27 @@ Handlebars.registerHelper({
         );
     },
     // { osm_type: 'R', osm_id: 12345 }
-    // <a href="//www.openstreetmap.org/relation/12345">relation 12345</a
+    // <a href="details.html?place_id=12345">details</a>
     detailsLink: function(aFeature, sTitle) {
         if (!aFeature) return '';
         if (!aFeature.place_id) return '';
 
-        sTitle = 'details >';
-        var sTitle = Handlebars.escapeExpression(sTitle);
+        sTitle = Handlebars.escapeExpression(sTitle || 'details >');
 
         return new Handlebars.SafeString(
-            '<a href="details.html?place_id=' + aFeature.place_id + '">' + (sTitle ? sTitle : aFeature.place_id ) + '</a>'
+            '<a href="details.html?place_id=' + aFeature.place_id + '">' + sTitle + '</a>'
+        );
+    },
+    detailsPermaLink: function(aFeature, sTitle) {
+        if (!aFeature) return '';
+
+        var sOSMType = formatOSMType(aFeature.osm_type, false);
+        if (!sOSMType) return '';
+
+        sTitle = Handlebars.escapeExpression(sTitle || sOSMType + ' ' + aFeature.osm_id);
+
+        return new Handlebars.SafeString(
+            '<a href="details.html?osmtype=' + aFeature.osm_type + '&osmid=' + aFeature.osm_id + '&class=' + aFeature.category + '">' + sTitle + '</a>'
         );
     },
     coverageType: function(aPlace) {
@@ -80,7 +91,8 @@ Handlebars.registerHelper({
     formatMapIcon: function(sIcon) {
         if (!sIcon) return;
         
-        var url = sIcon.match(/png$/) ? Nominatim_Config.Images_Base_Url + '/' + sIcon : Nominatim_Config.Images_Base_Url + 'nominatim/images/mapicons/' + sIcon + '.n.32.png';
+        var url = sIcon;
+        if (!url.match(/^http/)) url = get_config_value('Images_Base_Url') + url;
 
         return new Handlebars.SafeString(
             '<img class="mapicon" src="' + url + '" alt="' + sIcon + '"/>'
@@ -100,11 +112,52 @@ Handlebars.registerHelper({
             return capitalize(aPlace.type.replace(/_/g, ' '));
         }
     },
-    tooManyParentLinesWarning: function(aPlace) {
-        if (!aPlace.parentof) return;
+    formatSearchRank: function(iRank) {
+        // same as
+        // https://github.com/openstreetmap/Nominatim/blob/master/sql/functions.sql
+        // get_searchrank_label()
+
+        if (iRank < 2) {
+            return 'continent';
+        } else if (iRank < 4) {
+            return 'sea';
+        } else if (iRank < 8) {
+            return 'country';
+        } else if (iRank < 12) {
+            return 'state';
+        } else if (iRank < 16) { 
+            return 'county';
+        } else if (iRank == 16) {
+            return 'city';
+        } else if (iRank == 17) {
+            return 'town / island';
+        } else if (iRank == 18) {
+            return 'village / hamlet';
+        } else if (iRank == 20) {
+            return 'suburb';
+        } else if (iRank == 21) {
+            return 'postcode area';
+        } else if (iRank == 22) {
+            return 'croft / farm / locality / islet';
+        } else if (iRank == 23) {
+            return 'postcode area';
+        } else if (iRank == 25) {
+            return 'postcode point';
+        } else if (iRank == 26) {
+            return 'street / major landmark';
+        } else if (iRank == 27) {
+            return 'minory street / path';
+        } else if (iRank == 28) {
+            return 'house / building';
+        } else {
+            return 'other: ' + iRank;
+        }
+    },
+    tooManyHierarchyLinesWarning: function(aPlace) {
+        if (!aPlace.hierarchy) return;
 
         var c = 0;
-        for (var type in aPlace.parentof) {
+        for (var type in aPlace.hierarchy) {
             c = c + type.length+1;
         }
         if (c < 500) return;