Guest User

Untitled

a guest
Dec 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { FormattedMessage } from 'react-intl'
  4. import IconButton from 'material-ui/IconButton'
  5. import FullscreenIcon from 'material-ui/svg-icons/navigation/fullscreen'
  6. import FullscreenExitIcon from 'material-ui/svg-icons/navigation/fullscreen-exit'
  7.  
  8.  
  9. export function toggleFullScreen () {
  10. if (!fullscreenEnabled()) {
  11. // ENABLE FULLSCREEN MODE
  12. if (document.documentElement.requestFullscreen) {
  13. document.documentElement.requestFullscreen()
  14. } else if (document.documentElement.msRequestFullscreen) {
  15. document.documentElement.msRequestFullscreen()
  16. } else if (document.documentElement.mozRequestFullScreen) {
  17. document.documentElement.mozRequestFullScreen()
  18. } else if (document.documentElement.webkitRequestFullscreen) {
  19. document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)
  20. }
  21. return true
  22. } else {
  23. // DISABLE FULLSCREEN MODE
  24. if (document.exitFullscreen) {
  25. document.exitFullscreen()
  26. } else if (document.msExitFullscreen) {
  27. document.msExitFullscreen()
  28. } else if (document.mozCancelFullScreen) {
  29. document.mozCancelFullScreen()
  30. } else if (document.webkitExitFullscreen) {
  31. document.webkitExitFullscreen()
  32. }
  33. return false
  34. }
  35. }
  36.  
  37. export function fullscreenEnabled() {
  38. return !(
  39. !document.fullscreenElement
  40. && !document.mozFullScreenElement
  41. && !document.webkitFullscreenElement
  42. && !document.msFullscreenElement
  43. )
  44. }
  45.  
  46. export function isFullscreen() {
  47. return 1 >= outerHeight - innerHeight
  48. }
  49.  
  50.  
  51. class FullscreenIconButton extends React.Component {
  52. static propTypes = {
  53. tooltipPosition: PropTypes.string,
  54. }
  55. static defaultProps = { }
  56.  
  57. constructor(props, context) {
  58. super(props, context)
  59. this.state = {
  60. isFullscreen: isFullscreen(),
  61. }
  62. }
  63.  
  64. componentDidMount() {
  65. window.addEventListener('resize', this.onResize)
  66. }
  67. componentWillUnmount() {
  68. window.removeEventListener('resize', this.onResize)
  69. }
  70.  
  71.  
  72. onResize = () => {
  73. this.setState({ isFullscreen: isFullscreen() })
  74. }
  75. onToggleFullscreen = () => {
  76. toggleFullScreen()
  77. }
  78.  
  79.  
  80. render() {
  81. const { isFullscreen } = this.state
  82.  
  83. return (
  84. <IconButton
  85. className={`icon_button ${isFullscreen ? 'active' : ''}`}
  86. onClick={this.onToggleFullscreen}
  87. tooltip={isFullscreen
  88. ? <FormattedMessage id='main.switch_to_window' defaultMessage='switch to window' />
  89. : <FormattedMessage id='main.switch_to_fullscreen' defaultMessage='switch to fullscreen' />
  90. }
  91. tooltipPosition={this.props.tooltipPosition}
  92. >
  93. {isFullscreen ? <FullscreenIcon /> : <FullscreenExitIcon />}
  94. </IconButton>
  95. )
  96. }
  97. }
  98.  
  99.  
  100. export default FullscreenIconButton
Add Comment
Please, Sign In to add comment