Skip to content

Commit 6ecb1e2

Browse files
Update lightbox plugin and masonry plugn to support passive event|
1 parent 52945fa commit 6ecb1e2

File tree

3 files changed

+36
-31
lines changed

3 files changed

+36
-31
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "timbercss",
3-
"version": "0.1.49",
3+
"version": "0.1.50",
44
"author": "UnlimitDesign",
55
"description": "A CSS Framework for Rapid Website Prototyping",
66
"keywords": [],

src/js/plugins/_tm.lightbox.js

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright © UnlimitDesign 2019
22
// Plugin: Lightbox
3-
// Version: 1.0.0
3+
// Version: 1.0.1
44
// URL: @UnlimitDesign
55
// Author: UnlimitDesign, Christian Lundgren, Shu Miyao
66
// Description: Detect when elements enter and/or leave viewport
@@ -98,9 +98,10 @@ const tmLightbox = (function () {
9898
* @param {element} The lightbox link.
9999
*/
100100
const addLinkEvent = (lightboxLink) => {
101+
let options = lightboxLink.tagName === 'A' || eventType == 'click' ? false : passiveSupported() ? { passive: true } : false;
101102
lightboxLink.addEventListener(eventType, function(){
102103
buildLightbox(lightboxLink);
103-
}, false);
104+
}, options);
104105
};
105106

