Strategery_InfiniteScroll2 - Version 3.5.2

Version Notes

- Changed default configuration to prevent issues with jQuery in RWD/default theme.
- Added $j validation to prevent issues with other themes.

Download this release

Release Info

Developer Strategery
Extension Strategery_InfiniteScroll2
Version 3.5.2
Comparing to
See all releases


Code changes from version 3.5.1 to 3.5.2

app/code/community/Strategery/Infinitescroll/etc/config.xml CHANGED
@@ -24,7 +24,7 @@
24
  <config>
25
  <modules>
26
  <Strategery_Infinitescroll>
27
- <version>3.5.1</version>
28
  </Strategery_Infinitescroll>
29
  </modules>
30
  <global>
@@ -70,7 +70,7 @@
70
  <general>
71
  <enabled>1</enabled>
72
  <debug>1</debug>
73
- <jquery>1</jquery>
74
  </general>
75
  <instances>
76
  <grid>1</grid>
24
  <config>
25
  <modules>
26
  <Strategery_Infinitescroll>
27
+ <version>3.5.2</version>
28
  </Strategery_Infinitescroll>
29
  </modules>
30
  <global>
70
  <general>
71
  <enabled>1</enabled>
72
  <debug>1</debug>
73
+ <jquery>0</jquery>
74
  </general>
75
  <instances>
76
  <grid>1</grid>
app/design/frontend/base/default/template/strategery/deny/login.phtml DELETED
@@ -1,71 +0,0 @@
1
- <?php
2
- /**
3
- *
4
- * Strategery-Deny - Magento Extension
5
- *
6
- * @copyright Copyright (c) 2015 Strategery Inc. (http://www.usestrategery.com/)
7
- * @author Damian A. Pastorini - damian.pastorini@dwdeveloper.com
8
- *
9
- */
10
- ?>
11
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
13
- <head>
14
- <?php echo $this->getChildHtml('head') ?>
15
- </head>
16
- <body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
17
- <div class="wrapper">
18
- <div class="page">
19
- <div class="main-container col2-layout">
20
- <div class="main">
21
- <div class="col-main">
22
- <div class="account-login container">
23
- <div class="page-title">
24
- <h1><?php echo $this->__('Front Access') ?></h1>
25
- </div>
26
- <?php echo $this->getChildHtml('global_messages') ?>
27
- <?php echo $this->getMessagesBlock()->toHtml() ?>
28
- <form action="<?php echo Mage::getUrl('frontaccess/login'); ?>" method="post" id="frontaccess-form">
29
- <div class="col1-set">
30
- <div class="col-1">
31
- <div class="content">
32
- <h2><?php echo $this->__('Login') ?></h2>
33
- <ul class="form-list">
34
- <li>
35
- <label for="user" class="required"><em>*</em><?php echo $this->__('User') ?></label>
36
- <div class="input-box">
37
- <input type="text" name="user" id="user" class="input-text required-entry" title="<?php echo Mage::helper('core')->quoteEscape($this->__('User')) ?>"/>
38
- </div>
39
- </li>
40
- <li>
41
- <label for="password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
42
- <div class="input-box">
43
- <input type="password" name="password" class="input-text required-entry" id="password" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Password')) ?>" />
44
- </div>
45
- </li>
46
- </ul>
47
- <p class="required"><?php echo $this->__('* Required Fields') ?></p>
48
- </div>
49
- </div>
50
- </div>
51
- <div class="col1-set">
52
- <div class="col-1 registered-users">
53
- <div class="buttons-set">
54
- <button type="submit" class="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Login')) ?>" name="send" id="send2"><span><span><?php echo $this->__('Login') ?></span></span></button>
55
- </div>
56
- </div>
57
- </div>
58
- </form>
59
- <script type="text/javascript">
60
- //<![CDATA[
61
- var dataForm = new VarienForm('frontaccess-form', true);
62
- //]]>
63
- </script>
64
- </div>
65
- </div>
66
- </div>
67
- </div>
68
- </div>
69
- </div>
70
- </body>
71
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/design/frontend/base/default/template/strategery/infinitescroll/init.phtml CHANGED
@@ -145,7 +145,9 @@
145
  });
146
  window.ias.on('rendered', function(items){
147
  SgyIAS._log({eventName: 'render', items: items});
148
- $j(window).trigger('delayed-resize');
 
 
149
  });
150
  window.ias.on('noneLeft', function(){
151
  SgyIAS._log({eventName: 'noneLeft'});
145
  });
146
  window.ias.on('rendered', function(items){
147
  SgyIAS._log({eventName: 'render', items: items});
148
+ if (typeof $j !== 'undefined' && !!$j) {
149
+ $j(window).trigger('delayed-resize');
150
+ }
151
  });
