jquery-atwho-rails 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/changelog.md +5 -0
- data/lib/assets/javascripts/jquery.atwho.js +88 -59
- data/lib/jquery-atwho-rails/version.rb +1 -1
- metadata +4 -4
data/changelog.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
|
2
|
+
The following date is in changelog file of At.js
|
3
|
+
https://github.com/ichord/At.js/blob/master/CHANGELOG.md
|
4
|
+
|
5
|
+
* sync at 2013-04-23 - At.js(c3845e5)
|
6
|
+
|
2
7
|
#### 2013.4.15 - v0.2.4
|
3
8
|
|
4
9
|
* `data` setting will be used to load data either local or remote. If it's String as URL it will preload data from remote by launch a ajax request (every times At.js call `reg` to update settings)
|
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
(function() {
|
12
|
+
var __slice = [].slice;
|
12
13
|
|
13
14
|
(function(factory) {
|
14
15
|
if (typeof define === 'function' && define.amd) {
|
@@ -17,7 +18,7 @@
|
|
17
18
|
return factory(window.jQuery);
|
18
19
|
}
|
19
20
|
})(function($) {
|
20
|
-
var Controller, DEFAULT_CALLBACKS, DEFAULT_TPL, KEY_CODE, View;
|
21
|
+
var Controller, DEFAULT_CALLBACKS, DEFAULT_TPL, KEY_CODE, Model, View;
|
21
22
|
KEY_CODE = {
|
22
23
|
DOWN: 40,
|
23
24
|
UP: 38,
|
@@ -41,6 +42,7 @@
|
|
41
42
|
},
|
42
43
|
matcher: function(flag, subtext) {
|
43
44
|
var match, matched, regexp;
|
45
|
+
flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
44
46
|
regexp = new RegExp(flag + '([A-Za-z0-9_\+\-]*)$|' + flag + '([^\\x00-\\xff]*)$', 'gi');
|
45
47
|
match = regexp.exec(subtext);
|
46
48
|
matched = null;
|
@@ -116,6 +118,56 @@
|
|
116
118
|
}
|
117
119
|
}
|
118
120
|
};
|
121
|
+
Model = (function() {
|
122
|
+
|
123
|
+
function Model(context) {
|
124
|
+
this.context = context;
|
125
|
+
this._data_sets = {};
|
126
|
+
}
|
127
|
+
|
128
|
+
Model.prototype.query = function(query, callback) {
|
129
|
+
var data, remote_filter, search_key;
|
130
|
+
data = this.all() || [];
|
131
|
+
search_key = this.context.get_opt("search_key");
|
132
|
+
data = this.context.callbacks('filter').call(this.context, query, data, search_key);
|
133
|
+
if (data && data.length > 0) {
|
134
|
+
callback(data);
|
135
|
+
} else if ((remote_filter = this.context.callbacks('remote_filter'))) {
|
136
|
+
remote_filter.call(this.context, query.text, callback);
|
137
|
+
} else {
|
138
|
+
return false;
|
139
|
+
}
|
140
|
+
return true;
|
141
|
+
};
|
142
|
+
|
143
|
+
Model.prototype.all = function(key) {
|
144
|
+
return this._data_sets[key || (key = this.context.current_flag)];
|
145
|
+
};
|
146
|
+
|
147
|
+
Model.prototype.reset = function(data, key) {
|
148
|
+
return this._data_sets[key || (key = this.context.current_flag)] = this.context.callbacks("data_refactor").call(this.context, data);
|
149
|
+
};
|
150
|
+
|
151
|
+
Model.prototype.load = function(data) {
|
152
|
+
if (typeof data === "string") {
|
153
|
+
return this._load_remote_data(data);
|
154
|
+
} else {
|
155
|
+
return this.reset(data);
|
156
|
+
}
|
157
|
+
};
|
158
|
+
|
159
|
+
Model.prototype._load_remote_data = function(url) {
|
160
|
+
var _this = this;
|
161
|
+
return $.ajax(url, {
|
162
|
+
dataType: "json"
|
163
|
+
}).done(function(data) {
|
164
|
+
return _this.reset(data);
|
165
|
+
});
|
166
|
+
};
|
167
|
+
|
168
|
+
return Model;
|
169
|
+
|
170
|
+
})();
|
119
171
|
Controller = (function() {
|
120
172
|
|
121
173
|
function Controller(inputor) {
|
@@ -124,9 +176,9 @@
|
|
124
176
|
this.flags = null;
|
125
177
|
this.current_flag = null;
|
126
178
|
this.query = null;
|
127
|
-
this._data_sets = {};
|
128
179
|
this.$inputor = $(inputor);
|
129
180
|
this.view = new View(this, this.$el);
|
181
|
+
this.model = new Model(this);
|
130
182
|
this.listen();
|
131
183
|
}
|
132
184
|
|
@@ -144,15 +196,10 @@
|
|
144
196
|
};
|
145
197
|
|
146
198
|
Controller.prototype.reg = function(flag, settings) {
|
147
|
-
var current_settings
|
199
|
+
var current_settings;
|
148
200
|
this.current_flag = flag;
|
149
201
|
current_settings = this.settings[flag] ? this.settings[flag] = $.extend({}, this.settings[flag], settings) : this.settings[flag] = $.extend({}, $.fn.atwho["default"], settings);
|
150
|
-
|
151
|
-
if (typeof data === "string") {
|
152
|
-
this.load_remote_data(data);
|
153
|
-
} else {
|
154
|
-
this.save_data(data);
|
155
|
-
}
|
202
|
+
this.model.load(current_settings.data);
|
156
203
|
return this;
|
157
204
|
};
|
158
205
|
|
@@ -162,12 +209,14 @@
|
|
162
209
|
return this.$inputor.trigger("" + name + ".atwho", data);
|
163
210
|
};
|
164
211
|
|
165
|
-
Controller.prototype.
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
212
|
+
Controller.prototype.super_call = function() {
|
213
|
+
var args, func_name;
|
214
|
+
func_name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
215
|
+
try {
|
216
|
+
return DEFAULT_CALLBACKS[func_name].apply(this, args);
|
217
|
+
} catch (error) {
|
218
|
+
return $.error("" + error + " Or maybe At.js doesn't have function " + func_name);
|
219
|
+
}
|
171
220
|
};
|
172
221
|
|
173
222
|
Controller.prototype.callbacks = function(func_name) {
|
@@ -191,7 +240,7 @@
|
|
191
240
|
var c, scale, scale_bottom;
|
192
241
|
c = this.$inputor.caret('offset', this.pos - 1);
|
193
242
|
if (document.selection) {
|
194
|
-
scale_bottom = scale =
|
243
|
+
scale_bottom = scale = 0;
|
195
244
|
} else {
|
196
245
|
scale = 0;
|
197
246
|
scale_bottom = 2;
|
@@ -259,7 +308,6 @@
|
|
259
308
|
default:
|
260
309
|
this.look_up();
|
261
310
|
}
|
262
|
-
return e.stopPropagation();
|
263
311
|
};
|
264
312
|
|
265
313
|
Controller.prototype.on_keydown = function(e) {
|
@@ -290,7 +338,6 @@
|
|
290
338
|
default:
|
291
339
|
$.noop();
|
292
340
|
}
|
293
|
-
return e.stopPropagation();
|
294
341
|
};
|
295
342
|
|
296
343
|
Controller.prototype.render_view = function(data) {
|
@@ -301,39 +348,23 @@
|
|
301
348
|
return this.view.render(data);
|
302
349
|
};
|
303
350
|
|
304
|
-
Controller.prototype.remote_call = function(query) {
|
305
|
-
var _callback;
|
306
|
-
_callback = function(data) {
|
307
|
-
return this.render_view(data);
|
308
|
-
};
|
309
|
-
_callback = $.proxy(_callback, this);
|
310
|
-
return this.callbacks('remote_filter').call(this, query.text, _callback);
|
311
|
-
};
|
312
|
-
|
313
|
-
Controller.prototype.load_remote_data = function(url) {
|
314
|
-
var _this = this;
|
315
|
-
return $.get(url).done(function(data) {
|
316
|
-
return _this.save_data(data);
|
317
|
-
});
|
318
|
-
};
|
319
|
-
|
320
351
|
Controller.prototype.look_up = function() {
|
321
|
-
var
|
352
|
+
var query, _callback;
|
322
353
|
query = this.catch_query();
|
323
354
|
if (!query) {
|
324
|
-
return
|
355
|
+
return;
|
325
356
|
}
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
357
|
+
_callback = function(data) {
|
358
|
+
if (data) {
|
359
|
+
return this.render_view(data);
|
360
|
+
} else {
|
361
|
+
return this.view.hide();
|
362
|
+
}
|
363
|
+
};
|
364
|
+
_callback = $.proxy(_callback, this);
|
365
|
+
if (!this.model.query(query.text, _callback)) {
|
366
|
+
return this.view.hide();
|
335
367
|
}
|
336
|
-
return $.noop();
|
337
368
|
};
|
338
369
|
|
339
370
|
return Controller;
|
@@ -341,9 +372,9 @@
|
|
341
372
|
})();
|
342
373
|
View = (function() {
|
343
374
|
|
344
|
-
function View(
|
345
|
-
this.
|
346
|
-
this.id = this.
|
375
|
+
function View(context) {
|
376
|
+
this.context = context;
|
377
|
+
this.id = this.context.get_opt("view_id") || "at-view";
|
347
378
|
this.timeout_id = null;
|
348
379
|
this.$el = $("#" + this.id);
|
349
380
|
this.create_view();
|
@@ -363,7 +394,6 @@
|
|
363
394
|
$menu.find('.cur').removeClass('cur');
|
364
395
|
return $(e.currentTarget).addClass('cur');
|
365
396
|
}).on('click', function(e) {
|
366
|
-
e.stopPropagation();
|
367
397
|
e.preventDefault();
|
368
398
|
return _this.$el.data("_view").choose();
|
369
399
|
});
|
@@ -380,14 +410,14 @@
|
|
380
410
|
View.prototype.choose = function() {
|
381
411
|
var $li;
|
382
412
|
$li = this.$el.find(".cur");
|
383
|
-
this.
|
384
|
-
this.
|
413
|
+
this.context.callbacks("selector").call(this.context, $li);
|
414
|
+
this.context.trigger("choose", [$li]);
|
385
415
|
return this.hide();
|
386
416
|
};
|
387
417
|
|
388
418
|
View.prototype.reposition = function() {
|
389
419
|
var offset, rect;
|
390
|
-
rect = this.
|
420
|
+
rect = this.context.rect();
|
391
421
|
if (rect.bottom + this.$el.height() - $(window).scrollTop() > $(window).height()) {
|
392
422
|
rect.bottom = rect.top - this.$el.height();
|
393
423
|
}
|
@@ -396,7 +426,7 @@
|
|
396
426
|
top: rect.bottom
|
397
427
|
};
|
398
428
|
this.$el.offset(offset);
|
399
|
-
return this.
|
429
|
+
return this.context.trigger("reposition", [offset]);
|
400
430
|
};
|
401
431
|
|
402
432
|
View.prototype.next = function() {
|
@@ -459,11 +489,11 @@
|
|
459
489
|
this.clear();
|
460
490
|
this.$el.data("_view", this);
|
461
491
|
$ul = this.$el.find('ul');
|
462
|
-
tpl = this.
|
492
|
+
tpl = this.context.get_opt('tpl', DEFAULT_TPL);
|
463
493
|
$.each(list, function(i, item) {
|
464
494
|
var $li, li;
|
465
|
-
li = _this.
|
466
|
-
$li = $(_this.
|
495
|
+
li = _this.context.callbacks("tpl_eval").call(_this.context, tpl, item);
|
496
|
+
$li = $(_this.context.callbacks("highlighter").call(_this.context, li, _this.context.query.text));
|
467
497
|
$li.data("info", item);
|
468
498
|
return $ul.append($li);
|
469
499
|
});
|
@@ -487,7 +517,6 @@
|
|
487
517
|
});
|
488
518
|
};
|
489
519
|
$.fn.atwho.Controller = Controller;
|
490
|
-
$.fn.atwho.View = View;
|
491
520
|
return $.fn.atwho["default"] = {
|
492
521
|
data: null,
|
493
522
|
search_key: "name",
|
@@ -655,7 +684,7 @@
|
|
655
684
|
var $inputor, h, offset, position, range, x, y;
|
656
685
|
$inputor = this.$inputor;
|
657
686
|
if (document.selection) {
|
658
|
-
range = this.domInputor.
|
687
|
+
range = this.domInputor.createTextRange();
|
659
688
|
if (pos) {
|
660
689
|
range.move('character', pos);
|
661
690
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-atwho-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -79,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
79
|
version: '0'
|
80
80
|
segments:
|
81
81
|
- 0
|
82
|
-
hash:
|
82
|
+
hash: 3505150916323372414
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
@@ -88,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
88
|
version: '0'
|
89
89
|
segments:
|
90
90
|
- 0
|
91
|
-
hash:
|
91
|
+
hash: 3505150916323372414
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project: jquery-atwho-rails
|
94
94
|
rubygems_version: 1.8.25
|