@@ -29,7 +29,7 @@ class Deck extends React.Component {
2929 } ;
3030 }
3131 componentDidMount ( ) {
32- const slide = this . context . slide ;
32+ const slide = this . _getSlideIndex ( ) ;
3333 this . setState ( {
3434 lastSlide : slide
3535 } ) ;
@@ -85,7 +85,7 @@ class Deck extends React.Component {
8585 _goToSlide ( e ) {
8686 if ( e . key === "spectacle-slide" ) {
8787 const data = JSON . parse ( e . newValue ) ;
88- const slide = this . context . slide ;
88+ const slide = this . _getSlideIndex ( ) ;
8989 this . setState ( {
9090 lastSlide : slide || 0
9191 } ) ;
@@ -95,13 +95,13 @@ class Deck extends React.Component {
9595 }
9696 }
9797 _prevSlide ( ) {
98- const slide = this . context . slide ;
98+ const slide = this . _getSlideIndex ( ) ;
9999 this . setState ( {
100100 lastSlide : slide
101101 } ) ;
102- if ( this . _checkFragments ( slide , false ) || this . context . overview ) {
102+ if ( this . _checkFragments ( this . context . slide , false ) || this . context . overview ) {
103103 if ( slide > 0 ) {
104- this . context . router . replaceWith ( "/" + ( slide - 1 ) + this . _getSuffix ( ) ) ;
104+ this . context . router . replaceWith ( "/" + this . _getHash ( slide - 1 ) + this . _getSuffix ( ) ) ;
105105 localStorage . setItem ( "spectacle-slide" ,
106106 JSON . stringify ( { slide : slide - 1 , forward : false , time : Date . now ( ) } ) ) ;
107107 }
@@ -111,13 +111,13 @@ class Deck extends React.Component {
111111 }
112112 }
113113 _nextSlide ( ) {
114- const slide = this . context . slide ;
114+ const slide = this . _getSlideIndex ( ) ;
115115 this . setState ( {
116116 lastSlide : slide
117117 } ) ;
118- if ( this . _checkFragments ( slide , true ) || this . context . overview ) {
118+ if ( this . _checkFragments ( this . context . slide , true ) || this . context . overview ) {
119119 if ( slide < this . props . children . length - 1 ) {
120- this . context . router . replaceWith ( "/" + ( slide + 1 ) + this . _getSuffix ( ) ) ;
120+ this . context . router . replaceWith ( "/" + this . _getHash ( slide + 1 ) + this . _getSuffix ( ) ) ;
121121 localStorage . setItem ( "spectacle-slide" ,
122122 JSON . stringify ( { slide : slide + 1 , forward : true , time : Date . now ( ) } ) ) ;
123123 }
@@ -126,6 +126,13 @@ class Deck extends React.Component {
126126 JSON . stringify ( { slide, forward : true , time : Date . now ( ) } ) ) ;
127127 }
128128 }
129+ _getHash ( slide ) {
130+ let hash = slide ;
131+ if ( 'id' in this . props . children [ slide ] . props ) {
132+ hash = this . props . children [ slide ] . props . id ;
133+ }
134+ return hash ;
135+ }
129136 _checkFragments ( slide , forward ) {
130137 const store = this . context . flux . stores . SlideStore ;
131138 const fragments = store . getState ( ) . fragments ;
@@ -252,11 +259,25 @@ class Deck extends React.Component {
252259
253260 return 0 ;
254261 }
262+ _getSlideIndex ( ) {
263+ let index = 0 ;
264+ if ( ! parseInt ( this . context . slide ) ) {
265+ this . props . children . forEach ( ( slide , i ) => {
266+ if ( slide . props . id === this . context . slide ) {
267+ index = i ;
268+ }
269+ } ) ;
270+ } else {
271+ index = parseInt ( this . context . slide ) ;
272+ }
273+ return index ;
274+ }
255275 _renderSlide ( ) {
256- const slide = this . context . slide ;
276+ const slide = this . _getSlideIndex ( ) ;
257277 const child = this . props . children [ slide ] ;
258278 return cloneWithProps ( child , {
259279 key : slide ,
280+ hash : this . context . slide ,
260281 slideIndex : slide ,
261282 lastSlide : this . state . lastSlide ,
262283 transition : child . props . transition . length ?
@@ -296,11 +317,11 @@ class Deck extends React.Component {
296317 let componentToRender ;
297318 if ( this . context . presenter ) {
298319 componentToRender = ( < Presenter slides = { this . props . children }
299- slide = { this . context . slide } lastSlide = { this . state . lastSlide } /> ) ;
320+ slide = { this . _getSlideIndex ( ) } lastSlide = { this . state . lastSlide } /> ) ;
300321 } else if ( this . context . export ) {
301322 componentToRender = < Export slides = { this . props . children } /> ;
302323 } else if ( this . context . overview ) {
303- componentToRender = < Overview slides = { this . props . children } slide = { this . context . slide } /> ;
324+ componentToRender = < Overview slides = { this . props . children } slide = { this . _getSlideIndex ( ) } /> ;
304325 } else {
305326 componentToRender = ( < TransitionGroup component = "div" style = { [ styles . transition ] } >
306327 { this . _renderSlide ( ) }
@@ -316,7 +337,7 @@ class Deck extends React.Component {
316337 { componentToRender }
317338 { ! this . context . export ? < Progress
318339 items = { this . props . children }
319- currentSlide = { this . context . slide }
340+ currentSlide = { this . _getSlideIndex ( ) }
320341 type = { this . props . progress } /> : "" }
321342 < Style rules = { assign ( this . context . styles . global , globals ) } />
322343 </ div >
0 commit comments