Skip to content

Commit 1923a5c

Browse files
committed
lightbox refactor
1 parent aa9dfc7 commit 1923a5c

File tree

10 files changed

+56
-38
lines changed

10 files changed

+56
-38
lines changed

dist/reveal.esm.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/reveal.esm.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/reveal.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/reveal.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/controllers/overlay.js

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ export default class Overlay {
1010

1111
this.onSlidesClicked = this.onSlidesClicked.bind( this );
1212

13-
this.linkPreviewSelector = null;
14-
this.mediaPreviewSelector = '[data-preview-image], [data-preview-video]';
13+
this.iframeTriggerSelector = null;
14+
this.mediaTriggerSelector = '[data-preview-image], [data-preview-video]';
1515

1616
this.state = {};
1717

@@ -21,18 +21,18 @@ export default class Overlay {
2121

2222
// Enable link previews globally
2323
if( this.Reveal.getConfig().previewLinks ) {
24-
this.linkPreviewSelector = 'a[href]:not([data-preview-link=false]), [data-preview-link]:not(a):not([data-preview-link=false])';
24+
this.iframeTriggerSelector = 'a[href]:not([data-preview-link=false]), [data-preview-link]:not(a):not([data-preview-link=false])';
2525
}
2626
// Enable link previews for individual elements
2727
else {
28-
this.linkPreviewSelector = '[data-preview-link]:not([data-preview-link=false])';
28+
this.iframeTriggerSelector = '[data-preview-link]:not([data-preview-link=false])';
2929
}
3030

31-
this.hasLinkPreviews = this.Reveal.getSlidesElement().querySelectorAll( this.linkPreviewSelector ).length > 0;
32-
this.hasMediaPreviews = this.Reveal.getSlidesElement().querySelectorAll( this.mediaPreviewSelector ).length > 0;
31+
const hasLinkPreviews = this.Reveal.getSlidesElement().querySelectorAll( this.iframeTriggerSelector ).length > 0;
32+
const hasMediaPreviews = this.Reveal.getSlidesElement().querySelectorAll( this.mediaTriggerSelector ).length > 0;
3333

3434
// Only add the listener when there are previewable elements in the slides
35-
if( this.hasLinkPreviews || this.hasMediaPreviews ) {
35+
if( hasLinkPreviews || hasMediaPreviews ) {
3636
this.Reveal.getSlidesElement().addEventListener( 'click', this.onSlidesClicked, false );
3737
}
3838
else {
@@ -56,11 +56,11 @@ export default class Overlay {
5656
}
5757

5858
/**
59-
* Opens a preview window for the target URL.
59+
* Opens a lightbox that previews the target URL.
6060
*
61-
* @param {string} url - url for preview iframe src
61+
* @param {string} url - url for lightbox iframe src
6262
*/
63-
showIframePreview( url ) {
63+
previewIframe( url ) {
6464

6565
this.close();
6666

@@ -95,19 +95,19 @@ export default class Overlay {
9595
this.close();
9696
}, false );
9797

98-
this.Reveal.dispatchEvent({ type: 'showiframepreview', data: { url } });
98+
this.Reveal.dispatchEvent({ type: 'previewiframe', data: { url } });
9999

100100
}
101101

102102
/**
103-
* Opens a preview window that provides a larger view of the
103+
* Opens a lightbox window that provides a larger view of the
104104
* given image/video.
105105
*
106106
* @param {string} url - url to the image/video to preview
107107
* @param {image|video} mediaType
108108
* @param {string} [fitMode] - the fit mode to use for the preview
109109
*/
110-
showMediaPreview( url, mediaType, fitMode ) {
110+
previewMedia( url, mediaType, fitMode ) {
111111

112112
if( mediaType !== 'image' && mediaType !== 'video' ) {
113113
console.warn( 'Please specify a valid media type to preview (image|video)' );
@@ -155,6 +155,8 @@ export default class Overlay {
155155
this.close();
156156
}, false );
157157

158+
this.Reveal.dispatchEvent({ type: 'previewimage', data: { url } });
159+
158160
}
159161
else if( mediaType === 'video' ) {
160162

@@ -179,6 +181,8 @@ export default class Overlay {
179181
`<span class="r-overlay-error">Unable to load video.</span>`;
180182
}, false );
181183

184+
this.Reveal.dispatchEvent({ type: 'previewvideo', data: { url } });
185+
182186
}
183187
else {
184188
throw new Error( 'Please specify a valid media type to preview' );
@@ -189,7 +193,17 @@ export default class Overlay {
189193
event.preventDefault();
190194
}, false );
191195

192-
this.Reveal.dispatchEvent({ type: 'showmediapreview', data: { mediaType, url } });
196+
}
197+
198+
previewImage( url, fitMode ) {
199+
200+
this.previewMedia( url, 'image', fitMode );
201+
202+
}
203+
204+
previewVideo( url, fitMode ) {
205+
206+
this.previewMedia( url, 'video', fitMode );
193207

194208
}
195209

@@ -300,13 +314,13 @@ export default class Overlay {
300314
setState( state ) {
301315

302316
if( state.previewIframe ) {
303-
this.showIframePreview( state.previewIframe );
317+
this.previewIframe( state.previewIframe );
304318
}
305319
else if( state.previewImage ) {
306-
this.showMediaPreview( state.previewImage, 'image', state.previewFit );
320+
this.previewImage( state.previewImage, state.previewFit );
307321
}
308322
else if( state.previewVideo ) {
309-
this.showMediaPreview( state.previewVideo, 'video', state.previewFit );
323+
this.previewVideo( state.previewVideo, state.previewFit );
310324
}
311325
else {
312326
this.close();
@@ -318,27 +332,27 @@ export default class Overlay {
318332

319333
const target = event.target;
320334

321-
const linkTarget = target.closest( this.linkPreviewSelector );
322-
const mediaTarget = target.closest( this.mediaPreviewSelector );
335+
const linkTarget = target.closest( this.iframeTriggerSelector );
336+
const mediaTarget = target.closest( this.mediaTriggerSelector );
323337

324-
// Was a link preview clicked?
338+
// Was an iframe lightbox trigger clicked?
325339
if( linkTarget ) {
326340
if( event.metaKey || event.shiftKey || event.altKey ) {
327341
// Let the browser handle meta keys naturally so users can cmd+click, cmd+shift+click, shift+click, alt+click, etc.
328342
return;
329343
}
330344
let url = linkTarget.getAttribute( 'href' ) || linkTarget.getAttribute( 'data-preview-link' );
331345
if( url ) {
332-
this.showIframePreview( url );
346+
this.previewIframe( url );
333347
event.preventDefault();
334348
}
335349
}
336-
// Was a media preview clicked?
350+
// Was a media lightbox trigger clicked?
337351
else if( mediaTarget ) {
338352
if( mediaTarget.hasAttribute( 'data-preview-image' ) ) {
339353
let url = mediaTarget.dataset.previewImage || mediaTarget.getAttribute( 'src' );
340354
if( url ) {
341-
this.showMediaPreview( url, 'image', mediaTarget.dataset.previewFit );
355+
this.previewImage( url, mediaTarget.dataset.previewFit );
342356
event.preventDefault();
343357
}
344358
}
@@ -351,7 +365,7 @@ export default class Overlay {
351365
}
352366
}
353367
if( url ) {
354-
this.showMediaPreview( url, 'video', mediaTarget.dataset.previewFit );
368+
this.previewVideo( url, mediaTarget.dataset.previewFit );
355369
event.preventDefault();
356370
}
357371
}

js/reveal.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2766,10 +2766,12 @@ export default function( revealElement, options ) {
27662766
startEmbeddedContent: () => slideContent.startEmbeddedContent( currentSlide ),
27672767
stopEmbeddedContent: () => slideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } ),
27682768

2769-
// Preview management
2770-
showIframePreview: overlay.showIframePreview.bind( overlay ),
2771-
showMediaPreview: overlay.showMediaPreview.bind( overlay ),
2772-
showPreview: overlay.showIframePreview.bind( overlay ), // deprecated in favor of showIframePreview
2769+
// Lightbox previews
2770+
previewIframe: overlay.previewIframe.bind( overlay ),
2771+
previewImage: overlay.previewImage.bind( overlay ),
2772+
previewVideo: overlay.previewVideo.bind( overlay ),
2773+
2774+
showPreview: overlay.previewIframe.bind( overlay ), // deprecated in favor of showIframeLightbox
27732775
hidePreview: overlay.close.bind( overlay ),
27742776

27752777
// Adds or removes all internal event listeners

plugin/notes/notes.esm.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/notes/notes.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/notes/plugin.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,9 @@ const Plugin = () => {
209209
deck.on( 'overviewshown', post );
210210
deck.on( 'paused', post );
211211
deck.on( 'resumed', post );
212-
deck.on( 'showmediapreview', post );
213-
deck.on( 'showiframepreview', post );
212+
deck.on( 'previewiframe', post );
213+
deck.on( 'previewimage', post );
214+
deck.on( 'previewvideo', post );
214215
deck.on( 'closeoverlay', post );
215216

216217
// Post the initial state

plugin/notes/speaker-view.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,9 @@ <h4 class="label">Notes</h4>
420420
'fragmenthidden',
421421
'paused',
422422
'resumed',
423-
'showiframepreview',
424-
'showmediapreview',
423+
'previewiframe',
424+
'previewimage',
425+
'previewvideo',
425426
'closeoverlay'
426427
];
427428

0 commit comments

Comments
 (0)