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 ( / \. ( j p e g | j p g | p n g | g i f ) / i) || link . dataset . content == 'image' ? 'image' : url . match ( / \. ( v i m e o \. c o m | y o u t u ( b e \. c o m | \. b e ) ) \/ ( w a t c h \? v = ) ? ( [ A - Z a - z 0 - 9 . _ % - ] * ) ( \& \S + ) ? / ) || link . dataset . content == 'iframe' ? 'iframe' : url . match ( / \. ( m p 4 | w e b m ) $ / ) ? '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 ;
0 commit comments