jquery-waypoints-rails 0.0.2.alpha → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c2899313f7e8db8577fea560a7e35edc727a096a
4
+ data.tar.gz: 00715f74e396b254434b3e46fd5d599426367967
5
+ SHA512:
6
+ metadata.gz: e93f063131b30bf96e81a54acb860d09308662a4ef9b10d61dd00e7bc1877fc6c73d8cf556a50e1108904babe39c4b2493942344a2f5f867f6bff2b7e141ea4b
7
+ data.tar.gz: 4e706d709cdf48157233b57ff780001757a015405084d8f3ecaeda234344d55e79a476ad7a2bc0b2ef6c76ff8345ad56359f042d80f2fb9f2c52a7f5938c56f1
@@ -0,0 +1,70 @@
1
+ // Generated by CoffeeScript 1.6.2
2
+ /*
3
+ Infinite Scroll Shortcut for jQuery Waypoints - v2.0.5
4
+ Copyright (c) 2011-2014 Caleb Troughton
5
+ Licensed under the MIT license.
6
+ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
7
+ */
8
+
9
+
10
+ (function() {
11
+ (function(root, factory) {
12
+ if (typeof define === 'function' && define.amd) {
13
+ return define(['jquery', 'waypoints'], factory);
14
+ } else {
15
+ return factory(root.jQuery);
16
+ }
17
+ })(window, function($) {
18
+ var defaults;
19
+
20
+ defaults = {
21
+ container: 'auto',
22
+ items: '.infinite-item',
23
+ more: '.infinite-more-link',
24
+ offset: 'bottom-in-view',
25
+ loadingClass: 'infinite-loading',
26
+ onBeforePageLoad: $.noop,
27
+ onAfterPageLoad: $.noop
28
+ };
29
+ return $.waypoints('extendFn', 'infinite', function(options) {
30
+ var $container, opts;
31
+
32
+ opts = $.extend({}, $.fn.waypoint.defaults, defaults, options);
33
+ if ($(opts.more).length === 0) {
34
+ return this;
35
+ }
36
+ $container = opts.container === 'auto' ? this : $(opts.container);
37
+ opts.handler = function(direction) {
38
+ var $this;
39
+
40
+ if (direction === 'down' || direction === 'right') {
41
+ $this = $(this);
42
+ opts.onBeforePageLoad();
43
+ $this.waypoint('destroy');
44
+ $container.addClass(opts.loadingClass);
45
+ return $.get($(opts.more).attr('href'), function(data) {
46
+ var $data, $more, $newMore, fn;
47
+
48
+ $data = $($.parseHTML(data));
49
+ $more = $(opts.more);
50
+ $newMore = $data.find(opts.more);
51
+ $container.append($data.find(opts.items));
52
+ $container.removeClass(opts.loadingClass);
53
+ if ($newMore.length) {
54
+ $more.replaceWith($newMore);
55
+ fn = function() {
56
+ return $this.waypoint(opts);
57
+ };
58
+ setTimeout(fn, 0);
59
+ } else {
60
+ $more.remove();
61
+ }
62
+ return opts.onAfterPageLoad();
63
+ });
64
+ }
65
+ };
66
+ return this.waypoint(opts);
67
+ });
68
+ });
69
+
70
+ }).call(this);
@@ -0,0 +1,517 @@
1
+ // Generated by CoffeeScript 1.6.2
2
+ /*!
3
+ jQuery Waypoints - v2.0.5
4
+ Copyright (c) 2011-2014 Caleb Troughton
5
+ Licensed under the MIT license.
6
+ https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
7
+ */
8
+
9
+
10
+ (function() {
11
+ var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
12
+ __slice = [].slice;
13
+
14
+ (function(root, factory) {
15
+ if (typeof define === 'function' && define.amd) {
16
+ return define('waypoints', ['jquery'], function($) {
17
+ return factory($, root);
18
+ });
19
+ } else {
20
+ return factory(root.jQuery, root);
21
+ }
22
+ })(window, function($, window) {
23
+ var $w, Context, Waypoint, allWaypoints, contextCounter, contextKey, contexts, isTouch, jQMethods, methods, resizeEvent, scrollEvent, waypointCounter, waypointKey, wp, wps;
24
+
25
+ $w = $(window);
26
+ isTouch = __indexOf.call(window, 'ontouchstart') >= 0;
27
+ allWaypoints = {
28
+ horizontal: {},
29
+ vertical: {}
30
+ };
31
+ contextCounter = 1;
32
+ contexts = {};
33
+ contextKey = 'waypoints-context-id';
34
+ resizeEvent = 'resize.waypoints';
35
+ scrollEvent = 'scroll.waypoints';
36
+ waypointCounter = 1;
37
+ waypointKey = 'waypoints-waypoint-ids';
38
+ wp = 'waypoint';
39
+ wps = 'waypoints';
40
+ Context = (function() {
41
+ function Context($element) {
42
+ var _this = this;
43
+
44
+ this.$element = $element;
45
+ this.element = $element[0];
46
+ this.didResize = false;
47
+ this.didScroll = false;
48
+ this.id = 'context' + contextCounter++;
49
+ this.oldScroll = {
50
+ x: $element.scrollLeft(),
51
+ y: $element.scrollTop()
52
+ };
53
+ this.waypoints = {
54
+ horizontal: {},
55
+ vertical: {}
56
+ };
57
+ this.element[contextKey] = this.id;
58
+ contexts[this.id] = this;
59
+ $element.bind(scrollEvent, function() {
60
+ var scrollHandler;
61
+
62
+ if (!(_this.didScroll || isTouch)) {
63
+ _this.didScroll = true;
64
+ scrollHandler = function() {
65
+ _this.doScroll();
66
+ return _this.didScroll = false;
67
+ };
68
+ return window.setTimeout(scrollHandler, $[wps].settings.scrollThrottle);
69
+ }
70
+ });
71
+ $element.bind(resizeEvent, function() {
72
+ var resizeHandler;
73
+
74
+ if (!_this.didResize) {
75
+ _this.didResize = true;
76
+ resizeHandler = function() {
77
+ $[wps]('refresh');
78
+ return _this.didResize = false;
79
+ };
80
+ return window.setTimeout(resizeHandler, $[wps].settings.resizeThrottle);
81
+ }
82
+ });
83
+ }
84
+
85
+ Context.prototype.doScroll = function() {
86
+ var axes,
87
+ _this = this;
88
+
89
+ axes = {
90
+ horizontal: {
91
+ newScroll: this.$element.scrollLeft(),
92
+ oldScroll: this.oldScroll.x,
93
+ forward: 'right',
94
+ backward: 'left'
95
+ },
96
+ vertical: {
97
+ newScroll: this.$element.scrollTop(),
98
+ oldScroll: this.oldScroll.y,
99
+ forward: 'down',
100
+ backward: 'up'
101
+ }
102
+ };
103
+ if (isTouch && (!axes.vertical.oldScroll || !axes.vertical.newScroll)) {
104
+ $[wps]('refresh');
105
+ }
106
+ $.each(axes, function(aKey, axis) {
107
+ var direction, isForward, triggered;
108
+
109
+ triggered = [];
110
+ isForward = axis.newScroll > axis.oldScroll;
111
+ direction = isForward ? axis.forward : axis.backward;
112
+ $.each(_this.waypoints[aKey], function(wKey, waypoint) {
113
+ var _ref, _ref1;
114
+
115
+ if ((axis.oldScroll < (_ref = waypoint.offset) && _ref <= axis.newScroll)) {
116
+ return triggered.push(waypoint);
117
+ } else if ((axis.newScroll < (_ref1 = waypoint.offset) && _ref1 <= axis.oldScroll)) {
118
+ return triggered.push(waypoint);
119
+ }
120
+ });
121
+ triggered.sort(function(a, b) {
122
+ return a.offset - b.offset;
123
+ });
124
+ if (!isForward) {
125
+ triggered.reverse();
126
+ }
127
+ return $.each(triggered, function(i, waypoint) {
128
+ if (waypoint.options.continuous || i === triggered.length - 1) {
129
+ return waypoint.trigger([direction]);
130
+ }
131
+ });
132
+ });
133
+ return this.oldScroll = {
134
+ x: axes.horizontal.newScroll,
135
+ y: axes.vertical.newScroll
136
+ };
137
+ };
138
+
139
+ Context.prototype.refresh = function() {
140
+ var axes, cOffset, isWin,
141
+ _this = this;
142
+
143
+ isWin = $.isWindow(this.element);
144
+ cOffset = this.$element.offset();
145
+ this.doScroll();
146
+ axes = {
147
+ horizontal: {
148
+ contextOffset: isWin ? 0 : cOffset.left,
149
+ contextScroll: isWin ? 0 : this.oldScroll.x,
150
+ contextDimension: this.$element.width(),
151
+ oldScroll: this.oldScroll.x,
152
+ forward: 'right',
153
+ backward: 'left',
154
+ offsetProp: 'left'
155
+ },
156
+ vertical: {
157
+ contextOffset: isWin ? 0 : cOffset.top,
158
+ contextScroll: isWin ? 0 : this.oldScroll.y,
159
+ contextDimension: isWin ? $[wps]('viewportHeight') : this.$element.height(),
160
+ oldScroll: this.oldScroll.y,
161
+ forward: 'down',
162
+ backward: 'up',
163
+ offsetProp: 'top'
164
+ }
165
+ };
166
+ return $.each(axes, function(aKey, axis) {
167
+ return $.each(_this.waypoints[aKey], function(i, waypoint) {
168
+ var adjustment, elementOffset, oldOffset, _ref, _ref1;
169
+
170
+ adjustment = waypoint.options.offset;
171
+ oldOffset = waypoint.offset;
172
+ elementOffset = $.isWindow(waypoint.element) ? 0 : waypoint.$element.offset()[axis.offsetProp];
173
+ if ($.isFunction(adjustment)) {
174
+ adjustment = adjustment.apply(waypoint.element);
175
+ } else if (typeof adjustment === 'string') {
176
+ adjustment = parseFloat(adjustment);
177
+ if (waypoint.options.offset.indexOf('%') > -1) {
178
+ adjustment = Math.ceil(axis.contextDimension * adjustment / 100);
179
+ }
180
+ }
181
+ waypoint.offset = elementOffset - axis.contextOffset + axis.contextScroll - adjustment;
182
+ if ((waypoint.options.onlyOnScroll && (oldOffset != null)) || !waypoint.enabled) {
183
+ return;
184
+ }
185
+ if (oldOffset !== null && (oldOffset < (_ref = axis.oldScroll) && _ref <= waypoint.offset)) {
186
+ return waypoint.trigger([axis.backward]);
187
+ } else if (oldOffset !== null && (oldOffset > (_ref1 = axis.oldScroll) && _ref1 >= waypoint.offset)) {
188
+ return waypoint.trigger([axis.forward]);
189
+ } else if (oldOffset === null && axis.oldScroll >= waypoint.offset) {
190
+ return waypoint.trigger([axis.forward]);
191
+ }
192
+ });
193
+ });
194
+ };
195
+
196
+ Context.prototype.checkEmpty = function() {
197
+ if ($.isEmptyObject(this.waypoints.horizontal) && $.isEmptyObject(this.waypoints.vertical)) {
198
+ this.$element.unbind([resizeEvent, scrollEvent].join(' '));
199
+ return delete contexts[this.id];
200
+ }
201
+ };
202
+
203
+ return Context;
204
+
205
+ })();
206
+ Waypoint = (function() {
207
+ function Waypoint($element, context, options) {
208
+ var idList, _ref;
209
+
210
+ if (options.offset === 'bottom-in-view') {
211
+ options.offset = function() {
212
+ var contextHeight;
213
+
214
+ contextHeight = $[wps]('viewportHeight');
215
+ if (!$.isWindow(context.element)) {
216
+ contextHeight = context.$element.height();
217
+ }
218
+ return contextHeight - $(this).outerHeight();
219
+ };
220
+ }
221
+ this.$element = $element;
222
+ this.element = $element[0];
223
+ this.axis = options.horizontal ? 'horizontal' : 'vertical';
224
+ this.callback = options.handler;
225
+ this.context = context;
226
+ this.enabled = options.enabled;
227
+ this.id = 'waypoints' + waypointCounter++;
228
+ this.offset = null;
229
+ this.options = options;
230
+ context.waypoints[this.axis][this.id] = this;
231
+ allWaypoints[this.axis][this.id] = this;
232
+ idList = (_ref = this.element[waypointKey]) != null ? _ref : [];
233
+ idList.push(this.id);
234
+ this.element[waypointKey] = idList;
235
+ }
236
+
237
+ Waypoint.prototype.trigger = function(args) {
238
+ if (!this.enabled) {
239
+ return;
240
+ }
241
+ if (this.callback != null) {
242
+ this.callback.apply(this.element, args);
243
+ }
244
+ if (this.options.triggerOnce) {
245
+ return this.destroy();
246
+ }
247
+ };
248
+
249
+ Waypoint.prototype.disable = function() {
250
+ return this.enabled = false;
251
+ };
252
+
253
+ Waypoint.prototype.enable = function() {
254
+ this.context.refresh();
255
+ return this.enabled = true;
256
+ };
257
+
258
+ Waypoint.prototype.destroy = function() {
259
+ delete allWaypoints[this.axis][this.id];
260
+ delete this.context.waypoints[this.axis][this.id];
261
+ return this.context.checkEmpty();
262
+ };
263
+
264
+ Waypoint.getWaypointsByElement = function(element) {
265
+ var all, ids;
266
+
267
+ ids = element[waypointKey];
268
+ if (!ids) {
269
+ return [];
270
+ }
271
+ all = $.extend({}, allWaypoints.horizontal, allWaypoints.vertical);
272
+ return $.map(ids, function(id) {
273
+ return all[id];
274
+ });
275
+ };
276
+
277
+ return Waypoint;
278
+
279
+ })();
280
+ methods = {
281
+ init: function(f, options) {
282
+ var _ref;
283
+
284
+ options = $.extend({}, $.fn[wp].defaults, options);
285
+ if ((_ref = options.handler) == null) {
286
+ options.handler = f;
287
+ }
288
+ this.each(function() {
289
+ var $this, context, contextElement, _ref1;
290
+
291
+ $this = $(this);
292
+ contextElement = (_ref1 = options.context) != null ? _ref1 : $.fn[wp].defaults.context;
293
+ if (!$.isWindow(contextElement)) {
294
+ contextElement = $this.closest(contextElement);
295
+ }
296
+ contextElement = $(contextElement);
297
+ context = contexts[contextElement[0][contextKey]];
298
+ if (!context) {
299
+ context = new Context(contextElement);
300
+ }
301
+ return new Waypoint($this, context, options);
302
+ });
303
+ $[wps]('refresh');
304
+ return this;
305
+ },
306
+ disable: function() {
307
+ return methods._invoke.call(this, 'disable');
308
+ },
309
+ enable: function() {
310
+ return methods._invoke.call(this, 'enable');
311
+ },
312
+ destroy: function() {
313
+ return methods._invoke.call(this, 'destroy');
314
+ },
315
+ prev: function(axis, selector) {
316
+ return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
317
+ if (index > 0) {
318
+ return stack.push(waypoints[index - 1]);
319
+ }
320
+ });
321
+ },
322
+ next: function(axis, selector) {
323
+ return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
324
+ if (index < waypoints.length - 1) {
325
+ return stack.push(waypoints[index + 1]);
326
+ }
327
+ });
328
+ },
329
+ _traverse: function(axis, selector, push) {
330
+ var stack, waypoints;
331
+
332
+ if (axis == null) {
333
+ axis = 'vertical';
334
+ }
335
+ if (selector == null) {
336
+ selector = window;
337
+ }
338
+ waypoints = jQMethods.aggregate(selector);
339
+ stack = [];
340
+ this.each(function() {
341
+ var index;
342
+
343
+ index = $.inArray(this, waypoints[axis]);
344
+ return push(stack, index, waypoints[axis]);
345
+ });
346
+ return this.pushStack(stack);
347
+ },
348
+ _invoke: function(method) {
349
+ this.each(function() {
350
+ var waypoints;
351
+
352
+ waypoints = Waypoint.getWaypointsByElement(this);
353
+ return $.each(waypoints, function(i, waypoint) {
354
+ waypoint[method]();
355
+ return true;
356
+ });
357
+ });
358
+ return this;
359
+ }
360
+ };
361
+ $.fn[wp] = function() {
362
+ var args, method;
363
+
364
+ method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
365
+ if (methods[method]) {
366
+ return methods[method].apply(this, args);
367
+ } else if ($.isFunction(method)) {
368
+ return methods.init.apply(this, arguments);
369
+ } else if ($.isPlainObject(method)) {
370
+ return methods.init.apply(this, [null, method]);
371
+ } else if (!method) {
372
+ return $.error("jQuery Waypoints needs a callback function or handler option.");
373
+ } else {
374
+ return $.error("The " + method + " method does not exist in jQuery Waypoints.");
375
+ }
376
+ };
377
+ $.fn[wp].defaults = {
378
+ context: window,
379
+ continuous: true,
380
+ enabled: true,
381
+ horizontal: false,
382
+ offset: 0,
383
+ triggerOnce: false
384
+ };
385
+ jQMethods = {
386
+ refresh: function() {
387
+ return $.each(contexts, function(i, context) {
388
+ return context.refresh();
389
+ });
390
+ },
391
+ viewportHeight: function() {
392
+ var _ref;
393
+
394
+ return (_ref = window.innerHeight) != null ? _ref : $w.height();
395
+ },
396
+ aggregate: function(contextSelector) {
397
+ var collection, waypoints, _ref;
398
+
399
+ collection = allWaypoints;
400
+ if (contextSelector) {
401
+ collection = (_ref = contexts[$(contextSelector)[0][contextKey]]) != null ? _ref.waypoints : void 0;
402
+ }
403
+ if (!collection) {
404
+ return [];
405
+ }
406
+ waypoints = {
407
+ horizontal: [],
408
+ vertical: []
409
+ };
410
+ $.each(waypoints, function(axis, arr) {
411
+ $.each(collection[axis], function(key, waypoint) {
412
+ return arr.push(waypoint);
413
+ });
414
+ arr.sort(function(a, b) {
415
+ return a.offset - b.offset;
416
+ });
417
+ waypoints[axis] = $.map(arr, function(waypoint) {
418
+ return waypoint.element;
419
+ });
420
+ return waypoints[axis] = $.unique(waypoints[axis]);
421
+ });
422
+ return waypoints;
423
+ },
424
+ above: function(contextSelector) {
425
+ if (contextSelector == null) {
426
+ contextSelector = window;
427
+ }
428
+ return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
429
+ return waypoint.offset <= context.oldScroll.y;
430
+ });
431
+ },
432
+ below: function(contextSelector) {
433
+ if (contextSelector == null) {
434
+ contextSelector = window;
435
+ }
436
+ return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
437
+ return waypoint.offset > context.oldScroll.y;
438
+ });
439
+ },
440
+ left: function(contextSelector) {
441
+ if (contextSelector == null) {
442
+ contextSelector = window;
443
+ }
444
+ return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
445
+ return waypoint.offset <= context.oldScroll.x;
446
+ });
447
+ },
448
+ right: function(contextSelector) {
449
+ if (contextSelector == null) {
450
+ contextSelector = window;
451
+ }
452
+ return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
453
+ return waypoint.offset > context.oldScroll.x;
454
+ });
455
+ },
456
+ enable: function() {
457
+ return jQMethods._invoke('enable');
458
+ },
459
+ disable: function() {
460
+ return jQMethods._invoke('disable');
461
+ },
462
+ destroy: function() {
463
+ return jQMethods._invoke('destroy');
464
+ },
465
+ extendFn: function(methodName, f) {
466
+ return methods[methodName] = f;
467
+ },
468
+ _invoke: function(method) {
469
+ var waypoints;
470
+
471
+ waypoints = $.extend({}, allWaypoints.vertical, allWaypoints.horizontal);
472
+ return $.each(waypoints, function(key, waypoint) {
473
+ waypoint[method]();
474
+ return true;
475
+ });
476
+ },
477
+ _filter: function(selector, axis, test) {
478
+ var context, waypoints;
479
+
480
+ context = contexts[$(selector)[0][contextKey]];
481
+ if (!context) {
482
+ return [];
483
+ }
484
+ waypoints = [];
485
+ $.each(context.waypoints[axis], function(i, waypoint) {
486
+ if (test(context, waypoint)) {
487
+ return waypoints.push(waypoint);
488
+ }
489
+ });
490
+ waypoints.sort(function(a, b) {
491
+ return a.offset - b.offset;
492
+ });
493
+ return $.map(waypoints, function(waypoint) {
494
+ return waypoint.element;
495
+ });
496
+ }
497
+ };
498
+ $[wps] = function() {
499
+ var args, method;
500
+
501
+ method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
502
+ if (jQMethods[method]) {
503
+ return jQMethods[method].apply(null, args);
504
+ } else {
505
+ return jQMethods.aggregate.call(null, method);
506
+ }
507
+ };
508
+ $[wps].settings = {
509
+ resizeThrottle: 100,
510
+ scrollThrottle: 30
511
+ };
512
+ return $w.on('load.waypoints', function() {
513
+ return $[wps]('refresh');
514
+ });
515
+ });
516
+
517
+ }).call(this);