Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

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

branch: master
README.markdown

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.

If you like this project, please help by donating.

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)

Other

MIT License

Copyright (c) 2009-2013, Ryan McGeary (ryan -[at]- mcgeary [dot] org)

Something went wrong with that request. Please try again.