• Stars
    star
    291
  • Rank 142,563 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 15 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