firstSong name now uses fuzzy instead of exact match

master
William Toohey 9 years ago
parent bdeacc3531
commit 3265fb9956
  1. 10
      src/js/HuesCore.js
  2. 3
      src/js/string_score.min.js

@ -453,12 +453,16 @@ class HuesCore {
setSongByName(name) {
let songs = this.resourceManager.enabledSongs;
let bestSong = 0;
let bestScore = 0;
for(let i = 0; i < songs.length; i++) {
if(songs[i].title == name) {
return this.setSong(i);
let score = songs[i].title.score(name);
if(score > bestScore) {
bestScore = score;
bestSong = i;
}
}
return this.setSong(0); // fallback
return this.setSong(bestSong);
}
/* To set songs via reference instead of index - used in HuesEditor */

@ -0,0 +1,3 @@
// String Scoring Algorithm 0.1.22 | (c) 2009-2015 Joshaven Potter <yourtech@gmail.com>
// MIT License: http://opensource.org/licenses/MIT | https://github.com/joshaven/string_score
String.prototype.score=function(e,f){if(this===e)return 1;if(""===e)return 0;var d=0,a,g=this.toLowerCase(),n=this.length,h=e.toLowerCase(),k=e.length,b;a=0;var l=1,m,c;f&&(m=1-f);if(f)for(c=0;c<k;c+=1)b=g.indexOf(h[c],a),-1===b?l+=m:(a===b?a=.7:(a=.1," "===this[b-1]&&(a+=.8)),this[b]===e[c]&&(a+=.1),d+=a,a=b+1);else for(c=0;c<k;c+=1){b=g.indexOf(h[c],a);if(-1===b)return 0;a===b?a=.7:(a=.1," "===this[b-1]&&(a+=.8));this[b]===e[c]&&(a+=.1);d+=a;a=b+1}d=.5*(d/n+d/k)/l;h[0]===g[0]&&.85>d&&(d+=.15);return d};
Loading…
Cancel
Save