jquery-atwho-rails 0.2.4 → 0.2.5
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/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
|