jquery-plugins-rails 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.rvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
rvm --create ruby-1.9.3-
|
|
1
|
+
rvm --create ruby-1.9.3-p125@jquery-plugins-rails
|
|
@@ -170,7 +170,7 @@ drag = $special.drag = {
|
|
|
170
170
|
switch ( event.type ){
|
|
171
171
|
// mousemove, check distance, start dragging
|
|
172
172
|
case !dd.dragging && 'mousemove':
|
|
173
|
-
// drag tolerance, x
|
|
173
|
+
// drag tolerance, x² + y² = distance²
|
|
174
174
|
if ( Math.pow( event.pageX-dd.pageX, 2 ) + Math.pow( event.pageY-dd.pageY, 2 ) < Math.pow( dd.distance, 2 ) )
|
|
175
175
|
break; // distance tolerance not reached
|
|
176
176
|
event.target = dd.target; // force target from "mousedown" event (fix distance issue)
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jQuery.fuzzyMatch.js, version 0.3 (2011-06-22)
|
|
3
|
+
*
|
|
4
|
+
* https://github.com/rapportive-oss/jquery-fuzzymatch
|
|
5
|
+
*
|
|
6
|
+
* A fuzzy string-matching plugin for autocompleting in jQuery,
|
|
7
|
+
* based on LiquidMetal http://github.com/rmm5t/liquidmetal/blob/master/liquidmetal.js
|
|
8
|
+
* quicksilver.js http://code.google.com/p/rails-oceania/source/browse/lachiecox/qs_score/trunk/qs_score.js
|
|
9
|
+
* QuickSilver http://code.google.com/p/blacktree-alchemy/source/browse/trunk/Crucible/Code/NSString_BLTRExtensions.m#61
|
|
10
|
+
* FuzzyString https://github.com/dcparker/jquery_plugins/blob/master/fuzzy-string/fuzzy-string.js
|
|
11
|
+
*
|
|
12
|
+
* Copyright (c) 2011, Conrad Irwin (conrad@rapportive.com)
|
|
13
|
+
* Licensed under the MIT: http://www.opensource.org/licenses/mit-license.php
|
|
14
|
+
*
|
|
15
|
+
* TODO: Tweak heuristics, typo correction support?
|
|
16
|
+
**/
|
|
17
|
+
(function ($) {
|
|
18
|
+
|
|
19
|
+
// The scores are arranged so that a continuous match of characters will
|
|
20
|
+
// result in a total score of 1.
|
|
21
|
+
//
|
|
22
|
+
// The best case, this character is a match, and either this is the start
|
|
23
|
+
// of the string, or the previous character was also a match.
|
|
24
|
+
var SCORE_CONTINUE_MATCH = 1,
|
|
25
|
+
|
|
26
|
+
// A new match at the start of a word scores better than a new match
|
|
27
|
+
// elsewhere as it's more likely that the user will type the starts
|
|
28
|
+
// of fragments.
|
|
29
|
+
// (Our notion of word includes CamelCase and hypen-separated, etc.)
|
|
30
|
+
SCORE_START_WORD = 0.9,
|
|
31
|
+
|
|
32
|
+
// Any other match isn't ideal, but it's probably ok.
|
|
33
|
+
SCORE_OK = 0.8,
|
|
34
|
+
|
|
35
|
+
// The goodness of a match should decay slightly with each missing
|
|
36
|
+
// character.
|
|
37
|
+
//
|
|
38
|
+
// i.e. "bad" is more likely than "bard" when "bd" is typed.
|
|
39
|
+
//
|
|
40
|
+
// This will not change the order of suggestions based on SCORE_* until
|
|
41
|
+
// 100 characters are inserted between matches.
|
|
42
|
+
PENALTY_SKIPPED = 0.999,
|
|
43
|
+
|
|
44
|
+
// The goodness of an exact-case match should be higher than a
|
|
45
|
+
// case-insensitive match by a small amount.
|
|
46
|
+
//
|
|
47
|
+
// i.e. "HTML" is more likely than "haml" when "HM" is typed.
|
|
48
|
+
//
|
|
49
|
+
// This will not change the order of suggestions based on SCORE_* until
|
|
50
|
+
// 1000 characters are inserted between matches.
|
|
51
|
+
PENALTY_CASE_MISMATCH = 0.9999,
|
|
52
|
+
|
|
53
|
+
// If the word has more characters than the user typed, it should
|
|
54
|
+
// be penalised slightly.
|
|
55
|
+
//
|
|
56
|
+
// i.e. "html" is more likely than "html5" if I type "html".
|
|
57
|
+
//
|
|
58
|
+
// However, it may well be the case that there's a sensible secondary
|
|
59
|
+
// ordering (like alphabetical) that it makes sense to rely on when
|
|
60
|
+
// there are many prefix matches, so we don't make the penalty increase
|
|
61
|
+
// with the number of tokens.
|
|
62
|
+
PENALTY_NOT_COMPLETE = 0.99;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Generates all possible split objects by splitting a string around a
|
|
66
|
+
* character in as many ways as possible.
|
|
67
|
+
*
|
|
68
|
+
* @param string The string to split
|
|
69
|
+
* @param char A character on which to split it.
|
|
70
|
+
*
|
|
71
|
+
* @return [{
|
|
72
|
+
* before: The fragment of the string before this occurance of the
|
|
73
|
+
* character.
|
|
74
|
+
*
|
|
75
|
+
* char: The original coy of this character (which may differ in case
|
|
76
|
+
* from the "char" parameter).
|
|
77
|
+
*
|
|
78
|
+
* after: The fragment of the string after the occurance of the character.
|
|
79
|
+
* }]
|
|
80
|
+
**/
|
|
81
|
+
function allCaseInsensitiveSplits(string, chr) {
|
|
82
|
+
var lower = string.toLowerCase(),
|
|
83
|
+
lchr = chr.toLowerCase(),
|
|
84
|
+
|
|
85
|
+
i = lower.indexOf(lchr),
|
|
86
|
+
result = [];
|
|
87
|
+
|
|
88
|
+
while (i > -1) {
|
|
89
|
+
result.push({
|
|
90
|
+
before: string.slice(0, i),
|
|
91
|
+
chr: string.charAt(i),
|
|
92
|
+
after: string.slice(i + 1)
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
i = lower.indexOf(lchr, i + 1);
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Escapes a string so that it can be interpreted as HTML node content.
|
|
102
|
+
*
|
|
103
|
+
* WARNING: The output isn't safe for including in attributes, and I
|
|
104
|
+
* haven't considered other HTML contexts.
|
|
105
|
+
* NOTE: This really is worth it compared to using $('<div>').text(foo).html().
|
|
106
|
+
*
|
|
107
|
+
* @param string, the string to escape
|
|
108
|
+
* @return string, the escaped version.
|
|
109
|
+
*/
|
|
110
|
+
function htmlEscape(string) {
|
|
111
|
+
return string.replace(/&/g, '&')
|
|
112
|
+
.replace(/</g, '<')
|
|
113
|
+
.replace(/>/g, '>');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Generates a case-insensitive match of the abbreviation against the string
|
|
118
|
+
*
|
|
119
|
+
* @param string, a canonical string to be matched against.
|
|
120
|
+
* @param abbreviation, an abbreviation that a user may have typed
|
|
121
|
+
* in order to specify that string.
|
|
122
|
+
*
|
|
123
|
+
* @cache (private), a cache that reduces the expected running time of the
|
|
124
|
+
* algorithm in the case there are many repeated characters.
|
|
125
|
+
*
|
|
126
|
+
* @return {
|
|
127
|
+
* score: A score (0 <= score <= 1) that indicates how likely it is that
|
|
128
|
+
* the abbreviation matches the string.
|
|
129
|
+
*
|
|
130
|
+
* The score is 0 if the characters in the abbreviation do not
|
|
131
|
+
* all appear in order in the string.
|
|
132
|
+
*
|
|
133
|
+
* The score is 1 if the user typed the exact string.
|
|
134
|
+
*
|
|
135
|
+
* Scores are designed to be comparable when many different
|
|
136
|
+
* strings are matched against the same abbreviation, for example
|
|
137
|
+
* for autocompleting.
|
|
138
|
+
*
|
|
139
|
+
* html: A copy of the input string html-escaped, with matching letters
|
|
140
|
+
* surrounded by <b> and </b>.
|
|
141
|
+
*
|
|
142
|
+
* }
|
|
143
|
+
**/
|
|
144
|
+
$.fuzzyMatch = function (string, abbreviation, cache) {
|
|
145
|
+
if (abbreviation === "") {
|
|
146
|
+
return {
|
|
147
|
+
score: string === "" ? SCORE_CONTINUE_MATCH : PENALTY_NOT_COMPLETE,
|
|
148
|
+
html: htmlEscape(string)
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (cache && cache[string] && cache[string][abbreviation]) {
|
|
153
|
+
return $.extend({}, cache[string][abbreviation]);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
cache = cache || {};
|
|
157
|
+
cache[string] = cache[string] || {};
|
|
158
|
+
cache[string][abbreviation] =
|
|
159
|
+
|
|
160
|
+
$(allCaseInsensitiveSplits(string, abbreviation.charAt(0)))
|
|
161
|
+
.map(function (i, split) {
|
|
162
|
+
var result = $.fuzzyMatch(split.after, abbreviation.slice(1), cache),
|
|
163
|
+
preceding_char = split.before.charAt(split.before.length - 1);
|
|
164
|
+
|
|
165
|
+
if (split.before === "") {
|
|
166
|
+
result.score *= SCORE_CONTINUE_MATCH;
|
|
167
|
+
|
|
168
|
+
} else if (preceding_char.match(/[\\\/\-_+.# \t"@\[\(\{&]/) ||
|
|
169
|
+
(split.chr.toLowerCase() !== split.chr && preceding_char.toLowerCase() === preceding_char)) {
|
|
170
|
+
|
|
171
|
+
result.score *= SCORE_START_WORD;
|
|
172
|
+
} else {
|
|
173
|
+
result.score *= SCORE_OK;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (split.chr !== abbreviation.charAt(0)) {
|
|
177
|
+
result.score *= PENALTY_CASE_MISMATCH;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
result.score *= Math.pow(PENALTY_SKIPPED, split.before.length);
|
|
181
|
+
result.html = htmlEscape(split.before) + '<b>' + htmlEscape(split.chr) + '</b>' + result.html;
|
|
182
|
+
|
|
183
|
+
return result;
|
|
184
|
+
})
|
|
185
|
+
.sort(function (a, b) {
|
|
186
|
+
return a.score < b.score ? 1 : a.score === b.score ? 0 : -1;
|
|
187
|
+
})[0] ||
|
|
188
|
+
|
|
189
|
+
// No matches for the next character in the abbreviation, abort!
|
|
190
|
+
{
|
|
191
|
+
score: 0, // This 0 will multiply up to the top, giving a total of 0
|
|
192
|
+
html: htmlEscape(string)
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
return $.extend({}, cache[string][abbreviation]);
|
|
196
|
+
};
|
|
197
|
+
/*global jQuery */
|
|
198
|
+
}(jQuery));
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jquery-plugins-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-06-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: railties
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &4698280 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '3.0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *4698280
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: jquery-rails
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &4697840 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ! '>='
|
|
@@ -32,7 +32,7 @@ dependencies:
|
|
|
32
32
|
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *4697840
|
|
36
36
|
description: jQuery plugins for Rails 3.x asset pipeline
|
|
37
37
|
email:
|
|
38
38
|
- bb@xnull.de
|
|
@@ -53,6 +53,7 @@ files:
|
|
|
53
53
|
- lib/jquery-plugins/rails/version.rb
|
|
54
54
|
- vendor/assets/javascripts/jquery/event/drag.js
|
|
55
55
|
- vendor/assets/javascripts/jquery/event/drop.js
|
|
56
|
+
- vendor/assets/javascripts/jquery/fuzzymatch.js
|
|
56
57
|
- vendor/assets/javascripts/jquery/livequery.js
|
|
57
58
|
- vendor/assets/javascripts/jquery/metadata.js
|
|
58
59
|
homepage: https://github.com/zenops/jquery-plugins-rails
|
|
@@ -75,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
75
76
|
version: '0'
|
|
76
77
|
requirements: []
|
|
77
78
|
rubyforge_project:
|
|
78
|
-
rubygems_version: 1.8.
|
|
79
|
+
rubygems_version: 1.8.17
|
|
79
80
|
signing_key:
|
|
80
81
|
specification_version: 3
|
|
81
82
|
summary: jQuery plugins for Rails 3.x asset pipeline
|