@@ -110,6 +110,12 @@ const TimeUI = {
110110 `</div>` ,
111111 `</div>` ,
112112 `<div id="mmgisTimeUIActionsRight">` ,
113+ `<div id="mmgisTimeUIFitTime" class="mmgisTimeUIButton">` ,
114+ `<i class='mdi mdi-view-carousel-outline mdi-24px'></i>` ,
115+ `</div>` ,
116+ `<div id="mmgisTimeUIFitWindow" class="mmgisTimeUIButton">` ,
117+ `<i class='mdi mdi-view-array-outline mdi-24px'></i>` ,
118+ `</div>` ,
113119 `<div id="mmgisTimeUIPresent" class="mmgisTimeUIButton">` ,
114120 `<i class='mdi mdi-clock-end mdi-24px'></i>` ,
115121 `</div>` ,
@@ -203,17 +209,14 @@ const TimeUI = {
203209 }
204210 TimeUI . _timelineDragging = true
205211 $ ( '#mmgisTimeUITimelineSlider' ) . css ( { pointerEvents : 'none' } )
206- $ ( '#mmgisTimeUITimelineInner ' ) . on ( 'mousemove' , TimeUI . _timelineDrag )
212+ $ ( 'body ' ) . on ( 'mousemove' , TimeUI . _timelineDrag )
207213 } )
208214 $ ( 'body' ) . on ( 'mouseup' , function ( ) {
209215 if ( TimeUI . _timelineDragging === true ) {
210216 $ ( '#mmgisTimeUITimelineSlider' ) . css ( {
211217 pointerEvents : 'inherit' ,
212218 } )
213- $ ( '#mmgisTimeUITimelineInner' ) . off (
214- 'mousemove' ,
215- TimeUI . _timelineDrag
216- )
219+ $ ( '#mmgisTimeUITimelineInner' ) . off ( 'body' , TimeUI . _timelineDrag )
217220 TimeUI . _timelineDragging = false
218221 }
219222 } )
@@ -347,6 +350,16 @@ const TimeUI = {
347350 placement : 'top' ,
348351 theme : 'blue' ,
349352 } )
353+ tippy ( '#mmgisTimeUIFitTime' , {
354+ content : 'Fit Time to Window' ,
355+ placement : 'top' ,
356+ theme : 'blue' ,
357+ } )
358+ tippy ( '#mmgisTimeUIFitWindow' , {
359+ content : 'Fit Window to Time' ,
360+ placement : 'top' ,
361+ theme : 'blue' ,
362+ } )
350363 tippy ( '#mmgisTimeUIPresent' , {
351364 content : 'Present' ,
352365 placement : 'top' ,
@@ -565,6 +578,8 @@ const TimeUI = {
565578 TimeUI . startTempus . dates . setValue ( parsedStart )
566579
567580 $ ( '#mmgisTimeUIPlay' ) . on ( 'click' , TimeUI . togglePlay )
581+ $ ( '#mmgisTimeUIFitTime' ) . on ( 'click' , TimeUI . fitTimeToWindow )
582+ $ ( '#mmgisTimeUIFitWindow' ) . on ( 'click' , TimeUI . fitWindowToTime )
568583 $ ( '#mmgisTimeUIPresent' ) . on ( 'click' , TimeUI . toggleTimeNow )
569584
570585 TimeUI . _remakeTimeSlider ( )
@@ -687,6 +702,53 @@ const TimeUI = {
687702
688703 TimeUI . _remakeTimeSlider ( true )
689704 } ,
705+ fitTimeToWindow ( ) {
706+ let nextStart
707+ let nextEnd
708+
709+ nextStart =
710+ TimeUI . _timelineEndTimestamp != null
711+ ? TimeUI . _timelineStartTimestamp
712+ : 0
713+ nextEnd =
714+ TimeUI . _timelineStartTimestamp != null
715+ ? TimeUI . _timelineEndTimestamp
716+ : 100
717+
718+ TimeUI . updateTimes ( nextStart , nextEnd , nextEnd )
719+ } ,
720+ fitWindowToTime ( ) {
721+ const rangeMode =
722+ TimeUI . modes [ TimeUI . modeIndex ] === 'Range' ? true : false
723+
724+ let nextStart
725+ let nextEnd
726+ if ( rangeMode ) {
727+ // Match window edges exactly with time range
728+ nextStart = TimeUI . removeOffset ( TimeUI . _startTimestamp )
729+ nextEnd = TimeUI . removeOffset ( TimeUI . getCurrentTimestamp ( ) )
730+ } else {
731+ // Adjust window such that Point is in its center
732+ const existingMin =
733+ TimeUI . _timelineEndTimestamp != null
734+ ? TimeUI . _timelineStartTimestamp
735+ : 0
736+ const existingMax =
737+ TimeUI . _timelineStartTimestamp != null
738+ ? TimeUI . _timelineEndTimestamp
739+ : 100
740+ const buffer = ( existingMax - existingMin ) / 2
741+ nextStart = TimeUI . removeOffset (
742+ TimeUI . getCurrentTimestamp ( ) - buffer
743+ )
744+ nextEnd = TimeUI . removeOffset ( TimeUI . getCurrentTimestamp ( ) + buffer )
745+ }
746+ TimeUI . _drawTimeLine ( nextStart , nextEnd )
747+
748+ clearTimeout ( TimeUI . _panHistoTimeout )
749+ $ ( '#mmgisTimeUITimelineHisto' ) . empty ( )
750+ TimeUI . _makeHistogram ( )
751+ } ,
690752 toggleTimeNow ( force ) {
691753 if ( ( ! TimeUI . now && typeof force != 'boolean' ) || force === true ) {
692754 $ ( '#mmgisTimeUIPresent' )
0 commit comments