106107
/**
@@ -204,19 +205,21 @@ const tmLightbox = (function () {
204205
let contentWrapper = document.querySelector('.tml-content-wrapper');
205206
let toolbar = document.querySelector('.tml-toolbar');
206207
let content = document.querySelector('.tml-content');
208+
let options = eventType == 'click' ? false : passiveSupported() ? { passive: true } : false;
207209

208210
// Add zoom button
209211
if(plugin.settings.navZoom){
210212

211213
// Construct
212-
let zoom = document.createElement('a');
213-
classList(zoom).addClass('tml-nav').addClass('tml-zoom');
214+
let zoom = document.createElement('button');
215+
classList(zoom).addClass('tml-nav').addClass('tml-zoom').addClass('outline-none');
216+
zoom.setAttribute('aria-label', 'Zoom');
214217

215218
// Add to lightbox
216219
toolbar.appendChild(zoom);
217220

218221
// Add Events
219-
zoom.addEventListener('click', zoomContent, false);
222+
zoom.addEventListener(eventType, zoomContent, options);
220223
}
221224

222225
// Add thumbnails button
@@ -228,17 +231,18 @@ const tmLightbox = (function () {
228231
thumbnailWrapper.innerHTML += '<ul class="list-none list-horizontal center"/>';
229232
lightbox.appendChild(thumbnailWrapper);
230233

231-
// Construct and thumbnail button to toolbar
232-
let showThumbnails = document.createElement('a');
233-
classList(showThumbnails).addClass('tml-nav').addClass('tml-thumbnails');
234+
// Construct and add thumbnail button to toolbar
235+
let showThumbnails = document.createElement('button');
236+
classList(showThumbnails).addClass('tml-nav').addClass('tml-thumbnails').addClass('outline-none');
234237
toolbar.appendChild(showThumbnails);
238+
showThumbnails.setAttribute('aria-label', 'Show Thumbnails');
235239

236240
//Add Events for show thumbnail button
237-
showThumbnails.addEventListener('click', function(){
241+
showThumbnails.addEventListener(eventType, function(){
238242
toggleActiveClass();
239243
toggleActiveClass(document.querySelector('.tml-thumbnail-wrapper'));
240244
toggleStageHeight();
241-
}, false);
245+
}, options);
242246

243247
// Loop through gallery group and build thumbnails based on gallery array
244248
galleryGroup.forEach(function(groupLink, i){
@@ -248,7 +252,7 @@ const tmLightbox = (function () {
248252
let mediaSrc = checkMedia(groupLink);
249253
let play = mediaSrc.type == 'iframe' || mediaSrc.type == 'html5video' ? `<span class="content-over p-0 items-center center"><span><span class="play flex mx-auto"><i class="icon-material size-sm self-center mx-auto mb-0">play_arrow</i></span></span></span>` : '';
250254
thumbnailGroup.push(`tml-thumbnail-${i}`);
251-
thumbnailWrapper.querySelector('ul').innerHTML += `<li><div class="thumbnail"><a href="${mediaSrc.url}" id="tml-thumbnail-${i}" data-group-link-id="${groupLink.id}" class="overlay-link tml-thumbnail"><img src="${thumbnailURL}"/>${play}</a></div></li>`;
255+
thumbnailWrapper.querySelector('ul').innerHTML += `<li><div class="thumbnail"><button data-url="${mediaSrc.url}" id="tml-thumbnail-${i}" data-group-link-id="${groupLink.id}" class="overlay-link tml-thumbnail"><img src="${thumbnailURL}"/>${play}</button></div></li>`;
252256
});
253257

254258
// Get thumbnails and
@@ -264,9 +268,10 @@ const tmLightbox = (function () {
264268
// Set active
265269
if(thumbnailIndex == galleryIndex) classList(thumbnail).addClass('tml-thumb-active');
266270

267-
thumbnail.addEventListener('click', function(){
271+
//let options = thumbnail.tagName === 'A' || eventType == 'click' ? false : passiveSupported() ? { passive: true } : false;
272+
thumbnail.addEventListener(eventType, function(){
268273
plugin.getContent(thumbnail);
269-
}, false);
274+
}, options);
270275
});
271276
}
272277

@@ -279,38 +284,41 @@ const tmLightbox = (function () {
279284
if(plugin.settings.navExit){
280285

281286
// Construct
282-
let exit = document.createElement('a');
283-
classList(exit).addClass('tml-nav').addClass('tml-exit');
287+
let exit = document.createElement('button');
288+
classList(exit).addClass('tml-nav').addClass('tml-exit').addClass('outline-none');
289+
exit.setAttribute('aria-label', 'Exit');
284290

285291
// Add to lightbox
286292
toolbar.appendChild(exit);
287293

288294
// Add Events
289-
exit.addEventListener('click', plugin.closeLightbox, false);
295+
exit.addEventListener('click', plugin.closeLightbox, options);
290296
}
291297

292298
// Overlay exit
293299
if(plugin.settings.overlayClickClose){
294-
lightbox.addEventListener('click', addOverlayEvent, false);
300+
lightbox.addEventListener('click', addOverlayEvent, options);
295301
}
296302

297303
// Add arrow nav
298304
if(plugin.settings.navArrows && galleryGroup.length >= 2){
299305

300306
// Construct
301-
let prev = document.createElement('a');
302-
classList(prev).addClass('tml-nav').addClass('tml-prev');
307+
let prev = document.createElement('button');
308+
classList(prev).addClass('tml-nav').addClass('tml-prev').addClass('outline-none');
309+
prev.setAttribute('aria-label', 'Previous');
303310

304-
let next = document.createElement('a');
305-
classList(next).addClass('tml-nav').addClass('tml-next');
311+
let next = document.createElement('button');
312+
classList(next).addClass('tml-nav').addClass('tml-next').addClass('outline-none');
313+
next.setAttribute('aria-label', 'Next');
306314

307315
// Add them to lightbox
308316
lightboxInner.appendChild(prev);
309317
lightboxInner.appendChild(next);
310318

311319
// Add Events
312-
prev.addEventListener('click', plugin.prevContent, false);
313-
next.addEventListener('click', plugin.nextContent, false);
320+
prev.addEventListener('click', plugin.prevContent, options);
321+
next.addEventListener('click', plugin.nextContent, options);
314322
}
315323

316324
// Add window listener for resize events
@@ -376,7 +384,6 @@ const tmLightbox = (function () {
376384
const checkMedia = (link) => {
377385
let url = link.tagName == 'A' ? link.getAttribute('href') : '#' + link.dataset.url;
378386
let mediaType = url.match(/\.(jpeg|jpg|png|gif)/i) || link.dataset.content == 'image' ? 'image' : url.match(/\.(vimeo\.com|youtu(be\.com|\.be))\/(watch\?v=)?([A-Za-z0-9._%-]*)(\&\S+)?/) || link.dataset.content == 'iframe' ? 'iframe' : url.match(/\.(mp4|webm)$/) ? 'html5video' : 'inline';
379-
console.log(mediaType)
380387
return {url:url, type:mediaType};
381388
};
382389

@@ -744,7 +751,6 @@ const tmLightbox = (function () {
744751
* Load next content
745752
*/
746753
plugin.nextContent = () => {
747-
if(event.target.tagName === 'A') event.preventDefault();
748754

749755
let content = document.querySelector('.tml-content');
750756
if(content.hasAttribute('loading')) return false;
@@ -766,7 +772,6 @@ const tmLightbox = (function () {
766772
* Load previous content
767773
*/
768774
plugin.prevContent = () => {
769-
if(event.target.tagName === 'A') event.preventDefault();
770775

771776
let content = document.querySelector('.tml-content');
772777
if(content.hasAttribute('loading')) return false;
@@ -788,7 +793,6 @@ const tmLightbox = (function () {
788793
* Load content
789794
*/
790795
plugin.getContent = (thumbnailLink) => {
791-
if(event.target.tagName === 'A') event.preventDefault();
792796

793797
let content = document.querySelector('.tml-content');
794798
if(content.hasAttribute('loading') || thumbnailLink.classList.contains('tml-thumb-active')) return false;

src/js/plugins/_tm.masonrygrid.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright © UnlimitDesign 2019
22
// Plugin: Masonry Grid
3-
// Version: 1.0.3
3+
// Version: 1.0.4
44
// URL: @UnlimitDesign
55
// Author: UnlimitDesign, Christian Lundgren, Shu Miyao
66
// Description: Detect when elements enter and/or leave viewport
@@ -200,13 +200,14 @@ const tmMasonryGrid = (function () {
200200
var menuItems = element.getElementsByTagName('li');
201201
for (let i = 0; i < menuItems.length; i++) {
202202
let menuItem = menuItems[i];
203-
menuItem.addEventListener('click', function(event){
203+
let options = menuItem.tagName === 'A' || eventType == 'click' ? false : passiveSupported() ? { passive: true } : false;
204+
menuItem.addEventListener(eventType, function(event){
204205
if(event.target.tagName === 'A') event.preventDefault();
205206
filterSelection(gridTarget,event.target.getAttribute('data-filter'));
206207
let current = filterMenu.getElementsByClassName('active');
207208
current[0].className = current[0].className.replace(' active', '');
208209
event.target.className += ' active';
209-
});
210+
}, options);
210211
}
211212
});
212213
};

0 commit comments

Comments
 (0)