liquidmetal

:sweat_drops::metal: A mimetic poly-alloy of the Quicksilver scoring algorithm, essentially LiquidMetal.

Github stars Tracking Chart

LiquidMetal

A mimetic poly-alloy of the Quicksilver
scoring algorithm, essentially LiquidMetal. </Schwarzenegger Voice>

Flex matching short abbreviations against longer strings is a boon in
productivity for typists. Applications like
Quicksilver, Alfred,
LaunchBar, and
Launchy have made this method of keyboard entry a
popular one. It's time to bring this same functionality to web controls.
LiquidMetal makes scoring long strings against abbreviations easy.

Usage

Include the library:

<script src="liquidmetal.js" type="text/javascript"></script>

Score any string against an abbreviation:

LiquidMetal.score("FooBar",  "foo")   //=> 0.950
LiquidMetal.score("FooBar",  "fb")    //=> 0.917
LiquidMetal.score("Foo Bar", "fb")    //=> 0.929
LiquidMetal.score("Foo Bar", "baz")   //=> 0.0
LiquidMetal.score("Foo Bar", "")      //=> 0.8

All scores fall between a range of 0.0 (no match) to 1.0 (perfect match).

Inspired By

Why?

  • To satisfy my own requirements for the
    jquery.flexselect plugin
  • The Quicksilver algorithm doesn't give proper weight to abbreviations that
    match the first character of the scored string.
  • The Quicksilver algorithm is extremely slow for certain length
    string/abbreviation combinations because of its use of recursion. While
    slightly slower for shorter length string/abbreviation combinations,
    LiquidMetal outperforms the Quicksilver algorithm by orders of magnitude under
    other conditions.
  • The javascript version of the Quicksilver algorithm (Quicksilver.js) is case
    sensitive and doesn't give added weight to camel case strings; whereas,
    LiquidMetal is case insensitive and does give added weight to uppercase
    letters in camel case strings.

Todo

  • More tests
  • Consider tweaking the scores for "trailing" characters
  • Improve implementation of highest score matching (LiquidMetal
    currently returns the highest scoring match for an abbreviation,
    but is inefficient)
  • See if it's possible to tune the performance further

Author

Ryan McGeary (@rmm5t)

License

MIT License

Main metrics

Overview
Name With Ownerrmm5t/liquidmetal
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 2)
Platform
License:MIT License
所有者活动
Created At2009-02-06 00:16:49
Pushed At2020-06-17 02:10:02
Last Commit At2020-06-16 20:09:49
Release Count7
Last Release Namev1.3.0 (Posted on )
First Release Namev0.1 (Posted on )
用户参与
Stargazers Count295
Watchers Count8
Fork Count24
Commits Count56
Has Issues Enabled
Issues Count6
Issue Open Count1
Pull Requests Count4
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private