@@ -428,9 +428,9 @@ export default class ContentWrap extends Component {
428428 this . props . onLogin ( ) ;
429429 return ;
430430 }
431- const png = await this . getPngBlob ( ) ;
432- saveAs ( png , 'zenuml.png' ) ;
433- mixpanel . track ( { event : 'downloadPng' , category : 'ui' } ) ;
431+ const png = await this . getPngBlob ( ) ;
432+ saveAs ( png , 'zenuml.png' ) ;
433+ mixpanel . track ( { event : 'downloadPng' , category : 'ui' } ) ;
434434 }
435435
436436 async getPngBlob ( ) {
@@ -818,11 +818,42 @@ export default class ContentWrap extends Component {
818818 }
819819
820820 async toggleFullscreen ( ) {
821- if ( this . frame ) {
822- if ( document . fullscreenElement ) {
823- await document . exitFullscreen ( ) ;
824- } else {
825- await this . frame . requestFullscreen ( ) ;
821+ const demoElement = document . getElementById ( 'js-demo-side' ) ;
822+ if ( ! document . fullscreenElement ) {
823+ if ( demoElement . requestFullscreen ) {
824+ demoElement . requestFullscreen ( ) ;
825+ trackEvent ( 'ui' , 'enterFullscreen' ) ;
826+ mixpanel . track ( 'Enter Fullscreen' ) ;
827+ } else if ( demoElement . mozRequestFullScreen ) { /* Firefox */
828+ demoElement . mozRequestFullScreen ( ) ;
829+ trackEvent ( 'ui' , 'enterFullscreen' ) ;
830+ mixpanel . track ( 'Enter Fullscreen' ) ;
831+ } else if ( demoElement . webkitRequestFullscreen ) { /* Chrome, Safari & Opera */
832+ demoElement . webkitRequestFullscreen ( ) ;
833+ trackEvent ( 'ui' , 'enterFullscreen' ) ;
834+ mixpanel . track ( 'Enter Fullscreen' ) ;
835+ } else if ( demoElement . msRequestFullscreen ) { /* IE/Edge */
836+ demoElement . msRequestFullscreen ( ) ;
837+ trackEvent ( 'ui' , 'enterFullscreen' ) ;
838+ mixpanel . track ( 'Enter Fullscreen' ) ;
839+ }
840+ } else {
841+ if ( document . exitFullscreen ) {
842+ document . exitFullscreen ( ) ;
843+ trackEvent ( 'ui' , 'exitFullscreen' ) ;
844+ mixpanel . track ( 'Exit Fullscreen' ) ;
845+ } else if ( document . mozCancelFullScreen ) { /* Firefox */
846+ document . mozCancelFullScreen ( ) ;
847+ trackEvent ( 'ui' , 'exitFullscreen' ) ;
848+ mixpanel . track ( 'Exit Fullscreen' ) ;
849+ } else if ( document . webkitExitFullscreen ) { /* Chrome, Safari and Opera */
850+ document . webkitExitFullscreen ( ) ;
851+ trackEvent ( 'ui' , 'exitFullscreen' ) ;
852+ mixpanel . track ( 'Exit Fullscreen' ) ;
853+ } else if ( document . msExitFullscreen ) { /* IE/Edge */
854+ document . msExitFullscreen ( ) ;
855+ trackEvent ( 'ui' , 'exitFullscreen' ) ;
856+ mixpanel . track ( 'Exit Fullscreen' ) ;
826857 }
827858 }
828859 }
@@ -971,16 +1002,6 @@ export default class ContentWrap extends Component {
9711002 { window . zenumlDesktop ? null : (
9721003 < div className = "shrink-0 relative z-10 bg-gray-200 py-2 px-6 flex justify-between" >
9731004 < div className = "flex gap-4 items-center text-black-100" >
974- < button
975- className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
976- aria-label = "Toggle Fullscreen"
977- onClick = { this . toggleFullscreen . bind ( this ) }
978- >
979- < svg className = "w-5 h-5 fill-current" >
980- < use xlinkHref = "#fullscreen-icon" />
981- </ svg >
982- < span > Fullscreen</ span >
983- </ button >
9841005 < button
9851006 onClick = { ( ) => this . props . layoutBtnClickHandler ( 1 ) }
9861007 id = "layoutBtn1"
@@ -1014,42 +1035,53 @@ export default class ContentWrap extends Component {
10141035 </ div >
10151036 < div className = "flex items-center gap-3 text-sm font-semibold" >
10161037 < button
1017- className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
1018- aria-label = "Export as PNG"
1019- onClick = { this . exportPngClickHandler . bind ( this ) }
1038+ className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
1039+ aria-label = "Toggle Fullscreen"
1040+ onClick = { this . toggleFullscreen . bind ( this ) }
1041+ title = "Toggle Fullscreen Presenting Mode"
1042+ >
1043+ < svg className = "w-5 h-5 fill-current" >
1044+ < use xlinkHref = "#fullscreen-icon" />
1045+ </ svg >
1046+ < span > Present</ span >
1047+ </ button >
1048+ < button
1049+ className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
1050+ aria-label = "Export as PNG"
1051+ onClick = { this . exportPngClickHandler . bind ( this ) }
10201052 >
10211053 < svg className = "w-5 h-5 fill-current" >
1022- < use xlinkHref = "#icon-download" />
1054+ < use xlinkHref = "#icon-download" />
10231055 </ svg >
10241056 < span > PNG</ span >
10251057 </ button >
10261058 < button
1027- className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
1028- aria-label = "Copy PNG to Clipboard"
1029- onClick = { this . copyImageClickHandler . bind ( this ) }
1059+ className = "px-3 py-1 bg-gray-300 text-gray-600 flex items-center gap-1.5 rounded-lg hover:bg-gray-400 duration-200"
1060+ aria-label = "Copy PNG to Clipboard"
1061+ onClick = { this . copyImageClickHandler . bind ( this ) }
10301062 >
10311063 < svg className = "w-5 h-5 fill-current" >
1032- < use xlinkHref = "#icon-copy" />
1064+ < use xlinkHref = "#icon-copy" />
10331065 </ svg >
10341066 < span > Copy PNG</ span >
10351067 </ button >
10361068 </ div >
10371069 </ div >
10381070 ) }
10391071 < Console
1040- isConsoleOpen = { this . state . isConsoleOpen }
1041- onConsoleHeaderDblClick = { this . consoleHeaderDblClickHandler . bind (
1042- this ,
1043- ) }
1044- onClearConsoleBtnClick = { this . clearConsoleBtnClickHandler . bind (
1045- this ,
1046- ) }
1047- toggleConsole = { this . toggleConsole . bind ( this ) }
1048- onEvalInputKeyup = { this . evalConsoleExpr . bind ( this ) }
1049- onReady = { ( el ) => ( this . consoleCm = el ) }
1072+ isConsoleOpen = { this . state . isConsoleOpen }
1073+ onConsoleHeaderDblClick = { this . consoleHeaderDblClickHandler . bind (
1074+ this ,
1075+ ) }
1076+ onClearConsoleBtnClick = { this . clearConsoleBtnClickHandler . bind (
1077+ this ,
1078+ ) }
1079+ toggleConsole = { this . toggleConsole . bind ( this ) }
1080+ onEvalInputKeyup = { this . evalConsoleExpr . bind ( this ) }
1081+ onReady = { ( el ) => ( this . consoleCm = el ) }
10501082 />
10511083 < CssSettingsModal
1052- show = { this . state . isCssSettingsModalOpen }
1084+ show = { this . state . isCssSettingsModalOpen }
10531085 closeHandler = { async ( ) =>
10541086 await this . setState ( { isCssSettingsModalOpen : false } )
10551087 }
0 commit comments