51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
|
import { enterFullscreen } from '../utils/util.js'
|
||
|
|
||
|
/**
|
||
|
* Handles all reveal.js keyboard interactions.
|
||
|
*/
|
||
|
export default class Location {
|
||
|
|
||
|
constructor( Reveal ) {
|
||
|
|
||
|
this.Reveal = Reveal;
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return a hash URL that will resolve to the given slide location.
|
||
|
*
|
||
|
* @param {HTMLElement} [slide=currentSlide] The slide to link to
|
||
|
*/
|
||
|
getHash( slide = this.Reveal.getCurrentSlide() ) {
|
||
|
|
||
|
let url = '/';
|
||
|
|
||
|
// Attempt to create a named link based on the slide's ID
|
||
|
let id = slide ? slide.getAttribute( 'id' ) : null;
|
||
|
if( id ) {
|
||
|
id = encodeURIComponent( id );
|
||
|
}
|
||
|
|
||
|
let index = this.Reveal.getIndices( slide );
|
||
|
if( !this.Reveal.getConfig().fragmentInURL ) {
|
||
|
index.f = undefined;
|
||
|
}
|
||
|
|
||
|
// If the current slide has an ID, use that as a named link,
|
||
|
// but we don't support named links with a fragment index
|
||
|
if( typeof id === 'string' && id.length && index.f === undefined ) {
|
||
|
url = '/' + id;
|
||
|
}
|
||
|
// Otherwise use the /h/v index
|
||
|
else {
|
||
|
let hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;
|
||
|
if( index.h > 0 || index.v > 0 || index.f !== undefined ) url += index.h + hashIndexBase;
|
||
|
if( index.v > 0 || index.f !== undefined ) url += '/' + (index.v + hashIndexBase );
|
||
|
if( index.f !== undefined ) url += '/' + index.f;
|
||
|
}
|
||
|
|
||
|
return url;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|