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 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, data;
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
- data = current_settings.data;
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.get_data = function(key) {
166
- return this._data_sets[key || (key = this.current_flag)];
167
- };
168
-
169
- Controller.prototype.save_data = function(data, key) {
170
- return this._data_sets[key || (key = this.current_flag)] = this.callbacks("data_refactor").call(this, data);
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 = -2;
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 data, query, search_key;
352
+ var query, _callback;
322
353
  query = this.catch_query();
323
354
  if (!query) {
324
- return false;
355
+ return;
325
356
  }
326
- data = this.get_data();
327
- search_key = this.get_opt("search_key");
328
- data = this.callbacks('filter').call(this, query.text, data || [], search_key);
329
- if (data && data.length > 0) {
330
- this.render_view(data);
331
- } else if (this.callbacks('remote_filter')) {
332
- this.remote_call(query);
333
- } else {
334
- this.view.hide();
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(controller) {
345
- this.controller = controller;
346
- this.id = this.controller.get_opt("view_id") || "at-view";
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.controller.callbacks("selector").call(this.controller, $li);
384
- this.controller.trigger("choose", [$li]);
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.controller.rect();
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.controller.trigger("reposition", [offset]);
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.controller.get_opt('tpl', DEFAULT_TPL);
492
+ tpl = this.context.get_opt('tpl', DEFAULT_TPL);
463
493
  $.each(list, function(i, item) {
464
494
  var $li, li;
465
- li = _this.controller.callbacks("tpl_eval").call(_this.controller, tpl, item);
466
- $li = $(_this.controller.callbacks("highlighter").call(_this.controller, li, _this.controller.query.text));
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.createRange();
687
+ range = this.domInputor.createTextRange();
659
688
  if (pos) {
660
689
  range.move('character', pos);
661
690
  }
@@ -1,7 +1,7 @@
1
1
  module Jquery
2
2
  module Atwho
3
3
  module Rails
4
- VERSION = "0.2.4"
4
+ VERSION = "0.2.5"
5
5
  end
6
6
  end
7
7
  end
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
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-15 00:00:00.000000000 Z
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: -3109051973216094172
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: -3109051973216094172
91
+ hash: 3505150916323372414
92
92
  requirements: []
93
93
  rubyforge_project: jquery-atwho-rails
94
94
  rubygems_version: 1.8.25