├── Helper
└── Data.php
├── README.md
├── composer.json
├── etc
├── acl.xml
├── adminhtml
│ └── system.xml
├── config.xml
└── module.xml
├── registration.php
└── view
└── frontend
├── layout
├── catalog_category_layered.xml
├── catalog_category_view.xml
├── catalogsearch_advanced_result.xml
├── catalogsearch_result_index.xml
└── tag_product_list.xml
├── templates
└── ajaxscroll
│ └── ajaxscroll.phtml
└── web
├── css
└── ajaxscroll
│ └── ajaxscroll.css
├── js
└── ajaxscroll
│ ├── easing.js
│ ├── images
│ └── loader.gif
│ ├── jquery-1.7.2.min.js
│ ├── jquery-noconflict.js
│ ├── jquery.ajaxscroll.min.bk.js
│ ├── jquery.ajaxscroll.min.js
│ ├── jquery.ajaxscroll.minbk.js
│ ├── jquery.ui.totop.js
│ └── jquery.ui.totop.min.js
└── media
└── ajaxscroll
└── default
├── loader.gif
├── loading_bar.gif
├── ui.totop.black.png
├── ui.totop.blue.png
└── ui.totop.white.png
/Helper/Data.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/etc/adminhtml/system.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
41 |
42 |
--------------------------------------------------------------------------------
/etc/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 1
7 | 1
8 | default/ui.totop.black.png
9 | default/loading_bar.gif
10 | default/loader.gif
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/etc/module.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/registration.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/view/frontend/layout/catalog_category_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/view/frontend/layout/catalogsearch_advanced_result.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/view/frontend/layout/catalogsearch_result_index.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/view/frontend/layout/tag_product_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/view/frontend/templates/ajaxscroll/ajaxscroll.phtml:
--------------------------------------------------------------------------------
1 | get('Magento\Framework\App\Config\ScopeConfigInterface')->isSetFlag('ajaxscroll/general/enabled')): ?>
2 | get('Magento\Framework\UrlInterface')->getBaseUrl().'pub/media/emizen/ajaxscroll/'.\Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('ajaxscroll/general/topb_icon');
4 | $loading_bar = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\UrlInterface')->getBaseUrl().'pub/media/emizen/ajaxscroll/'.\Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('ajaxscroll/general/loading_icon');
5 | $loading_img = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\UrlInterface')->getBaseUrl().'pub/media/emizen/ajaxscroll/'.\Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('ajaxscroll/general/loading_img');
6 | ?>
7 |
17 | get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('catalog/frontend/list_mode');
20 | $grid_per_page = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('catalog/frontend/grid_per_page');
21 | $list_per_page = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('catalog/frontend/list_per_page');
22 | if ($productListMode == 'grid-list'){
23 | $productListMode = 'grid';
24 | $per_page = $grid_per_page;
25 | }elseif($productListMode == 'list-grid'){
26 | $productListMode = 'list';
27 | $per_page = $list_per_page;
28 | }
29 | // Check if this setting is overwritten by the user
30 | if ($this->getRequest()->getParam('mode')) {
31 | if($this->getRequest()->getParam('mode') == 'grid'){
32 | $productListMode = 'grid';
33 | $per_page = $grid_per_page;
34 | }else{
35 | $productListMode = 'list';
36 | $per_page = $list_per_page;
37 | }
38 | }
39 | ?>
40 | get('Magento\Framework\App\Config\ScopeConfigInterface')->getValue('ajaxscroll/general/enabled_top')){ ?>
41 |
48 |
49 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/view/frontend/web/css/ajaxscroll/ajaxscroll.css:
--------------------------------------------------------------------------------
1 | @CHARSET "UTF-8";
2 |
3 | .ajaxscroll_loader {
4 | text-align:center;
5 | margin: 5px 0;
6 | }
7 | #toTop {
8 | display:none;
9 | text-decoration:none;
10 | position:fixed;
11 | bottom:10px;
12 | right:10px;
13 | overflow:hidden;
14 | width:51px;
15 | height:51px;
16 | border:none;
17 | text-indent:100%;
18 | z-index: 999;
19 | /* background:url(../img/ui.totop.png) no-repeat left top; */
20 | }
21 |
22 | #toTopHover {
23 | /* background:url(../img/ui.totop.png) no-repeat left -51px; */
24 | width:51px;
25 | height:51px;
26 | display:block;
27 | overflow:hidden;
28 | float:left;
29 | opacity: 0;
30 | -moz-opacity: 0;
31 | filter:alpha(opacity=0);
32 | }
33 |
34 | #toTop:active, #toTop:focus {
35 | outline:none;
36 | }
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/easing.js:
--------------------------------------------------------------------------------
1 | /*
2 | * sh EasIng v1.1.2 - http://gsgd.co.uk/sandbox/sh.easIng.php
3 | *
4 | * Uses the built In easIng capabilities added In sh 1.1
5 | * to offer multiple easIng options
6 | *
7 | * Copyright (c) 2007 George Smith
8 | * Licensed under the MIT License:
9 | * http://www.opensource.org/licenses/mit-license.php
10 | */
11 |
12 | // t: current time, b: begInnIng value, c: change In value, d: duration
13 |
14 | sh.extend( sh.easing,
15 | {
16 | easeInQuad: function (x, t, b, c, d) {
17 | return c*(t/=d)*t + b;
18 | },
19 | easeOutQuad: function (x, t, b, c, d) {
20 | return -c *(t/=d)*(t-2) + b;
21 | },
22 | easeInOutQuad: function (x, t, b, c, d) {
23 | if ((t/=d/2) < 1) return c/2*t*t + b;
24 | return -c/2 * ((--t)*(t-2) - 1) + b;
25 | },
26 | easeInCubic: function (x, t, b, c, d) {
27 | return c*(t/=d)*t*t + b;
28 | },
29 | easeOutCubic: function (x, t, b, c, d) {
30 | return c*((t=t/d-1)*t*t + 1) + b;
31 | },
32 | easeInOutCubic: function (x, t, b, c, d) {
33 | if ((t/=d/2) < 1) return c/2*t*t*t + b;
34 | return c/2*((t-=2)*t*t + 2) + b;
35 | },
36 | easeInQuart: function (x, t, b, c, d) {
37 | return c*(t/=d)*t*t*t + b;
38 | },
39 | easeOutQuart: function (x, t, b, c, d) {
40 | return -c * ((t=t/d-1)*t*t*t - 1) + b;
41 | },
42 | easeInOutQuart: function (x, t, b, c, d) {
43 | if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
44 | return -c/2 * ((t-=2)*t*t*t - 2) + b;
45 | },
46 | easeInQuint: function (x, t, b, c, d) {
47 | return c*(t/=d)*t*t*t*t + b;
48 | },
49 | easeOutQuint: function (x, t, b, c, d) {
50 | return c*((t=t/d-1)*t*t*t*t + 1) + b;
51 | },
52 | easeInOutQuint: function (x, t, b, c, d) {
53 | if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
54 | return c/2*((t-=2)*t*t*t*t + 2) + b;
55 | },
56 | easeInSine: function (x, t, b, c, d) {
57 | return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
58 | },
59 | easeOutSine: function (x, t, b, c, d) {
60 | return c * Math.sin(t/d * (Math.PI/2)) + b;
61 | },
62 | easeInOutSine: function (x, t, b, c, d) {
63 | return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
64 | },
65 | easeInExpo: function (x, t, b, c, d) {
66 | return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
67 | },
68 | easeOutExpo: function (x, t, b, c, d) {
69 | return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
70 | },
71 | easeInOutExpo: function (x, t, b, c, d) {
72 | if (t==0) return b;
73 | if (t==d) return b+c;
74 | if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
75 | return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
76 | },
77 | easeInCirc: function (x, t, b, c, d) {
78 | return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
79 | },
80 | easeOutCirc: function (x, t, b, c, d) {
81 | return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
82 | },
83 | easeInOutCirc: function (x, t, b, c, d) {
84 | if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
85 | return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
86 | },
87 | easeInElastic: function (x, t, b, c, d) {
88 | var s=1.70158;var p=0;var a=c;
89 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
90 | if (a < Math.abs(c)) { a=c; var s=p/4; }
91 | else var s = p/(2*Math.PI) * Math.asin (c/a);
92 | return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
93 | },
94 | easeOutElastic: function (x, t, b, c, d) {
95 | var s=1.70158;var p=0;var a=c;
96 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
97 | if (a < Math.abs(c)) { a=c; var s=p/4; }
98 | else var s = p/(2*Math.PI) * Math.asin (c/a);
99 | return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
100 | },
101 | easeInOutElastic: function (x, t, b, c, d) {
102 | var s=1.70158;var p=0;var a=c;
103 | if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
104 | if (a < Math.abs(c)) { a=c; var s=p/4; }
105 | else var s = p/(2*Math.PI) * Math.asin (c/a);
106 | if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
107 | return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
108 | },
109 | easeInBack: function (x, t, b, c, d, s) {
110 | if (s == undefined) s = 1.70158;
111 | return c*(t/=d)*t*((s+1)*t - s) + b;
112 | },
113 | easeOutBack: function (x, t, b, c, d, s) {
114 | if (s == undefined) s = 1.70158;
115 | return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
116 | },
117 | easeInOutBack: function (x, t, b, c, d, s) {
118 | if (s == undefined) s = 1.70158;
119 | if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
120 | return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
121 | },
122 | easeInBounce: function (x, t, b, c, d) {
123 | return c - sh.easing.easeOutBounce (x, d-t, 0, c, d) + b;
124 | },
125 | easeOutBounce: function (x, t, b, c, d) {
126 | if ((t/=d) < (1/2.75)) {
127 | return c*(7.5625*t*t) + b;
128 | } else if (t < (2/2.75)) {
129 | return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
130 | } else if (t < (2.5/2.75)) {
131 | return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
132 | } else {
133 | return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
134 | }
135 | },
136 | easeInOutBounce: function (x, t, b, c, d) {
137 | if (t < d/2) return sh.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
138 | return sh.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
139 | }
140 | });
141 |
142 |
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/images/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/js/ajaxscroll/images/loader.gif
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery-1.7.2.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/js/ajaxscroll/jquery-1.7.2.min.js
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery-noconflict.js:
--------------------------------------------------------------------------------
1 | jQuery.noConflict();
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery.ajaxscroll.min.bk.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Infinite Ajax Scroll, a jQuery plugin
3 | * Version v0.1.5
4 | * http://webcreate.nl/
5 | *
6 | * Copyright (c) 2011 Jeroen Fiege
7 | * Licensed under the MIT License:
8 | * http://webcreate.nl/license
9 | */
10 | (function(b){b.ajaxscroll=function(d){var m=b.extend({},b.ajaxscroll.defaults,d);var c=new b.ajaxscroll.util();var j=new b.ajaxscroll.paging();var h=(m.history?new b.ajaxscroll.history():false);var f=this;r();function r(){j.onChangePage(function(x,v,w){if(h){h.setPage(x,w)}m.onPageChange.call(this,x,w,v)});s();if(h&&h.havePage()){q();pageNum=h.getPage();c.forceScrollTop(function(){if(pageNum>1){l(pageNum);curTreshold=p(true);b("html,body").scrollTop(curTreshold)}else{s()}})}return f}function s(){n();b(window).scroll(g)}function g(){scrTop=b(window).scrollTop();wndHeight=b(window).height();curScrOffset=scrTop+wndHeight;if(curScrOffset>=p()){t(curScrOffset)}}function q(){b(window).unbind("scroll",g)}function n(){b(m.pagination).hide()}function p(v){el=b(m.container).find(m.item).last();if(el.size()==0){return 0}treshold=el.offset().top+el.height();if(!v){treshold+=m.tresholdMargin}return treshold}function t(w,v){urlNextPage=b(m.next).attr("href");if(!urlNextPage){return q()}j.pushPages(w,urlNextPage);q();o();e(urlNextPage,function(y,x){result=m.onLoadItems.call(this,x);if(result!==false){b(x).hide();curLastItem=b(m.container).find(m.item).last();curLastItem.after(x);b(x).fadeIn()}b(m.pagination).replaceWith(b(m.pagination,y));k();s();m.onRenderComplete.call(this,x);if(v){v.call(this)}})}function e(w,x){var v=[];b.get(w,null,function(y){b(m.container,y).find(m.item).each(function(){v.push(this)});if(x){x.call(this,y,v)}},"html")}function l(v){curTreshold=p(true);if(curTreshold>0){t(curTreshold,function(){q();if((j.getCurPageNum(curTreshold)+1)"+m.loader+"");loader.hide()}return loader}function o(v){loader=u();el=b(m.container).find(m.item).last();el.after(loader);loader.fadeIn()}function k(){loader=u();loader.remove()}};function a(c){if(window.console&&window.console.log){window.console.log(c)}}b.ajaxscroll.defaults={container:"#container",item:".item",pagination:"#pagination",next:".next",loader:'
',tresholdMargin:0,history:true,onPageChange:function(){},onLoadItems:function(){},onRenderComplete:function(){},};b.ajaxscroll.util=function(){var d=false;var f=false;var c=this;e();function e(){b(window).load(function(){d=true})}this.forceScrollTop=function(g){b("html,body").scrollTop(0);if(!f){if(!d){setTimeout(function(){c.forceScrollTop(g)},1)}else{g.call();f=true}}}};b.ajaxscroll.paging=function(){var e=[[0,document.location.toString()]];var h=function(){};var d=1;j();function j(){b(window).scroll(g)}function g(){scrTop=b(window).scrollTop();wndHeight=b(window).height();curScrOffset=scrTop+wndHeight;curPageNum=c(curScrOffset);curPagebreak=f(curScrOffset);if(d!=curPageNum){h.call(this,curPageNum,curPagebreak[0],curPagebreak[1])}d=curPageNum}function c(k){for(i=(e.length-1);i>0;i--){if(k>e[i][0]){return i+1}}return 1}this.getCurPageNum=function(k){return c(k)};function f(k){for(i=(e.length-1);i>=0;i--){if(k>e[i][0]){return e[i]}}return null}this.onChangePage=function(k){h=k};this.pushPages=function(k,l){e.push([k,l])}};b.ajaxscroll.history=function(){var d=false;var c=false;e();function e(){c=!!(window.history&&history.pushState&&history.replaceState);c=false}this.setPage=function(g,f){this.updateState({page:g},"",f)};this.havePage=function(){return(this.getState()!=false)};this.getPage=function(){if(this.havePage()){stateObj=this.getState();return stateObj.page}return 1};this.getState=function(){if(c){stateObj=history.state;if(stateObj&&stateObj.ajaxscroll){return stateObj.ajaxscroll}}else{haveState=(window.location.hash.substring(0,7)=="#/page/");if(haveState){pageNum=parseInt(window.location.hash.replace("#/page/",""));return{page:pageNum}}}return false};this.updateState=function(g,h,f){if(d){this.replaceState(g,h,f)}else{this.pushState(g,h,f)}};this.pushState=function(g,h,f){if(c){history.pushState({ajaxscroll:g},h,f)}else{hash=(g.page>0?"#/page/"+g.page:"");window.location.hash=hash}d=true};this.replaceState=function(g,h,f){if(c){history.replaceState({ajaxscroll:g},h,f)}else{this.pushState(g,h,f)}}}})(jQuery);
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery.ajaxscroll.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Infinite Ajax Scroll, a sh plugin
3 | * Version v0.1.5
4 | * http://webcreate.nl/
5 | *
6 | * Copyright (c) 2011 Jeroen Fiege
7 | * Licensed under the MIT License:
8 | * http://webcreate.nl/license
9 | */
10 | (function (b) {
11 |
12 | b.ajaxscroll = function (d) {
13 | var m = b.extend({}, b.ajaxscroll.defaults, d);
14 | var c = new b.ajaxscroll.util();
15 | var j = new b.ajaxscroll.paging();
16 | var h = (m.history ? new b.ajaxscroll.history() : false);
17 | var f = this;
18 | r();
19 |
20 | function r() {
21 | j.onChangePage(function (x, v, w) {
22 | if (h) {
23 | h.setPage(x, w)
24 | }
25 | m.onPageChange.call(this, x, w, v)
26 | });
27 | s();
28 | if (h && h.havePage()) {
29 | q();
30 | pageNum = h.getPage();
31 | c.forceScrollTop(function () {
32 | if (pageNum > 1) {
33 | l(pageNum);
34 | curTreshold = p(true);
35 | b("html,body").scrollTop(curTreshold)
36 | } else {
37 | s()
38 | }
39 | })
40 | }
41 | return f
42 | }
43 |
44 | function s() {
45 | n();
46 | b(window).scroll(g)
47 | }
48 |
49 | function g() {
50 | scrTop = b(window).scrollTop();
51 | wndHeight = b(window).height();
52 | curScrOffset = scrTop + wndHeight;
53 | if (curScrOffset >= p()) {
54 | t(curScrOffset)
55 | }else{
56 | // alert(1)
57 | // alert(curScrOffset);
58 | // alert(p());
59 | // alert(sh(window).height());
60 | }
61 | }
62 |
63 | function q() {
64 | b(window).unbind("scroll", g)
65 | }
66 |
67 | function n() {
68 | b(m.pagination).hide()
69 | }
70 |
71 | function p(v) {
72 |
73 | el = b(m.container).find(m.item).last();
74 | if (el.size() == 0) {
75 | return 0
76 | }
77 |
78 | treshold = el.offset().top + el.height();
79 |
80 | if (!v) {
81 | treshold = treshold*1 + m.tresholdMargin*1;
82 | }
83 |
84 | return treshold
85 | }
86 |
87 | function t(w, v) {
88 | var kl = sh('.category-products '+m.item+' .product-image').length;
89 | urlNextPage = b(m.next).attr("href");
90 | if (!urlNextPage) {
91 | return q()
92 | }
93 | j.pushPages(w, urlNextPage);
94 | q();
95 | o();
96 | e(urlNextPage, function (y, x) {
97 | result = m.onLoadItems.call(this, x);
98 | if (result !== false) {
99 | b(x).hide();
100 | curLastItem = b(m.container).find(m.item).last();
101 | curLastItem.after(x);
102 | b(x).fadeIn()
103 | }
104 |
105 | b(m.pagination).replaceWith(b(m.pagination, y));
106 | var km = sh('.category-products '+m.item+' .product-image').length;
107 | k();
108 | s();
109 | ft=ft+1;
110 |
111 | sh(''+m.item+' li .product-image img').slice(kl).hide();
112 | sh(''+m.item+' li .product-image').slice(kl).prepend(img);
113 | setTimeout(function() {sh('.scroll_loading').remove();}, 1500);
114 | setTimeout(function() { sh(''+m.item+' li .product-image img').slice(kl).show();}, 1600);
115 | m.onRenderComplete.call(this, x);
116 | if(typeof EM != 'undefined'){
117 | sh(function(sh) {
118 | var myhref,qsbtt;
119 |
120 | // base function
121 |
122 | //get IE version
123 | function ieVersion(){
124 | var rv = -1; // Return value assumes failure.
125 | if (navigator.appName == 'Microsoft Internet Explorer'){
126 | var ua = navigator.userAgent;
127 | var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
128 | if (re.exec(ua) != null)
129 | rv = parseFloat( RegExp.$1 );
130 | }
131 | return rv;
132 | }
133 |
134 | //read href attr in a tag
135 | function readHref(){
136 | var mypath = arguments[0];
137 | var patt = /\/[^\/]{0,}$/ig;
138 | if(mypath[mypath.length-1]=="/"){
139 | mypath = mypath.substring(0,mypath.length-1);
140 | return (mypath.match(patt)+"/");
141 | }
142 | return mypath.match(patt);
143 | }
144 |
145 |
146 | //string trim
147 | function strTrim(){
148 | return arguments[0].replace(/^\s+|\s+$/g,"");
149 | }
150 |
151 | function _qsJnit(){
152 |
153 |
154 |
155 | var selectorObj = arguments[0];
156 | //selector chon tat ca cac li chua san pham tren luoi
157 | var listprod = sh(selectorObj.itemClass);
158 | var qsImg;
159 | var mypath = 'quickview/index/view';
160 | // alert(EM.Quickview.BASE_URL);
161 | // if(EM.Quickview.BASE_URL.indexOf('index.php') == -1){
162 | // mypath = 'quickview/index/view';
163 | // }else{
164 | // mypath = 'index.php/quickview/index/view';
165 | // }
166 | var baseUrl = EM.Quickview.BASE_URL + mypath;
167 |
168 | var _qsHref = "
";
169 | sh(document.body).append(_qsHref);
170 |
171 | var qsHandlerImg = sh('#md_quickview_handler img');
172 |
173 | sh.each(listprod, function(index, value) {
174 | var reloadurl = baseUrl;
175 |
176 | //get reload url
177 | myhref = sh(value).children(selectorObj.aClass );
178 | var prodHref = readHref(myhref.attr('href'))[0];
179 | prodHref[0] == "\/" ? prodHref = prodHref.substring(1,prodHref.length) : prodHref;
180 | prodHref=strTrim(prodHref);
181 |
182 | reloadurl = baseUrl+"/path/"+prodHref;
183 | version = ieVersion();
184 | if(version < 8.0 && version > -1){
185 | reloadurl = baseUrl+"/path"+prodHref;
186 | }
187 | //end reload url
188 |
189 |
190 | sh(selectorObj.imgClass, this).bind('mouseover', function() {
191 | var o = sh(this).offset();
192 | sh('#md_quickview_handler').attr('href',reloadurl).show()
193 | .css({
194 | 'top': o.top+(sh(this).height() - qsHandlerImg.height())/2+'px',
195 | 'left': o.left+(sh(this).width() - qsHandlerImg.width())/2+'px',
196 | 'visibility': 'visible'
197 | });
198 | });
199 | sh(value).bind('mouseout', function() {
200 | sh('#md_quickview_handler').hide();
201 | });
202 | });
203 |
204 | //fix bug image disapper when hover
205 | sh('#md_quickview_handler')
206 | .bind('mouseover', function() {
207 | sh(this).show();
208 | })
209 | .bind('click', function() {
210 | sh(this).hide();
211 | });
212 | //insert quickview popup
213 |
214 | sh('#md_quickview_handler').fancybox({
215 | 'titleShow' : false,
216 | 'width' : EM.Quickview.QS_FRM_WIDTH,
217 | 'height' : 'auto',//EM.Quickview.QS_FRM_HEIGHT,
218 | 'autoScale' : false,
219 | 'transitionIn' : 'none',
220 | 'transitionOut' : 'none',
221 | 'autoDimensions' : false,
222 | 'scrolling' : 'no',
223 | 'padding' :0,
224 | 'margin' :0,
225 | 'type' : 'ajax',
226 | 'overlayColor' : EM.Quickview.OVERLAYCOLOR
227 |
228 | });
229 |
230 |
231 |
232 |
233 | }
234 |
235 | //end base function
236 |
237 |
238 | _qsJnit({
239 | itemClass : '.products-grid li.item', //selector for each items in catalog product list,use to insert quickview image
240 | aClass : 'a.product-image', //selector for each a tag in product items,give us href for one product
241 | imgClass: '.product-image img' //class for quickview href product-collateral
242 | });
243 | });
244 | }
245 | if (v) {
246 | v.call(this)
247 | }
248 | })
249 | }
250 | function e(w, x) {
251 | var v = [];
252 | b.get(w, null, function (y) {
253 | b(m.container, y).find(m.item).each(function () {
254 | v.push(this)
255 | });
256 | if (x) {
257 | x.call(this, y, v)
258 | }
259 | }, "html")
260 | }
261 |
262 | function l(v) {
263 | curTreshold = p(true);
264 | if (curTreshold > 0) {
265 | t(curTreshold, function () {
266 | q();
267 | if ((j.getCurPageNum(curTreshold) + 1) < v) {
268 | l(v);
269 | b("html,body").animate({scrollTop:curTreshold}, 400, "swing")
270 | } else {
271 | b("html,body").animate({scrollTop:curTreshold}, 1000, "swing");
272 | s()
273 | }
274 | })
275 | }
276 | }
277 |
278 | function u() {
279 | loader = b(".ajaxscroll_loader");
280 | if (loader.size() == 0) {
281 | loader = b("" + m.loader + "
");
282 | loader.hide()
283 | }
284 | return loader
285 | }
286 |
287 | function o(v) {
288 | loader = u();
289 | el = b(m.container).find(m.item).last();
290 | el.after(loader);
291 | loader.fadeIn()
292 | }
293 |
294 | function k() {
295 | loader = u();
296 | loader.remove();
297 | }
298 | };
299 | function a(c) {
300 | if (window.console && window.console.log) {
301 | window.console.log(c)
302 | }
303 | }
304 |
305 | b.ajaxscroll.defaults = {container:"#container", item:".item", pagination:"#pagination", next:".next", loader:'
', tresholdMargin:'0', history:true, onPageChange:function () {
306 | }, onLoadItems:function () {
307 | }, onRenderComplete:function () {
308 | } };
309 | b.ajaxscroll.util = function () {
310 | var d = false;
311 | var f = false;
312 | var c = this;
313 | e();
314 | function e() {
315 | b(window).load(function () {
316 | d = true
317 | })
318 | }
319 |
320 | this.forceScrollTop = function (g) {
321 | b("html,body").scrollTop(0);
322 | if (!f) {
323 | if (!d) {
324 | setTimeout(function () {
325 | c.forceScrollTop(g)
326 | }, 1)
327 | } else {
328 | g.call();
329 | f = true
330 | }
331 | }
332 | }
333 | };
334 | b.ajaxscroll.paging = function () {
335 | var e = [
336 | [0, document.location.toString()]
337 | ];
338 | var h = function () {
339 | };
340 | var d = 1;
341 | j();
342 | function j() {
343 | b(window).scroll(g)
344 | }
345 |
346 | function g() {
347 | scrTop = b(window).scrollTop();
348 | wndHeight = b(window).height();
349 | curScrOffset = scrTop + wndHeight;
350 | curPageNum = c(curScrOffset);
351 | curPagebreak = f(curScrOffset);
352 | if (d != curPageNum) {
353 | h.call(this, curPageNum, curPagebreak[0], curPagebreak[1])
354 | }
355 | d = curPageNum
356 | }
357 |
358 | function c(k) {
359 | for (i = (e.length - 1); i > 0; i--) {
360 | if (k > e[i][0]) {
361 | return i + 1
362 | }
363 | }
364 | return 1
365 | }
366 |
367 | this.getCurPageNum = function (k) {
368 | return c(k)
369 | };
370 | function f(k) {
371 | for (i = (e.length - 1); i >= 0; i--) {
372 | if (k > e[i][0]) {
373 | return e[i]
374 | }
375 | }
376 | return null
377 | }
378 |
379 | this.onChangePage = function (k) {
380 | h = k
381 | };
382 | this.pushPages = function (k, l) {
383 | e.push([k, l])
384 | }
385 | };
386 | b.ajaxscroll.history = function () {
387 | var d = false;
388 | var c = false;
389 | e();
390 | function e() {
391 | c = !!(window.history && history.pushState && history.replaceState);
392 | c = false
393 | }
394 |
395 | this.setPage = function (g, f) {
396 | this.updateState({page:g}, "", f)
397 | };
398 | this.havePage = function () {
399 | return(this.getState() != false)
400 | };
401 | this.getPage = function () {
402 | if (this.havePage()) {
403 | stateObj = this.getState();
404 | return stateObj.page
405 | }
406 | return 1
407 | };
408 | this.getState = function () {
409 | if (c) {
410 | stateObj = history.state;
411 | if (stateObj && stateObj.ajaxscroll) {
412 | return stateObj.ajaxscroll
413 | }
414 | } else {
415 | haveState = (window.location.hash.substring(0, 7) == "#/page/");
416 | if (haveState) {
417 | pageNum = parseInt(window.location.hash.replace("#/page/", ""));
418 | return{page:pageNum}
419 | }
420 | }
421 | return false
422 | };
423 | this.updateState = function (g, h, f) {
424 | if (d) {
425 | this.replaceState(g, h, f)
426 | } else {
427 | this.pushState(g, h, f)
428 | }
429 | };
430 | this.pushState = function (g, h, f) {
431 | if (c) {
432 | history.pushState({ajaxscroll:g}, h, f)
433 | } else {
434 | hash = (g.page > 0 ? "#/page/" + g.page : "");
435 | window.location.hash = hash
436 | }
437 | d = true
438 | };
439 | this.replaceState = function (g, h, f) {
440 | if (c) {
441 | history.replaceState({ajaxscroll:g}, h, f)
442 | } else {
443 | this.pushState(g, h, f)
444 | }
445 | }
446 | }
447 | })(sh);
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery.ajaxscroll.minbk.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Infinite Ajax Scroll, a jQuery plugin
3 | * Version v0.1.5
4 | * http://webcreate.nl/
5 | *
6 | * Copyright (c) 2011 Jeroen Fiege
7 | * Licensed under the MIT License:
8 | * http://webcreate.nl/license
9 | */
10 | (function (b) {
11 |
12 | b.ajaxscroll = function (d) {
13 | var m = b.extend({}, b.ajaxscroll.defaults, d);
14 | var c = new b.ajaxscroll.util();
15 | var j = new b.ajaxscroll.paging();
16 | var h = (m.history ? new b.ajaxscroll.history() : false);
17 | var f = this;
18 | r();
19 |
20 | function r() {
21 | j.onChangePage(function (x, v, w) {
22 | if (h) {
23 | h.setPage(x, w)
24 | }
25 | m.onPageChange.call(this, x, w, v)
26 | });
27 | s();
28 | if (h && h.havePage()) {
29 | q();
30 | pageNum = h.getPage();
31 | c.forceScrollTop(function () {
32 | if (pageNum > 1) {
33 | l(pageNum);
34 | curTreshold = p(true);
35 | b("html,body").scrollTop(curTreshold)
36 | } else {
37 | s()
38 | }
39 | })
40 | }
41 | return f
42 | }
43 |
44 | function s() {
45 | n();
46 | b(window).scroll(g)
47 | }
48 |
49 | function g() {
50 | scrTop = b(window).scrollTop();
51 | wndHeight = b(window).height();
52 | curScrOffset = scrTop + wndHeight;
53 | if (curScrOffset >= p()) {
54 | t(curScrOffset)
55 | }else{
56 | // alert(1)
57 | // alert(curScrOffset);
58 | // alert(p());
59 | // alert(jQuery(window).height());
60 | }
61 | }
62 |
63 | function q() {
64 | b(window).unbind("scroll", g)
65 | }
66 |
67 | function n() {
68 | b(m.pagination).hide()
69 | }
70 |
71 | function p(v) {
72 |
73 | el = b(m.container).find(m.item).last();
74 | if (el.size() == 0) {
75 | return 0
76 | }
77 |
78 | treshold = el.offset().top + el.height();
79 |
80 | if (!v) {
81 | treshold = treshold*1 + m.tresholdMargin*1;
82 | }
83 |
84 | return treshold
85 | }
86 |
87 | function t(w, v) {
88 | var kl = jQuery('.category-products '+m.item+' .product-image').length;
89 | urlNextPage = b(m.next).attr("href");
90 | if (!urlNextPage) {
91 | return q()
92 | }
93 | j.pushPages(w, urlNextPage);
94 | q();
95 | o();
96 | e(urlNextPage, function (y, x) {
97 | result = m.onLoadItems.call(this, x);
98 | if (result !== false) {
99 | b(x).hide();
100 | curLastItem = b(m.container).find(m.item).last();
101 | curLastItem.after(x);
102 | b(x).fadeIn()
103 | }
104 |
105 | b(m.pagination).replaceWith(b(m.pagination, y));
106 | var km = jQuery('.category-products '+m.item+' .product-image').length;
107 | k();
108 | s();
109 | ft=ft+1;
110 |
111 | jQuery(''+m.item+' li .product-image img').slice(kl).hide();
112 | jQuery(''+m.item+' li .product-image').slice(kl).prepend(img);
113 | setTimeout(function() {jQuery('.scroll_loading').remove();}, 1500);
114 | setTimeout(function() { jQuery(''+m.item+' li .product-image img').slice(kl).show();}, 1600);
115 | m.onRenderComplete.call(this, x);
116 | if (v) {
117 | v.call(this)
118 | }
119 | })
120 | }
121 | function e(w, x) {
122 | var v = [];
123 | b.get(w, null, function (y) {
124 | b(m.container, y).find(m.item).each(function () {
125 | v.push(this)
126 | });
127 | if (x) {
128 | x.call(this, y, v)
129 | }
130 | }, "html")
131 | }
132 |
133 | function l(v) {
134 | curTreshold = p(true);
135 | if (curTreshold > 0) {
136 | t(curTreshold, function () {
137 | q();
138 | if ((j.getCurPageNum(curTreshold) + 1) < v) {
139 | l(v);
140 | b("html,body").animate({scrollTop:curTreshold}, 400, "swing")
141 | } else {
142 | b("html,body").animate({scrollTop:curTreshold}, 1000, "swing");
143 | s()
144 | }
145 | })
146 | }
147 | }
148 |
149 | function u() {
150 | loader = b(".ajaxscroll_loader");
151 | if (loader.size() == 0) {
152 | loader = b("" + m.loader + "
");
153 | loader.hide()
154 | }
155 | return loader
156 | }
157 |
158 | function o(v) {
159 | loader = u();
160 | el = b(m.container).find(m.item).last();
161 | el.after(loader);
162 | loader.fadeIn()
163 | }
164 |
165 | function k() {
166 | loader = u();
167 | loader.remove();
168 | }
169 | };
170 | function a(c) {
171 | if (window.console && window.console.log) {
172 | window.console.log(c)
173 | }
174 | }
175 |
176 | b.ajaxscroll.defaults = {container:"#container", item:".item", pagination:"#pagination", next:".next", loader:'
', tresholdMargin:'0', history:true, onPageChange:function () {
177 | }, onLoadItems:function () {
178 | }, onRenderComplete:function () {
179 | } };
180 | b.ajaxscroll.util = function () {
181 | var d = false;
182 | var f = false;
183 | var c = this;
184 | e();
185 | function e() {
186 | b(window).load(function () {
187 | d = true
188 | })
189 | }
190 |
191 | this.forceScrollTop = function (g) {
192 | b("html,body").scrollTop(0);
193 | if (!f) {
194 | if (!d) {
195 | setTimeout(function () {
196 | c.forceScrollTop(g)
197 | }, 1)
198 | } else {
199 | g.call();
200 | f = true
201 | }
202 | }
203 | }
204 | };
205 | b.ajaxscroll.paging = function () {
206 | var e = [
207 | [0, document.location.toString()]
208 | ];
209 | var h = function () {
210 | };
211 | var d = 1;
212 | j();
213 | function j() {
214 | b(window).scroll(g)
215 | }
216 |
217 | function g() {
218 | scrTop = b(window).scrollTop();
219 | wndHeight = b(window).height();
220 | curScrOffset = scrTop + wndHeight;
221 | curPageNum = c(curScrOffset);
222 | curPagebreak = f(curScrOffset);
223 | if (d != curPageNum) {
224 | h.call(this, curPageNum, curPagebreak[0], curPagebreak[1])
225 | }
226 | d = curPageNum
227 | }
228 |
229 | function c(k) {
230 | for (i = (e.length - 1); i > 0; i--) {
231 | if (k > e[i][0]) {
232 | return i + 1
233 | }
234 | }
235 | return 1
236 | }
237 |
238 | this.getCurPageNum = function (k) {
239 | return c(k)
240 | };
241 | function f(k) {
242 | for (i = (e.length - 1); i >= 0; i--) {
243 | if (k > e[i][0]) {
244 | return e[i]
245 | }
246 | }
247 | return null
248 | }
249 |
250 | this.onChangePage = function (k) {
251 | h = k
252 | };
253 | this.pushPages = function (k, l) {
254 | e.push([k, l])
255 | }
256 | };
257 | b.ajaxscroll.history = function () {
258 | var d = false;
259 | var c = false;
260 | e();
261 | function e() {
262 | c = !!(window.history && history.pushState && history.replaceState);
263 | c = false
264 | }
265 |
266 | this.setPage = function (g, f) {
267 | this.updateState({page:g}, "", f)
268 | };
269 | this.havePage = function () {
270 | return(this.getState() != false)
271 | };
272 | this.getPage = function () {
273 | if (this.havePage()) {
274 | stateObj = this.getState();
275 | return stateObj.page
276 | }
277 | return 1
278 | };
279 | this.getState = function () {
280 | if (c) {
281 | stateObj = history.state;
282 | if (stateObj && stateObj.ajaxscroll) {
283 | return stateObj.ajaxscroll
284 | }
285 | } else {
286 | haveState = (window.location.hash.substring(0, 7) == "#/page/");
287 | if (haveState) {
288 | pageNum = parseInt(window.location.hash.replace("#/page/", ""));
289 | return{page:pageNum}
290 | }
291 | }
292 | return false
293 | };
294 | this.updateState = function (g, h, f) {
295 | if (d) {
296 | this.replaceState(g, h, f)
297 | } else {
298 | this.pushState(g, h, f)
299 | }
300 | };
301 | this.pushState = function (g, h, f) {
302 | if (c) {
303 | history.pushState({ajaxscroll:g}, h, f)
304 | } else {
305 | hash = (g.page > 0 ? "#/page/" + g.page : "");
306 | window.location.hash = hash
307 | }
308 | d = true
309 | };
310 | this.replaceState = function (g, h, f) {
311 | if (c) {
312 | history.replaceState({ajaxscroll:g}, h, f)
313 | } else {
314 | this.pushState(g, h, f)
315 | }
316 | }
317 | }
318 | })(jQuery);
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery.ui.totop.js:
--------------------------------------------------------------------------------
1 | /*
2 | |--------------------------------------------------------------------------
3 | | UItoTop sh Plugin 1.2 by Matt Varone
4 | | http://www.mattvarone.com/web-design/uitotop-sh-plugin/
5 | |--------------------------------------------------------------------------
6 | */
7 | (function($){
8 | $.fn.UItoTop = function(options) {
9 |
10 | var defaults = {
11 | text: 'To Top',
12 | min: 200,
13 | inDelay:600,
14 | outDelay:400,
15 | containerID: 'toTop',
16 | containerHoverID: 'toTopHover',
17 | scrollSpeed: 1200,
18 | easingType: 'linear'
19 | },
20 | settings = $.extend(defaults, options),
21 | containerIDhash = '#' + settings.containerID,
22 | containerHoverIDHash = '#'+settings.containerHoverID;
23 |
24 | $('body').append(''+settings.text+'');
25 | $(containerIDhash).hide().on('click.UItoTop',function(){
26 | $('html, body').animate({scrollTop:0}, settings.scrollSpeed, settings.easingType);
27 | $('#'+settings.containerHoverID, this).stop().animate({'opacity': 0 }, settings.inDelay, settings.easingType);
28 | return false;
29 | })
30 | .prepend('')
31 | .hover(function() {
32 | $(containerHoverIDHash, this).stop().animate({
33 | 'opacity': 1
34 | }, 600, 'linear');
35 | }, function() {
36 | $(containerHoverIDHash, this).stop().animate({
37 | 'opacity': 0
38 | }, 700, 'linear');
39 | });
40 |
41 | $(window).scroll(function() {
42 | var sd = $(window).scrollTop();
43 | if(typeof document.body.style.maxHeight === "undefined") {
44 | $(containerIDhash).css({
45 | 'position': 'absolute',
46 | 'top': sd + $(window).height() - 50
47 | });
48 | }
49 | if ( sd > settings.min )
50 | $(containerIDhash).fadeIn(settings.inDelay);
51 | else
52 | $(containerIDhash).fadeOut(settings.Outdelay);
53 | });
54 | };
55 | })(sh);
--------------------------------------------------------------------------------
/view/frontend/web/js/ajaxscroll/jquery.ui.totop.min.js:
--------------------------------------------------------------------------------
1 | /* UItoTop jQuery Plugin 1.2 | Matt Varone | http://www.mattvarone.com/web-design/uitotop-jquery-plugin */
2 | (function($){$.fn.UItoTop=function(options){var defaults={text:'To Top',min:200,inDelay:600,outDelay:400,containerID:'toTop',containerHoverID:'toTopHover',scrollSpeed:1200,easingType:'linear'},settings=$.extend(defaults,options),containerIDhash='#'+settings.containerID,containerHoverIDHash='#'+settings.containerHoverID;$('body').append(''+settings.text+'');$(containerIDhash).hide().on('click.UItoTop',function(){$('html, body').animate({scrollTop:0},settings.scrollSpeed,settings.easingType);$('#'+settings.containerHoverID,this).stop().animate({'opacity':0},settings.inDelay,settings.easingType);return false;}).prepend('').hover(function(){$(containerHoverIDHash,this).stop().animate({'opacity':1},600,'linear');},function(){$(containerHoverIDHash,this).stop().animate({'opacity':0},700,'linear');});$(window).scroll(function(){var sd=$(window).scrollTop();if(typeof document.body.style.maxHeight==="undefined"){$(containerIDhash).css({'position':'absolute','top':sd+$(window).height()-50});}
3 | if(sd>settings.min)
4 | $(containerIDhash).fadeIn(settings.inDelay);else
5 | $(containerIDhash).fadeOut(settings.Outdelay);});};})(jQuery);
--------------------------------------------------------------------------------
/view/frontend/web/media/ajaxscroll/default/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/media/ajaxscroll/default/loader.gif
--------------------------------------------------------------------------------
/view/frontend/web/media/ajaxscroll/default/loading_bar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/media/ajaxscroll/default/loading_bar.gif
--------------------------------------------------------------------------------
/view/frontend/web/media/ajaxscroll/default/ui.totop.black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/media/ajaxscroll/default/ui.totop.black.png
--------------------------------------------------------------------------------
/view/frontend/web/media/ajaxscroll/default/ui.totop.blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/media/ajaxscroll/default/ui.totop.blue.png
--------------------------------------------------------------------------------
/view/frontend/web/media/ajaxscroll/default/ui.totop.white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emizentech/magento2-infinite-ajax-scroll/d3398b98a7693bd65ec242ee1fef2dc9c78d266f/view/frontend/web/media/ajaxscroll/default/ui.totop.white.png
--------------------------------------------------------------------------------