From e63434f437f0017c08b1493e7e8d27a4cdc594ae Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 30 Jan 2013 17:41:06 -0500 Subject: [PATCH] Rename, titles, edit distance --- index.html | 2 +- js/id/{presets.js => presetdata.js} | 6 ++++++ js/id/util.js | 20 ++++++++++++++++++++ presets/presets.json | 2 ++ 4 files changed, 29 insertions(+), 1 deletion(-) rename js/id/{presets.js => presetdata.js} (69%) diff --git a/index.html b/index.html index 5caa49254..438b54e90 100644 --- a/index.html +++ b/index.html @@ -31,7 +31,7 @@ - + diff --git a/js/id/presets.js b/js/id/presetdata.js similarity index 69% rename from js/id/presets.js rename to js/id/presetdata.js index 694f7cae4..df07e732b 100644 --- a/js/id/presets.js +++ b/js/id/presetdata.js @@ -8,6 +8,12 @@ iD.presetData = function() { return presets; }; + presets.search = function(str) { + var edits = _.sortBydata.map(function(d) { + return iD.util.editDistance(d.title, str); + }); + }; + presets.match = function(entity) { return data.filter(function(d) { return _.contains(d.match.type, entity.type); diff --git a/js/id/util.js b/js/id/util.js index da31a162b..fac92fba0 100644 --- a/js/id/util.js +++ b/js/id/util.js @@ -74,3 +74,23 @@ iD.util.getStyle = function(selector) { } } }; + +iD.util.editDistance = function(a, b) { + if (a.length === 0) return b.length; + if (b.length === 0) return a.length; + var matrix = []; + for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; } + for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i-1) == a.charAt(j-1)) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution + Math.min(matrix[i][j-1] + 1, // insertion + matrix[i-1][j] + 1)); // deletion + } + } + } + return matrix[b.length][a.length]; +}; diff --git a/presets/presets.json b/presets/presets.json index af7efaaa5..a4f25bd42 100644 --- a/presets/presets.json +++ b/presets/presets.json @@ -1,5 +1,6 @@ [ { + "title": "Highway", "name": "highway", "match": { "type": ["line"], @@ -17,6 +18,7 @@ ] }, { + "title": "Cafe", "name": "cafe", "match": { "type": ["node", "area"],