From feed3d291848581628c8d72a2638a71842494d43 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Fri, 12 Nov 2021 18:40:59 -0700 Subject: [PATCH] Ignore extra words in phrase (close #4) --- FixPhrase.lib.php | 54 +++++++++++++++++++++++++++++------------------ index.html | 14 ++++++------ js/fixphrase.js | 12 ++++++++--- 3 files changed, 50 insertions(+), 30 deletions(-) diff --git a/FixPhrase.lib.php b/FixPhrase.lib.php index f208c7d..6fc0d2e 100644 --- a/FixPhrase.lib.php +++ b/FixPhrase.lib.php @@ -1,28 +1,30 @@ 4) { - throw new Exception("Too many words!"); + //throw new Exception("Too many words!"); } // Convert words back into indices and do the math to make them coordinate chunks foreach ($words as $word) { $index = array_search($word, self::WORDLIST); if ($index === false) { - throw new Exception("Unrecognized word found!"); + //throw new Exception("Unrecognized word found!"); } if ($index >= 0 && $index < 2000) { $indexes[0] = $index; + $canonicalphrase[0] = self::WORDLIST[$index]; } else if ($index >= 2000 && $index < 5610) { $indexes[1] = $index - 2000; + $canonicalphrase[1] = self::WORDLIST[$index]; } else if ($index >= 5610 && $index < 6610) { $indexes[2] = $index - 5610; + $canonicalphrase[2] = self::WORDLIST[$index]; } else if ($index >= 6610 && $index < 7610) { $indexes[3] = $index - 6610; + $canonicalphrase[3] = self::WORDLIST[$index]; } } @@ -7748,7 +7762,7 @@ class FixPhrase { break; } - return [round($latitude, 4), round($longitude, 4), $accuracy]; + return [round($latitude, 4), round($longitude, 4), $accuracy, trim(implode(" ", $canonicalphrase))]; } } diff --git a/index.html b/index.html index 04fad7f..a1aa838 100644 --- a/index.html +++ b/index.html @@ -221,12 +221,6 @@ } }); - // Check for coordinates in hash - parseWindowHash(); - window.addEventListener('hashchange', function () { - parseWindowHash(); - }, false); - $("body").on("click", ".copyonclick", function () { var copyitem = $(this); var copytext = copyitem.text(); @@ -258,6 +252,12 @@ date.setTime(date.getTime() + (90 * 24 * 60 * 60 * 1000)); document.cookie = "mapstyle=" + $(this).data("style") + "; expires=" + date.toUTCString(); }); + + // Check for coordinates in hash + parseWindowHash(); + window.addEventListener('hashchange', function () { + parseWindowHash(); + }, false); }; function dolookup(words) { @@ -266,7 +266,7 @@ var coords = FixPhrase.decode(words); location.hash = "#map"; - showLocationPopup(coords[0], coords[1], words, coords[2]); + showLocationPopup(coords[0], coords[1], coords[3], coords[2]); var zoomlevel = 18; switch (coords[2]) { diff --git a/js/fixphrase.js b/js/fixphrase.js index c530729..0ed9dc8 100644 --- a/js/fixphrase.js +++ b/js/fixphrase.js @@ -63,27 +63,33 @@ var FixPhrase = { var indexes = [-1, -1, -1, -1]; words = words.toLowerCase(); words = words.split(" "); + // Gather the real phrase in correct order, with any extra words removed, to return for display + var canonicalphrase = ["", "", "", ""]; if (words.length < 2) { throw "Not enough words!"; } else if (words.length > 4) { - throw "Too many words!"; + console.error("Warning: Too many words!"); } // Convert words back into indices and do the math to make them coordinate chunks for (var i = 0; i < words.length; i++) { var index = this.wordlist.indexOf(words[i]); if (index == -1) { - throw "Unrecognized word found: " + words[i]; + console.error("Warning: Unrecognized word found: " + words[i] + ", ignoring."); } if (index >= 0 && index < 2000) { indexes[0] = index; + canonicalphrase[0] = this.wordlist[index]; } else if (index >= 2000 && index < 5610) { indexes[1] = index - 2000; + canonicalphrase[1] = this.wordlist[index]; } else if (index >= 5610 && index < 6610) { indexes[2] = index - 5610; + canonicalphrase[2] = this.wordlist[index]; } else if (index >= 6610 && index < 7610) { indexes[3] = index - 6610; + canonicalphrase[3] = this.wordlist[index]; } } @@ -128,7 +134,7 @@ var FixPhrase = { break; } - return [latitude, longitude, accuracy]; + return [latitude, longitude, accuracy, canonicalphrase.join(" ").trim()]; }, wordlist: [ "abacus",