• Stars
    star
    291
  • Rank 142,563 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 16 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ’ฆ๐Ÿค˜ A mimetic poly-alloy of the Quicksilver scoring algorithm, essentially LiquidMetal. </Schwarzenegger Voice>

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

More Repositories

1

jquery-timeago

๐Ÿ•— The original jQuery plugin that makes it easy to support automatically updating fuzzy timestamps (e.g. "4 minutes ago").
JavaScript
3,821
star
2

strip_attributes

๐Ÿ”ช An ActiveModel extension that automatically strips all attributes of leading and trailing whitespace before validation. If the attribute is blank, it strips the value to nil.
Ruby
543
star
3

dotfiles

โ—๐Ÿ“„ Ryan McGeary's configuration shiznit that makes him productive
Emacs Lisp
283
star
4

jquery-flexselect

๐Ÿ’ชโ˜‘๏ธ A jQuery plugin that turns regular select boxes into Quicksilver-like, flex-matching, incremental-finding controls.
HTML
237
star
5

jquery-sieve

๐Ÿšฐ Sieve is a jQuery plugin allows you to quickly add an interactive search filter to any block of content.
HTML
153
star
6

maxframe.el

โ†”๏ธโ†•๏ธ [Elisp] maxframe provides the ability to maximize the emacs frame and stay within the display resolution.
Emacs Lisp
52
star
7

googleapis-mirror

A subset mirror of the Google Libraries API CDN meant to be served from your local development machine when internet access is lacking.
Ruby
47
star
8

minitest-matchers_vaccine

๐Ÿ’‰ Adds matcher support to minitest without all the other RSpec-style expectation "infections."
Ruby
35
star
9

tilda-bin

ใ€ฐ๏ธ๐Ÿ—‘๏ธ Ryan McGeary's personal ~/bin directory -- well at least the stuff that he wants to make public.
Ruby
15
star
10

mkv2m4v

๐Ÿ“บ Makes Apple TV compatible videos from MKV containers
Ruby
12
star
11

rbenv-rbx

Plugin for rbenv that adds Rubinius 2.x support
Shell
11
star
12

insert-time.el

[Elisp] insert-time provides an easy way to insert time and date stamps into your emacs buffers
Emacs Lisp
11
star
13

ryan.mcgeary.org

๐Ÿค“ Ryan McGeary's Home Page
HTML
9
star
14

iso639

๐ŸŒŽ๐ŸŒ A ruby gem for ISO 639-1 and ISO 639-2 lookups by name, alpha-2 code, or alpha-3 code
Ruby
8
star
15

smhelper-obfuscated-email

A staticmatic helper to obfuscate mailto links using javascript.
Ruby
6
star
16

yarg

Yet Another Ruby Generator: Customize existing project generators to fit your personality.
Ruby
6
star
17

rbenv-bundle-path-fix

๐Ÿ’Ž๐Ÿ”ง Fixes a peculiar difference between local and global config of BUNDLE_PATH in Bundler v1
Shell
5
star
18

duplicatorg

Minimal command line client for ReplicatorG
Ruby
4
star
19

boulderruby-startupweek

Boulder Ruby Presentation Demo during Startup Week 2015
Ruby
4
star
20

project-euler

My solutions to Project Euler
Ruby
3
star
21

zippopotamus

๐Ÿ“ Ruby wrapper gem for the http://Zippopotam.us API.
Ruby
3
star
22

launch_app_scripts

Automated creation of AppleScripts that launch your favorite applications
3
star
23

mcgearygroup.com

Home page for McGeary Consulting Group, LLC
HTML
2
star
24

htmlize

Convert buffer text and decorations to HTML
Emacs Lisp
2
star
25

rmm5t.github.io

My GitHub Page (just a redirect to http://ryan.mcgeary.org)
HTML
2
star
26

sprints

Scaffolding for quick development sprints
Ruby
1
star
27

middleman-test

For testing gems related to middleman
Ruby
1
star
28

stackexchange-shortcut-disabler

๐Ÿ”ง Chrome Extension to fix readline/emacs hotkeys in the editor of all StackExchange sites
JavaScript
1
star
29

big4referral

HTML
1
star