Skip to content

Commit 913e036

Browse files
committed
Support element grid-slider
1 parent dcf530d commit 913e036

File tree

1 file changed

+68
-22
lines changed

1 file changed

+68
-22
lines changed

view/base/web/js/grid-slider.js

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,32 +34,39 @@ define([
3434
},
3535

3636
_initSlider: function () {
37-
var options = this.options;
38-
var useIntersectionObserver = options.useIntersectionObserver;
39-
var unobserve = options.unobserve;
40-
var self = this;
41-
var $head = $('head');
42-
var elements = options.selector ? self.element.find(options.selector) : self.element;
37+
var options = this.options,
38+
useIntersectionObserver = options.useIntersectionObserver,
39+
unobserve = options.unobserve,
40+
self = this,
41+
$head = $('head'),
42+
elements = options.selector ? self.element.find(options.selector) : self.element;
4343
elements.each(function() {
44-
var element = $(this);
45-
var selector = 'grid-slider-' + self._uniqid();
46-
var styleId = selector;
44+
var element = $(this),
45+
selector = 'grid-slider-' + self._uniqid(),
46+
styleId = selector;
4747
element.addClass(selector);
4848
selector = '.' + selector;
4949
if($('body').hasClass('rtl')){
5050
element.attr('dir', 'rtl');
5151
element.data( 'rtl', true );
5252
}
5353
var options = element.data();
54+
if ($.isEmptyObject(options)){
55+
let gridslider = element.closest('grid-slider');
56+
if (gridslider.length) {
57+
options = gridslider.data();
58+
}
59+
}
60+
console.log(options);
5461
if(iClass === undefined){
5562
element.children().addClass('alo-item');
5663
var iClass = '.alo-item';
5764
}
58-
var rows = ((options || {}).rows === void 0) ? 1 : options.rows;
59-
var classes = rows ? selector + ' '+ iClass : selector + ' > '+ iClass;
60-
var padding = options.padding;
61-
var float = $('body').hasClass('rtl') ? 'right' : 'left';
62-
var style = (typeof padding !== 'undefined') ? classes + '{float: ' + float + '; padding: 0 '+padding+'px; box-sizing: border-box} ' + selector + '{margin: 0 -'+padding+'px}' : '';
65+
var rows = ((options || {}).rows === void 0) ? 1 : options.rows,
66+
classes = rows ? selector + ' '+ iClass : selector + ' > '+ iClass,
67+
padding = options.padding,
68+
float = $('body').hasClass('rtl') ? 'right' : 'left',
69+
style = (typeof padding !== 'undefined') ? classes + '{float: ' + float + '; padding: 0 '+padding+'px; box-sizing: border-box} ' + selector + '{margin: 0 -'+padding+'px}' : '';
6370
$head.append('<style type="text/css" >'+style+'</style>');
6471
style = '';
6572
if(options.slidesToShow){
@@ -91,9 +98,9 @@ define([
9198
if(responsive == undefined) return;
9299
var length = Object.keys(responsive).length;
93100
$.each( responsive, function( key, value ) {
94-
var col = 0;
95-
var maxWith = 0;
96-
var minWith = 0;
101+
var col = 0,
102+
maxWith = 0,
103+
minWith = 0;
97104
$.each( value , function(size, num) { minWith = parseInt(size) + 1; col = num;});
98105
if(key+2<length){
99106
$.each( responsive[key+1], function( size, num) { maxWith = size; col = num;});
@@ -114,9 +121,9 @@ define([
114121

115122
getPesponsive : function (options) {
116123
if(!options.slidesToShow || !options.responsive) return options.responsive;
117-
var responsive = options.responsive;
118-
var length = Object.keys(responsive).length;
119-
var gridResponsive = [];
124+
var responsive = options.responsive,
125+
length = Object.keys(responsive).length,
126+
gridResponsive = [];
120127
$.each( responsive, function( key, value ) {
121128
var breakpoint = {};
122129
breakpoint[value.breakpoint] = parseInt(value.settings.slidesToShow);
@@ -130,8 +137,14 @@ define([
130137
el.slick("refresh");
131138
return;
132139
}
133-
var options = el.data();
134-
var lazy = el.find('img.lazyload');
140+
var options = el.data(),
141+
lazy = el.find('img.lazyload');
142+
if ($.isEmptyObject(options)) {
143+
let gridslider = el.closest('grid-slider');
144+
if (gridslider.length) {
145+
options = gridslider.data();
146+
}
147+
}
135148
if(lazy.length){
136149
lazy.each(function(index) {
137150
$(this).data('lazy', $(this).data('src'));
@@ -168,6 +181,39 @@ define([
168181

169182
});
170183

184+
if (!customElements.get('grid-slider')) {
185+
class GridSlider extends HTMLElement {
186+
constructor() {
187+
super();
188+
var $this = this;
189+
document.addEventListener("GridSliderUpdated", function (event) {
190+
$this.initialized();
191+
});
192+
}
193+
194+
connectedCallback() {
195+
if (this.slick) {
196+
$(this).slick("refresh")
197+
} else {
198+
if (!this.classList.contains('ajax')) this.initialized();
199+
}
200+
}
201+
202+
initialized() {
203+
204+
$(this).not(".exception, .grid-init, .slick-initialized").each(function () {
205+
$.magepow.gridSlider({
206+
selector: '.grid-slider',
207+
useIntersectionObserver: false,
208+
unobserve: true,
209+
}, $(this));
210+
});
211+
}
212+
213+
}
214+
customElements.define("grid-slider", GridSlider);
215+
}
216+
171217
return $.magepow.gridSlider;
172218

173219
});

0 commit comments

Comments
 (0)