changeset 1920:c058c135c33d

Factorize result JSON parsing and validation into a separate function.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 07 Nov 2017 19:37:54 +0200
parents 9193e7a8c9ca
children 2761364c9044
files www/search.js
diffstat 1 files changed, 28 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/www/search.js	Tue Nov 07 19:35:48 2017 +0200
+++ b/www/search.js	Tue Nov 07 19:37:54 2017 +0200
@@ -46,6 +46,24 @@
 }
 
 
+function mapValidateJSON(edata, elen)
+{
+  var results = JSON.parse(edata);
+  if (results && Array.isArray(results))
+  {
+    for (var i = 0; i < results.length; i++)
+    {
+      var res = results[i];
+      if (!Array.isArray(res) || res.length != elen)
+        return "Invalid data.";
+    }
+    return results;
+  }
+  else
+    return "Could not parse result dataset."
+}
+
+
 function mapDoMapSearch()
 {
   // Check the search pattern for some sanity before
@@ -109,19 +127,14 @@
     else
     if (evt.data.substr(0, 7) == "RESULT:" && evt.data.length >= 9)
     {
-      var results = JSON.parse(evt.data.substr(7));
+      var results = mapValidateJSON(evt.data.substr(7), 7);
       var str = "";
 
-      if (results && Array.isArray(results))
+      if (Array.isArray(results))
       {
         for (var i = 0; i < results.length; i++)
         {
           var res = results[i];
-          if (!Array.isArray(res) || res.length != 7)
-          {
-            str = "ERROR: Invalid data.";
-            break;
-          }
 
           str += "<div class=\"result\">"+
             "<a target=\"_blank\" href=\"http://jeskko.pupunen.net/gmap2/?x="+
@@ -137,7 +150,7 @@
           str = "No matches found.";
       }
       else
-        str = "ERROR: Could not parse result dataset."
+        str = "ERROR: "+ results;
 
       fieldRes.innerHTML = str;
     }
@@ -181,31 +194,26 @@
     else
     if (evt.data.substr(0, 5) == "MAPS:" && evt.data.length > 8)
     {
-      var results = JSON.parse(evt.data.substr(5));
-      if (results && Array.isArray(results))
+      var results = mapValidateJSON(evt.data.substr(5), 3);
+      if (Array.isArray(results))
       {
         mapList = results;
         var str = "";
         for (var i = 0; i < results.length; i++)
         {
           var res = results[i];
-          if (!Array.isArray(res) || res.length != 3)
-          {
-            str = "ERROR: Invalid data.";
-            break;
-          }
-
           var id = "map_"+ res[0];
           str +=
             "<input class=\"map\" id=\""+ id +
             "\" type=\"checkbox\" checked=\"checked\">"+
             "<label for=\""+ id +"\">"+ mapCapitalize(res[0]) +"</label>";
         }
+
         var elem = document.getElementById("mapList");
         elem.innerHTML = str;
       }
       else
-        fieldRes.innerHTML = "ERROR!";
+        fieldRes.innerHTML = "ERROR: "+ results;
     }
 
     tmpWS.close();
@@ -271,19 +279,14 @@
     else
     if (evt.data.substr(0, 7) == "RESULT:" && evt.data.length >= 9)
     {
-      var results = JSON.parse(evt.data.substr(7));
+      var results = mapValidateJSON(evt.data.substr(7), 7);
       var str = "";
 
-      if (results && Array.isArray(results))
+      if (Array.isArray(results))
       {
         for (var i = 0; i < results.length; i++)
         {
           var res = results[i];
-          if (!Array.isArray(res) || res.length != 7)
-          {
-            str = "ERROR: Invalid data.";
-            break;
-          }
 
           str += "<div class=\"result\">"+
             "<a target=\"_blank\" href=\""+ res[0] +".html#loc"+ res[1] +"_"+ res[2] +"\">"+
@@ -302,7 +305,7 @@
           str = "No matches found.";
       }
       else
-        str = "ERROR: Could not parse result dataset."
+        str = "ERROR: "+ results;
 
       fieldRes.innerHTML = str;
     }