@@ -4,7 +4,6 @@ const IWSY = (playerElement, text) => {
4
4
5
5
let player = playerElement ;
6
6
let script = text ;
7
- let clicked = false ;
8
7
9
8
// Set up all the blocks
10
9
const setupBlocks = ( ) => {
@@ -17,71 +16,14 @@ const IWSY = (playerElement, text) => {
17
16
}
18
17
} ;
19
18
20
- const release = step => {
21
- player . style . cursor = 'none' ;
22
- document . removeEventListener ( `click` , release ) ;
23
- document . onkeydown = null ;
24
- step . next ( ) ;
25
- } ;
26
-
27
- const doManual = step => {
28
- player . style . cursor = 'pointer' ;
29
- document . addEventListener ( `click` , release ) ;
30
- document . onkeydown = ( event ) => {
31
- switch ( event . code ) {
32
- case `Space` :
33
- case `ArrowRight` :
34
- document . onkeydown = null ;
35
- release ( step ) ;
36
- break ;
37
- case `ArrowLeft` :
38
- break ;
39
- case `Enter` :
40
- player . style . cursor = 'none' ;
41
- document . addEventListener ( `click` , onClick ) ;
42
- script . runMode = `auto` ;
43
- release ( step ) ;
44
- break ;
45
- }
46
- return true ;
47
- } ;
48
- } ;
49
-
50
- const onClick = ( ) => {
51
- clicked = true ;
52
- } ;
53
-
54
- const hold = step => {
55
- if ( script . speed === `scan` ) {
56
- step . next ( ) ;
57
- return ;
58
- }
59
- script . stepping = false ;
60
- if ( script . runMode === `manual` ) {
61
- doManual ( step ) ;
62
- } else {
63
- if ( clicked ) {
64
- document . removeEventListener ( `click` , onClick ) ;
65
- clicked = false ;
66
- script . runMode = `manual` ;
67
- doManual ( step ) ;
68
- } else {
69
- setTimeout ( ( ) => {
70
- step . next ( ) ;
71
- } , step . duration * 1000 ) ;
72
- }
73
- }
74
- } ;
75
-
76
19
const pause = step => {
77
20
if ( script . speed === `scan` ) {
78
21
step . next ( ) ;
79
22
return ;
80
23
}
81
- script . stepping = false ;
82
24
setTimeout ( ( ) => {
83
25
step . next ( ) ;
84
- } , step . duration * 1000 ) ;
26
+ } , script . runMode === `manual` ? 0 : step . duration * 1000 ) ;
85
27
} ;
86
28
87
29
// Get the bounding rectangle of a block
@@ -217,9 +159,6 @@ const IWSY = (playerElement, text) => {
217
159
}
218
160
}
219
161
}
220
- if ( script . speed === `scan` && step . index === script . scanTarget ) {
221
- script . stepping = false ;
222
- }
223
162
step . next ( ) ;
224
163
} ;
225
164
@@ -235,10 +174,11 @@ const IWSY = (playerElement, text) => {
235
174
}
236
175
}
237
176
}
238
- if ( script . speed === `scan` && step . index === script . scanTarget ) {
239
- script . stepping = false ;
177
+ if ( script . runMode === `manual` ) {
178
+ enterManualMode ( step ) ;
179
+ } else {
180
+ step . next ( ) ;
240
181
}
241
- step . next ( ) ;
242
182
} ;
243
183
244
184
const show = step => {
@@ -294,10 +234,13 @@ const IWSY = (playerElement, text) => {
294
234
block . element . style . opacity = upDown ? 1 : 0 ;
295
235
block . element . style . display = upDown ? `block` :`none` ;
296
236
}
297
- script . stepping = false ;
298
237
clearInterval ( interval ) ;
299
238
if ( ! continueFlag ) {
300
- step . next ( ) ;
239
+ if ( script . runMode === `manual` ) {
240
+ enterManualMode ( step ) ;
241
+ } else {
242
+ step . next ( ) ;
243
+ }
301
244
}
302
245
}
303
246
} catch ( err ) {
@@ -361,6 +304,7 @@ const IWSY = (playerElement, text) => {
361
304
text . innerHTML = newText ;
362
305
363
306
const animSteps = Math . round ( step . duration * 25 ) ;
307
+ const continueFlag = step . continue ;
364
308
let animStep = 0 ;
365
309
const interval = setInterval ( ( ) => {
366
310
if ( animStep < animSteps ) {
@@ -369,7 +313,6 @@ const IWSY = (playerElement, text) => {
369
313
element . style . opacity = ratio ;
370
314
animStep ++ ;
371
315
} else {
372
- script . stepping = false ;
373
316
clearInterval ( interval ) ;
374
317
block . textPanel . innerHTML = newText ;
375
318
if ( content . url ) {
@@ -378,12 +321,16 @@ const IWSY = (playerElement, text) => {
378
321
block . element . style [ `background-size` ] = `cover` ;
379
322
block . element . style . opacity = 1.0 ;
380
323
removeElement ( element ) ;
381
- if ( ! step . continue ) {
382
- step . next ( ) ;
324
+ if ( ! continueFlag ) {
325
+ if ( script . runMode === `manual` ) {
326
+ enterManualMode ( step ) ;
327
+ } else {
328
+ step . next ( ) ;
329
+ }
383
330
}
384
331
}
385
332
} , 40 ) ;
386
- if ( step . continue ) {
333
+ if ( continueFlag ) {
387
334
step . next ( ) ;
388
335
}
389
336
}
@@ -532,11 +479,14 @@ const IWSY = (playerElement, text) => {
532
479
doTransitionStep ( block , target , ratio ) ;
533
480
animStep ++ ;
534
481
} else {
535
- script . stepping = false ;
536
482
clearInterval ( interval ) ;
537
483
setFinalState ( block , target ) ;
538
484
if ( ! continueFlag ) {
539
- step . next ( ) ;
485
+ if ( script . runMode === `manual` ) {
486
+ enterManualMode ( step ) ;
487
+ } else {
488
+ step . next ( ) ;
489
+ }
540
490
}
541
491
}
542
492
} , 40 ) ;
@@ -591,6 +541,7 @@ const IWSY = (playerElement, text) => {
591
541
document . title = step . title ;
592
542
}
593
543
if ( step . css ) {
544
+ console . log ( `Set styles at ${ step . index } ` ) ;
594
545
setHeadStyle ( step . css . split ( `%0a` ) . join ( `\n` ) ) ;
595
546
}
596
547
const aspect = step [ `aspect ratio` ] ;
@@ -763,14 +714,49 @@ const IWSY = (playerElement, text) => {
763
714
document . head . appendChild ( style ) ;
764
715
} ;
765
716
717
+ // Release the presentation to continue
718
+ const release = ( ) => {
719
+ player . style . cursor = 'none' ;
720
+ document . removeEventListener ( `click` , release ) ;
721
+ document . onkeydown = null ;
722
+ doStep ( script . nextStep ) ;
723
+ } ;
724
+
725
+ // Manual mode. Set up listeners and wait for the user
726
+ const enterManualMode = step => {
727
+ script . nextStep = step ? script . steps [ step . index + 1 ] : script . steps [ 0 ] ;
728
+ player . style . cursor = 'pointer' ;
729
+ document . addEventListener ( `click` , release ) ;
730
+ document . onkeydown = ( event ) => {
731
+ switch ( event . code ) {
732
+ case `Space` :
733
+ case `ArrowRight` :
734
+ document . onkeydown = null ;
735
+ script . runMode = `manual` ;
736
+ release ( ) ;
737
+ break ;
738
+ case `ArrowLeft` :
739
+ break ;
740
+ case `Enter` :
741
+ document . addEventListener ( `click` , ( ) => {
742
+ script . runMode = `manual` ;
743
+ } ) ;
744
+ player . style . cursor = 'none' ;
745
+ script . runMode = `auto` ;
746
+ release ( ) ;
747
+ break ;
748
+ }
749
+ return true ;
750
+ } ;
751
+ } ;
752
+
766
753
// Initialize the script
767
754
const initScript = ( ) => {
768
755
document . onkeydown = null ;
769
756
player . style . position = `relative` ;
770
757
player . style . overflow = `hidden` ;
771
758
player . style . cursor = 'none' ;
772
759
script . speed = `normal` ;
773
- script . singleStep = true ;
774
760
script . labels = { } ;
775
761
script . stop = false ;
776
762
removeStyles ( ) ;
@@ -788,16 +774,19 @@ const IWSY = (playerElement, text) => {
788
774
script . labels [ step . label ] = index ;
789
775
}
790
776
if ( index < script . steps . length - 1 ) {
777
+ const nextStep = script . steps [ step . index + 1 ] ;
791
778
step . next = ( ) => {
792
- if ( script . runMode == `auto` || ( script . singleStep && script . speed === `scan` ) ) {
779
+ if ( script . runMode == `auto` || script . speed === `scan` ) {
793
780
setTimeout ( ( ) => {
794
781
if ( script . stop ) {
795
782
script . stop = false ;
796
783
restoreCursor ( ) ;
797
784
} else {
798
- doStep ( script . steps [ step . index + 1 ] ) ;
785
+ doStep ( nextStep ) ;
799
786
}
800
787
} , 0 ) ;
788
+ } else {
789
+ doStep ( nextStep ) ;
801
790
}
802
791
}
803
792
}
@@ -817,7 +806,6 @@ const IWSY = (playerElement, text) => {
817
806
show,
818
807
hide,
819
808
pause,
820
- hold,
821
809
fadeup,
822
810
fadedown,
823
811
crossfade,
@@ -874,14 +862,10 @@ const IWSY = (playerElement, text) => {
874
862
875
863
// Go to a specified step number
876
864
const gotoStep = ( target ) => {
877
- if ( ! script . stepping ) {
878
- script . stepping = true ;
879
- script . scanTarget = target ;
880
- script . singleStep = true ;
881
- script . runMode = `manual` ;
882
- scan ( ) ;
883
- }
884
- } ;
865
+ script . scanTarget = target ;
866
+ script . runMode = `manual` ;
867
+ scan ( ) ;
868
+ } ;
885
869
886
870
// Show a block
887
871
const block = blockIndex => {
@@ -940,6 +924,8 @@ const IWSY = (playerElement, text) => {
940
924
941
925
// Run the presentation
942
926
const run = ( mode , then ) => {
927
+ script . then = then ;
928
+ initScript ( ) ;
943
929
if ( mode === `fullscreen` ) {
944
930
if ( document . fullscreenElement ) {
945
931
document . exitFullscreen ( ) ;
@@ -948,27 +934,18 @@ const IWSY = (playerElement, text) => {
948
934
document . onfullscreenchange = ( ) => {
949
935
if ( document . fullscreenElement ) {
950
936
player = document . fullscreenElement ;
951
- runPresentation ( then ) ;
937
+ script . runMode = `manual` ;
938
+ enterManualMode ( null ) ;
952
939
} else {
953
940
player = playerElement ;
954
941
}
955
942
} ;
956
943
}
957
944
} else {
958
- runPresentation ( then ) ;
959
- }
960
- }
961
-
962
- const runPresentation = then => {
963
- if ( ! script . stepping ) {
964
- initScript ( ) ;
965
945
script . runMode = `auto` ;
966
- script . speed = `normal` ;
967
- script . singleStep = false ;
968
- script . then = then ;
969
946
doStep ( script . steps [ 0 ] ) ;
970
947
}
971
- } ;
948
+ }
972
949
973
950
// Stop the run
974
951
const stop = ( ) => {
@@ -990,10 +967,6 @@ const IWSY = (playerElement, text) => {
990
967
991
968
///////////////////////////////////////////////////////////////////////////
992
969
993
- document . removeEventListener ( `click` , init ) ;
994
- if ( script . runMode === `auto` ) {
995
- document . addEventListener ( `click` , onClick ) ;
996
- }
997
970
setupShowdown ( ) ;
998
971
initScript ( ) ;
999
972
return {
0 commit comments