152
  window.ias.on('noneLeft', function(){
153
  SgyIAS._log({eventName: 'noneLeft'});
js/jquery/infinitescroll/jquery-ias.js DELETED
@@ -1,1404 +0,0 @@
1
- /**
2
- * IASCallbacks
3
- * http://infiniteajaxscroll.com
4
- *
5
- * This file is part of the Infinite AJAX Scroll package
6
- *
7
- * Copyright 2014 Webcreate (Jeroen Fiege)
8
- */
9
-
10
- var IASCallbacks = function () {
11
- this.list = [];
12
- this.fireStack = [];
13
- this.isFiring = false;
14
- this.isDisabled = false;
15
-
16
- /**
17
- * Calls all added callbacks
18
- *
19
- * @private
20
- * @param args
21
- */
22
- this.fire = function (args) {
23
- var context = args[0],
24
- deferred = args[1],
25
- callbackArguments = args[2];
26
- this.isFiring = true;
27
-
28
- for (var i = 0, l = this.list.length; i < l; i++) {
29
- if (false === this.list[i].fn.apply(context, callbackArguments)) {
30
- deferred.reject();
31
-
32
- break;
33
- }
34
- }
35
-
36
- this.isFiring = false;
37
-
38
- deferred.resolve();
39
-
40
- if (this.fireStack.length) {
41
- this.fire(this.fireStack.shift());
42
- }
43
- };
44
-
45
- /**
46
- * Returns index of the callback in the list in a similar way as
47
- * the indexOf function.
48
- *
49
- * @param callback
50
- * @param {number} index index to start the search from
51
- * @returns {number}
52
- */
53
- this.inList = function (callback, index) {
54
- index = index || 0;
55
-
56
- for (var i = index, length = this.list.length; i < length; i++) {
57
- if (this.list[i].fn === callback || (callback.guid && this.list[i].fn.guid && callback.guid === this.list[i].fn.guid)) {
58
- return i;
59
- }
60
- }
61
-
62
- return -1;
63
- };
64
-
65
- return this;
66
- };
67
-
68
- IASCallbacks.prototype = {
69
- /**
70
- * Adds a callback
71
- *
72
- * @param callback
73
- * @returns {IASCallbacks}
74
- * @param priority
75
- */
76
- add: function (callback, priority) {
77
- var callbackObject = {fn: callback, priority: priority};
78
-
79
- priority = priority || 0;
80
-
81
- for (var i = 0, length = this.list.length; i < length; i++) {
82
- if (priority > this.list[i].priority) {
83
- this.list.splice(i, 0, callbackObject);
84
-
85
- return this;
86
- }
87
- }
88
-
89
- this.list.push(callbackObject);
90
-
91
- return this;
92
- },
93
-
94
- /**
95
- * Removes a callback
96
- *
97
- * @param callback
98
- * @returns {IASCallbacks}
99
- */
100
- remove: function (callback) {
101
- var index = 0;
102
-
103
- while (( index = this.inList(callback, index) ) > -1) {
104
- this.list.splice(index, 1);
105
- }
106
-
107
- return this;
108
- },
109
-
110
- /**
111
- * Checks if callback is added
112
- *
113
- * @param callback
114
- * @returns {*}
115
- */
116
- has: function (callback) {
117
- return (this.inList(callback) > -1);
118
- },
119
-
120
-
121
- /**
122
- * Calls callbacks with a context
123
- *
124
- * @param context
125
- * @param args
126
- * @returns {object|void}
127
- */
128
- fireWith: function (context, args) {
129
- var deferred = jQuery.Deferred();
130
-
131
- if (this.isDisabled) {
132
- return deferred.reject();
133
- }
134
-
135
- args = args || [];
136
- args = [ context, deferred, args.slice ? args.slice() : args ];
137
-
138
- if (this.isFiring) {
139
- this.fireStack.push(args);
140
- } else {
141
- this.fire(args);
142
- }
143
-
144
- return deferred;
145
- },
146
-
147
- /**
148
- * Disable firing of new events
149
- */
150
- disable: function () {
151
- this.isDisabled = true;
152
- },
153
-
154
- /**
155
- * Enable firing of new events
156
- */
157
- enable: function () {
158
- this.isDisabled = false;
159
- }
160
- };
161
- /**
162
- * Infinite Ajax Scroll v2.1.3
163
- * A jQuery plugin for infinite scrolling
164
- * http://infiniteajaxscroll.com
165
- *
166
- * Commercial use requires one-time purchase of a commercial license
167
- * http://infiniteajaxscroll.com/docs/license.html
168
- *
169
- * Non-commercial use is licensed under the MIT License
170
- *
171
- * Copyright 2014 Webcreate (Jeroen Fiege)
172
- */
173
-
174
- (function($) {
175
-
176
- 'use strict';
177
-
178
- var UNDETERMINED_SCROLLOFFSET = -1;
179
-
180
- var IAS = function($element, options) {
181
- this.itemsContainerSelector = options.container;
182
- this.itemSelector = options.item;
183
- this.nextSelector = options.next;
184
- this.paginationSelector = options.pagination;
185
- this.$scrollContainer = $element;
186
- this.$itemsContainer = $(this.itemsContainerSelector);
187
- this.$container = (window === $element.get(0) ? $(document) : $element);
188
- this.defaultDelay = options.delay;
189
- this.negativeMargin = options.negativeMargin;
190
- this.nextUrl = null;
191
- this.isBound = false;
192
- this.listeners = {
193
- next: new IASCallbacks(),
194
- load: new IASCallbacks(),
195
- loaded: new IASCallbacks(),
196
- render: new IASCallbacks(),
197
- rendered: new IASCallbacks(),
198
- scroll: new IASCallbacks(),
199
- noneLeft: new IASCallbacks(),
200
- ready: new IASCallbacks()
201
- };
202
- this.extensions = [];
203
-
204
- /**
205
- * Scroll event handler
206
- *
207
- * Note: calls to this functions should be throttled
208
- *
209
- * @private
210
- */
211
- this.scrollHandler = function() {
212
- var currentScrollOffset = this.getCurrentScrollOffset(this.$scrollContainer),
213
- scrollThreshold = this.getScrollThreshold()
214
- ;
215
-
216
- // the throttle method can call the scrollHandler even thought we have called unbind()
217
- if (!this.isBound) {
218
- return;
219
- }
220
-
221
- // invalid scrollThreshold. The DOM might not have loaded yet...
222
- if (UNDETERMINED_SCROLLOFFSET == scrollThreshold) {
223
- return;
224
- }
225
-
226
- this.fire('scroll', [currentScrollOffset, scrollThreshold]);
227
-
228
- if (currentScrollOffset >= scrollThreshold) {
229
- this.next();
230
- }
231
- };
232
-
233
- /**
234
- * Returns the last item currently in the DOM
235
- *
236
- * @private
237
- * @returns {object}
238
- */
239
- this.getLastItem = function() {
240
- return $(this.itemSelector, this.$itemsContainer.get(0)).last();
241
- };
242
-
243
- /**
244
- * Returns the first item currently in the DOM
245
- *
246
- * @private
247
- * @returns {object}
248
- */
249
- this.getFirstItem = function() {
250
- return $(this.itemSelector, this.$itemsContainer.get(0)).first();
251
- };
252
-
253
- /**
254
- * Returns scroll threshold. This threshold marks the line from where
255
- * IAS should start loading the next page.
256
- *
257
- * @private
258
- * @param negativeMargin defaults to {this.negativeMargin}
259
- * @return {number}
260
- */
261
- this.getScrollThreshold = function(negativeMargin) {
262
- var $lastElement;
263
-
264
- negativeMargin = negativeMargin || this.negativeMargin;
265
- negativeMargin = (negativeMargin >= 0 ? negativeMargin * -1 : negativeMargin);
266
-
267
- $lastElement = this.getLastItem();
268
-
269
- // if the don't have a last element, the DOM might not have been loaded,
270
- // or the selector is invalid
271
- if (0 === $lastElement.size()) {
272
- return UNDETERMINED_SCROLLOFFSET;
273
- }
274
-
275
- return ($lastElement.offset().top + $lastElement.height() + negativeMargin);
276
- };
277
-
278
- /**
279
- * Returns current scroll offset for the given scroll container
280
- *
281
- * @private
282
- * @param $container
283
- * @returns {number}
284
- */
285
- this.getCurrentScrollOffset = function($container) {
286
- var scrollTop = 0,
287
- containerHeight = $container.height();
288
-
289
- if (window === $container.get(0)) {
290
- scrollTop = $container.scrollTop();
291
- } else {
292
- scrollTop = $container.offset().top;
293
- }
294
-
295
- // compensate for iPhone
296
- if (navigator.platform.indexOf("iPhone") != -1 || navigator.platform.indexOf("iPod") != -1) {
297
- containerHeight += 80;
298
- }
299
-
300
- return (scrollTop + containerHeight);
301
- };
302
-
303
- /**
304
- * Returns the url for the next page
305
- *
306
- * @private
307
- */
308
- this.getNextUrl = function(container) {
309
- if (!container) {
310
- container = this.$container;
311
- }
312
-
313
- // always take the last matching item
314
- return $(this.nextSelector, container).last().attr('href');
315
- };
316
-
317
- /**
318
- * Loads a page url
319
- *
320
- * @param url
321
- * @param callback
322
- * @param delay
323
- * @returns {object} jsXhr object
324
- */
325
- this.load = function(url, callback, delay) {
326
- var self = this,
327
- $itemContainer,
328
- items = [],
329
- timeStart = +new Date(),
330
- timeDiff;
331
-
332
- delay = delay || this.defaultDelay;
333
-
334
- var loadEvent = {
335
- url: url
336
- };
337
-
338
- self.fire('load', [loadEvent]);
339
-
340
- return $.get(loadEvent.url, null, $.proxy(function(data) {
341
- $itemContainer = $(this.itemsContainerSelector, data).eq(0);
342
- if (0 === $itemContainer.length) {
343
- $itemContainer = $(data).filter(this.itemsContainerSelector).eq(0);
344
- }
345
-
346
- if ($itemContainer) {
347
- $itemContainer.find(this.itemSelector).each(function() {
348
- items.push(this);
349
- });
350
- }
351
-
352
- self.fire('loaded', [data, items]);
353
-
354
- if (callback) {
355
- timeDiff = +new Date() - timeStart;
356
- if (timeDiff < delay) {
357
- setTimeout(function() {
358
- callback.call(self, data, items);
359
- }, delay - timeDiff);
360
- } else {
361
- callback.call(self, data, items);
362
- }
363
- }
364
- }, self), 'html');
365
- };
366
-
367
- /**
368
- * Renders items
369
- *
370
- * @param callback
371
- * @param items
372
- */
373
- this.render = function(items, callback) {
374
- var self = this,
375
- $lastItem = this.getLastItem(),
376
- count = 0;
377
-
378
- var promise = this.fire('render', [items]);
379
-
380
- promise.done(function() {
381
- $(items).hide(); // at first, hide it so we can fade it in later
382
-
383
- $lastItem.after(items);
384
-
385
- $(items).fadeIn(400, function() {
386
- // complete callback get fired for each item,
387
- // only act on the last item
388
- if (++count < items.length) {
389
- return;
390
- }
391
-
392
- self.fire('rendered', [items]);
393
-
394
- if (callback) {
395
- callback();
396
- }
397
- });
398
- });
399
- };
400
-
401
- /**
402
- * Hides the pagination
403
- */
404
- this.hidePagination = function() {
405
- if (this.paginationSelector) {
406
- $(this.paginationSelector, this.$container).hide();
407
- }
408
- };
409
-
410
- /**
411
- * Restores the pagination
412
- */
413
- this.restorePagination = function() {
414
- if (this.paginationSelector) {
415
- $(this.paginationSelector, this.$container).show();
416
- }
417
- };
418
-
419
- /**
420
- * Throttles a method
421
- *
422
- * Adopted from Ben Alman's jQuery throttle / debounce plugin
423
- *
424
- * @param callback
425
- * @param delay
426
- * @return {object}
427
- */
428
- this.throttle = function(callback, delay) {
429
- var lastExecutionTime = 0,
430
- wrapper,
431
- timerId
432
- ;
433
-
434
- wrapper = function() {
435
- var that = this,
436
- args = arguments,
437
- diff = +new Date() - lastExecutionTime;
438
-
439
- function execute() {
440
- lastExecutionTime = +new Date();
441
- callback.apply(that, args);
442
- }
443
-
444
- if (!timerId) {
445
- execute();
446
- } else {
447
- clearTimeout(timerId);
448
- }
449
-
450
- if (diff > delay) {
451
- execute();
452
- } else {
453
- timerId = setTimeout(execute, delay);
454
- }
455
- };
456
-
457
- if ($.guid) {
458
- wrapper.guid = callback.guid = callback.guid || $.guid++;
459
- }
460
-
461
- return wrapper;
462
- };
463
-
464
- /**
465
- * Fires an event with the ability to cancel further processing. This
466
- * can be achieved by returning false in a listener.
467
- *
468
- * @param event
469
- * @param args
470
- * @returns {*}
471
- */
472
- this.fire = function(event, args) {
473
- return this.listeners[event].fireWith(this, args);
474
- };
475
-
476
- return this;
477
- };
478
-
479
- /**
480
- * Initialize IAS
481
- *
482
- * Note: Should be called when the document is ready
483
- *
484
- * @public
485
- */
486
- IAS.prototype.initialize = function() {
487
- var currentScrollOffset = this.getCurrentScrollOffset(this.$scrollContainer),
488
- scrollThreshold = this.getScrollThreshold();
489
-
490
- this.hidePagination();
491
- this.bind();
492
-
493
- for (var i = 0, l = this.extensions.length; i < l; i++) {
494
- this.extensions[i].bind(this);
495
- }
496
-
497
- this.fire('ready');
498
-
499
- this.nextUrl = this.getNextUrl();
500
-
501
- // start loading next page if content is shorter than page fold
502
- if (currentScrollOffset >= scrollThreshold) {
503
- this.next();
504
- }
505
-
506
- return this;
507
- };
508
-
509
- /**
510
- * Binds IAS to DOM events
511
- *
512
- * @public
513
- */
514
- IAS.prototype.bind = function() {
515
- if (this.isBound) {
516
- return;
517
- }
518
-
519
- this.$scrollContainer.on('scroll', $.proxy(this.throttle(this.scrollHandler, 150), this));
520
-
521
- this.isBound = true;
522
- };
523
-
524
- /**
525
- * Unbinds IAS to events
526
- *
527
- * @public
528
- */
529
- IAS.prototype.unbind = function() {
530
- if (!this.isBound) {
531
- return;
532
- }
533
-
534
- this.$scrollContainer.off('scroll', this.scrollHandler);
535
-
536
- this.isBound = false;
537
- };
538
-
539
- /**
540
- * Destroys IAS instance
541
- *
542
- * @public
543
- */
544
- IAS.prototype.destroy = function() {
545
- this.unbind();
546
- };
547
-
548
- /**
549
- * Registers an eventListener
550
- *
551
- * Note: chainable
552
- *
553
- * @public
554
- * @returns IAS
555
- */
556
- IAS.prototype.on = function(event, callback, priority) {
557
- if (typeof this.listeners[event] == 'undefined') {
558
- throw new Error('There is no event called "' + event + '"');
559
- }
560
-
561
- priority = priority || 0;
562
-
563
- this.listeners[event].add($.proxy(callback, this), priority);
564
-
565
- return this;
566
- };
567
-
568
- /**
569
- * Registers an eventListener which only gets
570
- * fired once.
571
- *
572
- * Note: chainable
573
- *
574
- * @public
575
- * @returns IAS
576
- */
577
- IAS.prototype.one = function(event, callback) {
578
- var self = this;
579
-
580
- var remover = function() {
581
- self.off(event, callback);
582
- self.off(event, remover);
583
- };
584
-
585
- this.on(event, callback);
586
- this.on(event, remover);
587
-
588
- return this;
589
- };
590
-
591
- /**
592
- * Removes an eventListener
593
- *
594
- * Note: chainable
595
- *
596
- * @public
597
- * @returns IAS
598
- */
599
- IAS.prototype.off = function(event, callback) {
600
- if (typeof this.listeners[event] == 'undefined') {
601
- throw new Error('There is no event called "' + event + '"');
602
- }
603
-
604
- this.listeners[event].remove(callback);
605
-
606
- return this;
607
- };
608
-
609
- /**
610
- * Load the next page
611
- *
612
- * @public
613
- */
614
- IAS.prototype.next = function() {
615
- var url = this.nextUrl,
616
- self = this;
617
-
618
- this.unbind();
619
-
620
- if (!url) {
621
- this.fire('noneLeft', [this.getLastItem()]);
622
- this.listeners['noneLeft'].disable(); // disable it so it only fires once
623
-
624
- self.bind();
625
-
626
- return false;
627
- }
628
-
629
- var promise = this.fire('next', [url]);
630
-
631
- promise.done(function() {
632
- self.load(url, function(data, items) {
633
- self.render(items, function() {
634
- self.nextUrl = self.getNextUrl(data);
635
-
636
- self.bind();
637
- });
638
- });
639
- });
640
-
641
- promise.fail(function() {
642
- self.bind();
643
- });
644
-
645
- return true;
646
- };
647
-
648
- /**
649
- * Adds an extension
650
- *
651
- * @public
652
- */
653
- IAS.prototype.extension = function(extension) {
654
- if (typeof extension['bind'] == 'undefined') {
655
- throw new Error('Extension doesn\'t have required method "bind"');
656
- }
657
-
658
- if (typeof extension['initialize'] != 'undefined') {
659
- extension.initialize(this);
660
- }
661
-
662
- this.extensions.push(extension);
663
-
664
- return this;
665
- };
666
-
667
- /**
668
- * Shortcut. Sets the window as scroll container.
669
- *
670
- * @public
671
- * @param option
672
- * @returns {*}
673
- */
674
- $.ias = function(option) {
675
- var $window = $(window);
676
-
677
- return $window.ias.apply($window, arguments);
678
- };
679
-
680
- /**
681
- * jQuery plugin initialization
682
- *
683
- * @public
684
- * @param option
685
- * @returns {*} the last IAS instance will be returned
686
- */
687
- $.fn.ias = function(option) {
688
- var args = Array.prototype.slice.call(arguments);
689
- var retval = this;
690
-
691
- this.each(function() {
692
- var $this = $(this),
693
- data = $this.data('ias'),
694
- options = $.extend({}, $.fn.ias.defaults, $this.data(), typeof option == 'object' && option)
695
- ;
696
-
697
- // set a new instance as data
698
- if (!data) {
699
- $this.data('ias', (data = new IAS($this, options)));
700
-
701
- $(document).ready($.proxy(data.initialize, data));
702
- }
703
-
704
- // when the plugin is called with a method
705
- if (typeof option === 'string') {
706
- if (typeof data[option] !== 'function') {
707
- throw new Error('There is no method called "' + option + '"');
708
- }
709
-
710
- args.shift(); // remove first argument ('option')
711
- data[option].apply(data, args);
712
-
713
- if (option === 'destroy') {
714
- $this.data('ias', null);
715
- }
716
- }
717
-
718
- retval = $this.data('ias');
719
- });
720
-
721
- return retval;
722
- };
723
-
724
- /**
725
- * Plugin defaults
726
- *
727
- * @public
728
- * @type {object}
729
- */
730
- $.fn.ias.defaults = {
731
- item: '.item',
732
- container: '.listing',
733
- next: '.next',
734
- pagination: false,
735
- delay: 600,
736
- negativeMargin: 10
737
- };
738
- })(jQuery);
739
- /**
740
- * IAS History Extension
741
- * An IAS extension to enable browser history
742
- * http://infiniteajaxscroll.com
743
- *
744
- * This file is part of the Infinite AJAX Scroll package
745
- *
746
- * Copyright 2014 Webcreate (Jeroen Fiege)
747
- */
748
-
749
- var IASHistoryExtension = function (options) {
750
- options = jQuery.extend({}, this.defaults, options);
751
-
752
- this.ias = null;
753
- this.prevSelector = options.prev;
754
- this.prevUrl = null;
755
- this.listeners = {
756
- prev: new IASCallbacks()
757
- };
758
-
759
- /**
760
- * @private
761
- * @param pageNum
762
- * @param scrollOffset
763
- * @param url
764
- */
765
- this.onPageChange = function (pageNum, scrollOffset, url) {
766
- var state = {};
767
-
768
- if (!window.history || !window.history.replaceState) {
769
- return;
770
- }
771
-
772
- history.replaceState(state, document.title, url);
773
- };
774
-
775
- /**
776
- * @private
777
- * @param currentScrollOffset
778
- * @param scrollThreshold
779
- */
780
- this.onScroll = function (currentScrollOffset, scrollThreshold) {
781
- var firstItemScrollThreshold = this.getScrollThresholdFirstItem();
782
-
783
- if (!this.prevUrl) {
784
- return;
785
- }
786
-
787
- currentScrollOffset -= this.ias.$scrollContainer.height();
788
-
789
- if (currentScrollOffset <= firstItemScrollThreshold) {
790
- this.prev();
791
- }
792
- };
793
-
794
- /**
795
- * Returns the url for the next page
796
- *
797
- * @private
798
- */
799
- this.getPrevUrl = function (container) {
800
- if (!container) {
801
- container = this.ias.$container;
802
- }
803
-
804
- // always take the last matching item
805
- return jQuery(this.prevSelector, container).last().attr('href');
806
- };
807
-
808
- /**
809
- * Returns scroll threshold. This threshold marks the line from where
810
- * IAS should start loading the next page.
811
- *
812
- * @private
813
- * @return {number}
814
- */
815
- this.getScrollThresholdFirstItem = function () {
816
- var $firstElement;
817
-
818
- $firstElement = this.ias.getFirstItem();
819
-
820
- // if the don't have a first element, the DOM might not have been loaded,
821
- // or the selector is invalid
822
- if (0 === $firstElement.size()) {
823
- return -1;
824
- }
825
-
826
- return ($firstElement.offset().top);
827
- };
828
-
829
- /**
830
- * Renders items
831
- *
832
- * @private
833
- * @param items
834
- * @param callback
835
- */
836
- this.renderBefore = function (items, callback) {
837
- var ias = this.ias,
838
- $firstItem = ias.getFirstItem(),
839
- count = 0;
840
-
841
- ias.fire('render', [items]);
842
-
843
- jQuery(items).hide(); // at first, hide it so we can fade it in later
844
-
845
- $firstItem.before(items);
846
-
847
- jQuery(items).fadeIn(400, function () {
848
- if (++count < items.length) {
849
- return;
850
- }
851
-
852
- ias.fire('rendered', [items]);
853
-
854
- if (callback) {
855
- callback();
856
- }
857
- });
858
- };
859
-
860
- return this;
861
- };
862
-
863
- /**
864
- * @public
865
- */
866
- IASHistoryExtension.prototype.initialize = function (ias) {
867
- var self = this;
868
-
869
- this.ias = ias;
870
-
871
- // expose the extensions listeners
872
- jQuery.extend(ias.listeners, this.listeners);
873
-
874
- // expose prev method
875
- ias.prev = function() {
876
- return self.prev();
877
- };
878
-
879
- this.prevUrl = this.getPrevUrl();
880
- };
881
-
882
- /**
883
- * Bind to events
884
- *
885
- * @public
886
- * @param ias
887
- */
888
- IASHistoryExtension.prototype.bind = function (ias) {
889
- var self = this;
890
-
891
- ias.on('pageChange', jQuery.proxy(this.onPageChange, this));
892
- ias.on('scroll', jQuery.proxy(this.onScroll, this));
893
- ias.on('ready', function () {
894
- var currentScrollOffset = ias.getCurrentScrollOffset(ias.$scrollContainer),
895
- firstItemScrollThreshold = self.getScrollThresholdFirstItem();
896
-
897
- currentScrollOffset -= ias.$scrollContainer.height();
898
-
899
- if (currentScrollOffset <= firstItemScrollThreshold) {
900
- self.prev();
901
- }
902
- });
903
- };
904
-
905
- /**
906
- * Load the prev page
907
- *
908
- * @public
909
- */
910
- IASHistoryExtension.prototype.prev = function () {
911
- var url = this.prevUrl,
912
- self = this,
913
- ias = this.ias;
914
-
915
- if (!url) {
916
- return false;
917
- }
918
-
919
- ias.unbind();
920
-
921
- var promise = ias.fire('prev', [url]);
922
-
923
- promise.done(function () {
924
- ias.load(url, function (data, items) {
925
- self.renderBefore(items, function () {
926
- self.prevUrl = self.getPrevUrl(data);
927
-
928
- ias.bind();
929
-
930
- if (self.prevUrl) {
931
- self.prev();
932
- }
933
- });
934
- });
935
- });
936
-
937
- promise.fail(function () {
938
- ias.bind();
939
- });
940
-
941
- return true;
942
- };
943
-
944
- /**
945
- * @public
946
- */
947
- IASHistoryExtension.prototype.defaults = {
948
- prev: ".prev"
949
- };
950
- /**
951
- * IAS None Left Extension
952
- * An IAS extension to show a message when there are no more pages te load
953
- * http://infiniteajaxscroll.com
954
- *
955
- * This file is part of the Infinite AJAX Scroll package
956
- *
957
- * Copyright 2014 Webcreate (Jeroen Fiege)
958
- */
959
-
960
- var IASNoneLeftExtension = function(options) {
961
- options = jQuery.extend({}, this.defaults, options);
962
-
963
- this.ias = null;
964
- this.uid = (new Date()).getTime();
965
- this.html = (options.html).replace('{text}', options.text);
966
-
967
- /**
968
- * Shows none left message
969
- */
970
- this.showNoneLeft = function() {
971
- var $element = jQuery(this.html).attr('id', 'ias_noneleft_' + this.uid),
972
- $lastItem = this.ias.getLastItem();
973
-
974
- $lastItem.after($element);
975
- $element.fadeIn();
976
- };
977
-
978
- return this;
979
- };
980
-
981
- /**
982
- * @public
983
- */
984
- IASNoneLeftExtension.prototype.bind = function(ias) {
985
- this.ias = ias;
986
-
987
- ias.on('noneLeft', jQuery.proxy(this.showNoneLeft, this));
988
- };
989
-
990
- /**
991
- * @public
992
- */
993
- IASNoneLeftExtension.prototype.defaults = {
994
- text: 'You reached the end.',
995
- html: '<div class="ias-noneleft" style="text-align: center;">{text}</div>'
996
- };
997
- /**
998
- * IAS Paging Extension
999
- * An IAS extension providing additional events
1000
- * http://infiniteajaxscroll.com
1001
- *
1002
- * This file is part of the Infinite AJAX Scroll package
1003
- *
1004
- * Copyright 2014 Webcreate (Jeroen Fiege)
1005
- */
1006
-
1007
- var IASPagingExtension = function() {
1008
- this.ias = null;
1009
- this.pagebreaks = [[0, document.location.toString()]];
1010
- this.lastPageNum = 1;
1011
- this.enabled = true;
1012
- this.listeners = {
1013
- pageChange: new IASCallbacks()
1014
- };
1015
-
1016
- /**
1017
- * Fires pageChange event
1018
- *
1019
- * @param currentScrollOffset
1020
- * @param scrollThreshold
1021
- */
1022
- this.onScroll = function(currentScrollOffset, scrollThreshold) {
1023
- if (!this.enabled) {
1024
- return;
1025
- }
1026
-
1027
- var ias = this.ias,
1028
- currentPageNum = this.getCurrentPageNum(currentScrollOffset),
1029
- currentPagebreak = this.getCurrentPagebreak(currentScrollOffset),
1030
- urlPage;
1031
-
1032
- if (this.lastPageNum !== currentPageNum) {
1033
- urlPage = currentPagebreak[1];
1034
-
1035
- ias.fire('pageChange', [currentPageNum, currentScrollOffset, urlPage]);
1036
- }
1037
-
1038
- this.lastPageNum = currentPageNum;
1039
- };
1040
-
1041
- /**
1042
- * Keeps track of pagebreaks
1043
- *
1044
- * @param url
1045
- */
1046
- this.onNext = function(url) {
1047
- var currentScrollOffset = this.ias.getCurrentScrollOffset(this.ias.$scrollContainer);
1048
-
1049
- this.pagebreaks.push([currentScrollOffset, url]);
1050
-
1051
- // trigger pageChange and update lastPageNum
1052
- var currentPageNum = this.getCurrentPageNum(currentScrollOffset) + 1;
1053
-
1054
- this.ias.fire('pageChange', [currentPageNum, currentScrollOffset, url]);
1055
-
1056
- this.lastPageNum = currentPageNum;
1057
- };
1058
-
1059
- /**
1060
- * Keeps track of pagebreaks
1061
- *
1062
- * @param url
1063
- */
1064
- this.onPrev = function(url) {
1065
- var self = this,
1066
- ias = self.ias,
1067
- currentScrollOffset = ias.getCurrentScrollOffset(ias.$scrollContainer),
1068
- prevCurrentScrollOffset = currentScrollOffset - ias.$scrollContainer.height(),
1069
- $firstItem = ias.getFirstItem();
1070
-
1071
- this.enabled = false;
1072
-
1073
- this.pagebreaks.unshift([0, url]);
1074
-
1075
- ias.one('rendered', function() {
1076
- // update pagebreaks
1077
- for (var i = 1, l = self.pagebreaks.length; i < l; i++) {
1078
- self.pagebreaks[i][0] = self.pagebreaks[i][0] + $firstItem.offset().top;
1079
- }
1080
-
1081
- // trigger pageChange and update lastPageNum
1082
- var currentPageNum = self.getCurrentPageNum(prevCurrentScrollOffset) + 1;
1083
-
1084
- ias.fire('pageChange', [currentPageNum, prevCurrentScrollOffset, url]);
1085
-
1086
- self.lastPageNum = currentPageNum;
1087
-
1088
- self.enabled = true;
1089
- });
1090
- };
1091
-
1092
- return this;
1093
- };
1094
-
1095
- /**
1096
- * @public
1097
- */
1098
- IASPagingExtension.prototype.initialize = function(ias) {
1099
- this.ias = ias;
1100
-
1101
- // expose the extensions listeners
1102
- jQuery.extend(ias.listeners, this.listeners);
1103
- };
1104
-
1105
- /**
1106
- * @public
1107
- */
1108
- IASPagingExtension.prototype.bind = function(ias) {
1109
- try {
1110
- ias.on('prev', jQuery.proxy(this.onPrev, this), this.priority);
1111
- } catch (exception) {}
1112
-
1113
- ias.on('next', jQuery.proxy(this.onNext, this), this.priority);
1114
- ias.on('scroll', jQuery.proxy(this.onScroll, this), this.priority);
1115
- };
1116
-
1117
- /**
1118
- * Returns current page number based on scroll offset
1119
- *
1120
- * @param {number} scrollOffset
1121
- * @returns {number}
1122
- */
1123
- IASPagingExtension.prototype.getCurrentPageNum = function(scrollOffset) {
1124
- for (var i = (this.pagebreaks.length - 1); i > 0; i--) {
1125
- if (scrollOffset > this.pagebreaks[i][0]) {
1126
- return i + 1;
1127
- }
1128
- }
1129
-
1130
- return 1;
1131
- };
1132
-
1133
- /**
1134
- * Returns current pagebreak information based on scroll offset
1135
- *
1136
- * @param {number} scrollOffset
1137
- * @returns {number}|null
1138
- */
1139
- IASPagingExtension.prototype.getCurrentPagebreak = function(scrollOffset) {
1140
- for (var i = (this.pagebreaks.length - 1); i >= 0; i--) {
1141
- if (scrollOffset > this.pagebreaks[i][0]) {
1142
- return this.pagebreaks[i];
1143
- }
1144
- }
1145
-
1146
- return null;
1147
- };
1148
-
1149
- /**
1150
- * @public
1151
- * @type {number}
1152
- */
1153
- IASPagingExtension.prototype.priority = 500;
1154
- /**
1155
- * IAS Spinner Extension
1156
- * An IAS extension to show a spinner when loading
1157
- * http://infiniteajaxscroll.com
1158
- *
1159
- * This file is part of the Infinite AJAX Scroll package
1160
- *
1161
- * Copyright 2014 Webcreate (Jeroen Fiege)
1162
- */
1163
-
1164
- var IASSpinnerExtension = function(options) {
1165
- options = jQuery.extend({}, this.defaults, options);
1166
-
1167
- this.ias = null;
1168
- this.uid = new Date().getTime();
1169
- this.src = options.src;
1170
- this.html = (options.html).replace('{src}', this.src);
1171
-
1172
- /**
1173
- * Shows spinner
1174
- */
1175
- this.showSpinner = function() {
1176
- var $spinner = this.getSpinner() || this.createSpinner(),
1177
- $lastItem = this.ias.getLastItem();
1178
-
1179
- $lastItem.after($spinner);
1180
- $spinner.fadeIn();
1181
- };
1182
-
1183
- /**
1184
- * Shows spinner
1185
- */
1186
- this.showSpinnerBefore = function() {
1187
- var $spinner = this.getSpinner() || this.createSpinner(),
1188
- $firstItem = this.ias.getFirstItem();
1189
-
1190
- $firstItem.before($spinner);
1191
- $spinner.fadeIn();
1192
- };
1193
-
1194
- /**
1195
- * Removes spinner
1196
- */
1197
- this.removeSpinner = function() {
1198
- if (this.hasSpinner()) {
1199
- this.getSpinner().remove();
1200
- }
1201
- };
1202
-
1203
- /**
1204
- * @returns {jQuery|boolean}
1205
- */
1206
- this.getSpinner = function() {
1207
- var $spinner = jQuery('#ias_spinner_' + this.uid);
1208
-
1209
- if ($spinner.size() > 0) {
1210
- return $spinner;
1211
- }
1212
-
1213
- return false;
1214
- };
1215
-
1216
- /**
1217
- * @returns {boolean}
1218
- */
1219
- this.hasSpinner = function() {
1220
- var $spinner = jQuery('#ias_spinner_' + this.uid);
1221
-
1222
- return ($spinner.size() > 0);
1223
- };
1224
-
1225
- /**
1226
- * @returns {jQuery}
1227
- */
1228
- this.createSpinner = function() {
1229
- var $spinner = jQuery(this.html).attr('id', 'ias_spinner_' + this.uid);
1230
-
1231
- $spinner.hide();
1232
-
1233
- return $spinner;
1234
- };
1235
-
1236
- return this;
1237
- };
1238
-
1239
- /**
1240
- * @public
1241
- */
1242
- IASSpinnerExtension.prototype.bind = function(ias) {
1243
- this.ias = ias;
1244
-
1245
- ias.on('next', jQuery.proxy(this.showSpinner, this));
1246
-
1247
- try {
1248
- ias.on('prev', jQuery.proxy(this.showSpinnerBefore, this));
1249
- } catch (exception) {}
1250
-
1251
- ias.on('render', jQuery.proxy(this.removeSpinner, this));
1252
- };
1253
-
1254
- /**
1255
- * @public
1256
- */
1257
- IASSpinnerExtension.prototype.defaults = {
1258
- src: 'data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==',
1259
- html: '<div class="ias-spinner" style="text-align: center;"><img src="{src}"/></div>'
1260
- };
1261
- /**
1262
- * IAS Trigger Extension
1263
- * An IAS extension to show a trigger link to load the next page
1264
- * http://infiniteajaxscroll.com
1265
- *
1266
- * This file is part of the Infinite AJAX Scroll package
1267
- *
1268
- * Copyright 2014 Webcreate (Jeroen Fiege)
1269
- */
1270
-
1271
- var IASTriggerExtension = function(options) {
1272
- options = jQuery.extend({}, this.defaults, options);
1273
-
1274
- this.ias = null;
1275
- this.html = (options.html).replace('{text}', options.text);
1276
- this.htmlPrev = (options.htmlPrev).replace('{text}', options.textPrev);
1277
- this.enabled = true;
1278
- this.count = 0;
1279
- this.offset = options.offset;
1280
- this.$triggerNext = null;
1281
- this.$triggerPrev = null;
1282
-
1283
- /**
1284
- * Shows trigger for next page
1285
- */
1286
- this.showTriggerNext = function() {
1287
- if (!this.enabled) {
1288
- return true;
1289
- }
1290
-
1291
- if (false === this.offset || ++this.count < this.offset) {
1292
- return true;
1293
- }
1294
-
1295
- var $trigger = this.$triggerNext || (this.$triggerNext = this.createTrigger(this.next, this.html));
1296
- var $lastItem = this.ias.getLastItem();
1297
-
1298
- $lastItem.after($trigger);
1299
- $trigger.fadeIn();
1300
-
1301
- return false;
1302
- };
1303
-
1304
- /**
1305
- * Shows trigger for previous page
1306
- */
1307
- this.showTriggerPrev = function() {
1308
- if (!this.enabled) {
1309
- return true;
1310
- }
1311
-
1312
- var $trigger = this.$triggerPrev || (this.$triggerPrev = this.createTrigger(this.prev, this.htmlPrev));
1313
- var $firstItem = this.ias.getFirstItem();
1314
-
1315
- $firstItem.before($trigger);
1316
- $trigger.fadeIn();
1317
-
1318
- return false;
1319
- };
1320
-
1321
- /**
1322
- * @param clickCallback
1323
- * @returns {*|jQuery}
1324
- * @param {string} html
1325
- */
1326
- this.createTrigger = function(clickCallback, html) {
1327
- var uid = (new Date()).getTime(),
1328
- $trigger;
1329
-
1330
- html = html || this.html;
1331
- $trigger = jQuery(html).attr('id', 'ias_trigger_' + uid);
1332
-
1333
- $trigger.hide();
1334
- $trigger.on('click', jQuery.proxy(clickCallback, this));
1335
-
1336
- return $trigger;
1337
- };
1338
-
1339
- return this;
1340
- };
1341
-
1342
- /**
1343
- * @public
1344
- * @param {object} ias
1345
- */
1346
- IASTriggerExtension.prototype.bind = function(ias) {
1347
- var self = this;
1348
-
1349
- this.ias = ias;
1350
-
1351
- try {
1352
- ias.on('prev', jQuery.proxy(this.showTriggerPrev, this), this.priority);
1353
- } catch (exception) {}
1354
-
1355
- ias.on('next', jQuery.proxy(this.showTriggerNext, this), this.priority);
1356
- ias.on('rendered', function () { self.enabled = true; }, this.priority);
1357
- };
1358
-
1359
- /**
1360
- * @public
1361
- */
1362
- IASTriggerExtension.prototype.next = function() {
1363
- this.enabled = false;
1364
- this.ias.unbind();
1365
-
1366
- if (this.$triggerNext) {
1367
- this.$triggerNext.remove();
1368
- this.$triggerNext = null;
1369
- }
1370
-
1371
- this.ias.next();
1372
- };
1373
-
1374
- /**
1375
- * @public
1376
- */
1377
- IASTriggerExtension.prototype.prev = function() {
1378
- this.enabled = false;
1379
- this.ias.unbind();
1380
-
1381
- if (this.$triggerPrev) {
1382
- this.$triggerPrev.remove();
1383
- this.$triggerPrev = null;
1384
- }
1385
-
1386
- this.ias.prev();
1387
- };
1388
-
1389
- /**
1390
- * @public
1391
- */
1392
- IASTriggerExtension.prototype.defaults = {
1393
- text: 'Load more items',
1394
- html: '<div class="ias-trigger ias-trigger-next" style="text-align: center; cursor: pointer;"><a>{text}</a></div>',
1395
- textPrev: 'Load previous items',
1396
- htmlPrev: '<div class="ias-trigger ias-trigger-prev" style="text-align: center; cursor: pointer;"><a>{text}</a></div>',
1397
- offset: 0
1398
- };
1399
-
1400
- /**
1401
- * @public
1402
- * @type {number}
1403
- */
1404
- IASTriggerExtension.prototype.priority = 1000;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Strategery_InfiniteScroll2</name>
4
- <version>3.5.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/afl-3.0.php">Academic Free License (AFL 3.0)</license>
7
  <channel>community</channel>
@@ -30,11 +30,12 @@ User: demo&lt;br /&gt;&#xD;
30
  Password: demo1234&lt;/p&gt;&#xD;
31
  &lt;h2&gt;Reporting Issues / Support&lt;/h2&gt;&#xD;
32
  &lt;p&gt;To report issues or request support please visit our &lt;a href="https://github.com/Strategery-Inc/Magento-InfiniteScroll/issues"&gt;Github repository.&lt;/a&gt;&lt;/p&gt;</description>
33
- <notes>- Fixed items height implementing window delayed-resize trigger.</notes>
 
34
  <authors><author><name>Strategery</name><user>MAG000343402</user><email>contact@usestrategery.com</email></author><author><name>Damian A. Pastorini</name><user>MAG002087848</user><email>damian.pastorini@dwdeveloper.com</email></author></authors>
35
- <date>2016-08-08</date>
36
- <time>15:42:40</time>
37
- <contents><target name="mageetc"><dir name="modules"><file name="Strategery_Infinitescroll.xml" hash="4acaec55ca53dfe149334e9c6913a84a"/></dir></target><target name="magecommunity"><dir name="Strategery"><dir name="Infinitescroll"><dir name="Block"><file name="Init.php" hash="0fb8599150bdb9796c2c693719ec67f3"/></dir><dir name="Helper"><file name="Data.php" hash="120e9ec48726ee80f1d5aad19365867b"/></dir><dir name="Model"><dir name="Admin"><file name="Feed.php" hash="d03830b948d2a00c6115e5910af51f2d"/></dir><file name="Observer.php" hash="3fa797c12ed2d363f060a807b7888521"/></dir><dir name="etc"><file name="adminhtml.xml" hash="a84c98f8f3307a3360bf783137c3aeeb"/><file name="config.xml" hash="dfe5aab7ad94ca46e239d4655297e1c3"/><file name="system.xml" hash="d355ca6528b525bc4b9820b0d0860395"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="strategery-infinitescroll.xml" hash="94478e1d7ad26830cbcead5dd9d7d731"/></dir><dir name="template"><dir name="strategery"><dir name="deny"><file name="login.phtml" hash="5ee61b5d7aeba9dce8f7c044f8634c77"/></dir><dir name="infinitescroll"><file name="init.phtml" hash="43e5ed40ee133d009a9bf5b595850cca"/><file name="swatches.phtml" hash="ac9cba136244abc31d3a4ad244799506"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="jquery"><dir name="infinitescroll"><file name="jquery-ias.js" hash="72522152b90a9502da008600b068a31a"/><file name="jquery-ias.min.js" hash="cfe10e85a71ad6610334c946d03c1088"/><file name="jquery.easing-1.3.pack.js" hash="83e56485c52e15ff74e1c02615af14af"/><file name="jquery.ui.totop.min.js" hash="c0c43bf13983cd65ab4584b479d2a2d9"/></dir><file name="jquery.1.10.2.min.js" hash="081a630addf862ccdaa440a5705d11af"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="infinitescroll"><file name="ias_config.js" hash="584a12af9d9cb2fbef5de7e73a6df4bc"/></dir></dir></dir></dir></dir></target></contents>
38
  <compatible/>
39
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
40
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Strategery_InfiniteScroll2</name>
4
+ <version>3.5.2</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/afl-3.0.php">Academic Free License (AFL 3.0)</license>
7
  <channel>community</channel>
30
  Password: demo1234&lt;/p&gt;&#xD;
31
  &lt;h2&gt;Reporting Issues / Support&lt;/h2&gt;&#xD;
32
  &lt;p&gt;To report issues or request support please visit our &lt;a href="https://github.com/Strategery-Inc/Magento-InfiniteScroll/issues"&gt;Github repository.&lt;/a&gt;&lt;/p&gt;</description>
33
+ <notes>- Changed default configuration to prevent issues with jQuery in RWD/default theme.&#xD;
34
+ - Added $j validation to prevent issues with other themes.</notes>
35
  <authors><author><name>Strategery</name><user>MAG000343402</user><email>contact@usestrategery.com</email></author><author><name>Damian A. Pastorini</name><user>MAG002087848</user><email>damian.pastorini@dwdeveloper.com</email></author></authors>
36
+ <date>2016-08-18</date>
37
+ <time>13:48:49</time>
38
+ <contents><target name="mageetc"><dir name="modules"><file name="Strategery_Infinitescroll.xml" hash="4acaec55ca53dfe149334e9c6913a84a"/></dir></target><target name="magecommunity"><dir name="Strategery"><dir name="Infinitescroll"><dir name="Block"><file name="Init.php" hash="0fb8599150bdb9796c2c693719ec67f3"/></dir><dir name="Helper"><file name="Data.php" hash="120e9ec48726ee80f1d5aad19365867b"/></dir><dir name="Model"><dir name="Admin"><file name="Feed.php" hash="d03830b948d2a00c6115e5910af51f2d"/></dir><file name="Observer.php" hash="3fa797c12ed2d363f060a807b7888521"/></dir><dir name="etc"><file name="adminhtml.xml" hash="a84c98f8f3307a3360bf783137c3aeeb"/><file name="config.xml" hash="f5206324f7b85669bbb93850be1fb5a1"/><file name="system.xml" hash="d355ca6528b525bc4b9820b0d0860395"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="strategery-infinitescroll.xml" hash="94478e1d7ad26830cbcead5dd9d7d731"/></dir><dir name="template"><dir name="strategery"><dir name="infinitescroll"><file name="init.phtml" hash="f6f61ab6a5dc87875e916353c71bde1a"/><file name="swatches.phtml" hash="ac9cba136244abc31d3a4ad244799506"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="jquery"><dir name="infinitescroll"><file name="jquery-ias.min.js" hash="cfe10e85a71ad6610334c946d03c1088"/><file name="jquery.easing-1.3.pack.js" hash="83e56485c52e15ff74e1c02615af14af"/><file name="jquery.ui.totop.min.js" hash="c0c43bf13983cd65ab4584b479d2a2d9"/></dir><file name="jquery.1.10.2.min.js" hash="081a630addf862ccdaa440a5705d11af"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="infinitescroll"><file name="ias_config.js" hash="584a12af9d9cb2fbef5de7e73a6df4bc"/></dir></dir></dir></dir></dir></target></contents>
39
  <compatible/>
40
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
41
  </package>