Skip to content

Commit 530016b

Browse files
authored
#77 Close fullscreen using the control fix (#81)
1 parent 62e5232 commit 530016b

File tree

3 files changed

+85
-31
lines changed

3 files changed

+85
-31
lines changed

src/DefaultPlayer/DefaultPlayer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import {
55
setVolume,
66
showTrack,
77
toggleTracks,
8-
fullscreen,
98
toggleMute,
109
togglePause,
1110
setCurrentTime,
11+
toggleFullscreen,
1212
getPercentagePlayed,
1313
getPercentageBuffered
1414
} from './../video/api';
@@ -134,7 +134,7 @@ export default videoConnect(
134134
}
135135
}),
136136
(videoEl, state) => ({
137-
onFullscreenClick: () => fullscreen(videoEl.parentElement),
137+
onFullscreenClick: () => toggleFullscreen(videoEl.parentElement),
138138
onVolumeClick: () => toggleMute(videoEl, state),
139139
onCaptionsClick: () => toggleTracks(state),
140140
onPlayPauseClick: () => togglePause(videoEl, state),

src/video/api.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,26 @@ export const toggleMute = (videoEl, { volume, muted }) => {
4040
}
4141
};
4242

43-
export const fullscreen = (videoEl) => {
44-
if (videoEl.requestFullscreen) {
45-
videoEl.requestFullscreen();
46-
} else if (videoEl.msRequestFullscreen) {
47-
videoEl.msRequestFullscreen();
48-
} else if (videoEl.mozRequestFullScreen) {
49-
videoEl.mozRequestFullScreen();
50-
} else if (videoEl.webkitRequestFullscreen) {
51-
videoEl.webkitRequestFullscreen();
43+
export const toggleFullscreen = (videoEl) => {
44+
videoEl.requestFullScreen =
45+
videoEl.requestFullscreen
46+
|| videoEl.msRequestFullscreen
47+
|| videoEl.mozRequestFullScreen
48+
|| videoEl.webkitRequestFullscreen;
49+
document.exitFullscreen =
50+
document.exitFullscreen
51+
|| document.msExitFullscreen
52+
|| document.mozCancelFullScreen
53+
|| document.webkitExitFullscreen;
54+
const fullscreenElement =
55+
document.fullscreenElement
56+
|| document.msFullscreenElement
57+
|| document.mozFullScreenElement
58+
|| document.webkitFullscreenElement;
59+
if (fullscreenElement === videoEl) {
60+
document.exitFullscreen();
61+
} else {
62+
videoEl.requestFullScreen();
5263
}
5364
};
5465

src/video/api.test.js

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import {
44
setVolume,
55
showTrack,
66
toggleMute,
7-
fullscreen,
87
hideTracks,
98
togglePause,
109
toggleTracks,
1110
setCurrentTime,
11+
toggleFullscreen,
1212
getPercentagePlayed
1313
} from './api';
1414

@@ -119,29 +119,72 @@ describe('api', () => {
119119
});
120120
});
121121

122-
describe('fullscreen', () => {
123-
it('requestsFullscreen', () => {
124-
videoElMock.requestFullscreen = jest.fn();
125-
fullscreen(videoElMock);
126-
expect(videoElMock.requestFullscreen).toHaveBeenCalled();
127-
});
122+
describe('toggleFullscreen', () => {
123+
describe('going fullscreen', () => {
124+
it('requestsFullscreen', () => {
125+
videoElMock.requestFullscreen = jest.fn();
126+
toggleFullscreen(videoElMock);
127+
expect(videoElMock.requestFullscreen).toHaveBeenCalled();
128+
});
128129

129-
it('requestsFullscreen for ms', () => {
130-
videoElMock.msRequestFullscreen = jest.fn();
131-
fullscreen(videoElMock);
132-
expect(videoElMock.msRequestFullscreen).toHaveBeenCalled();
133-
});
130+
it('requestsFullscreen for ms', () => {
131+
videoElMock.msRequestFullscreen = jest.fn();
132+
toggleFullscreen(videoElMock);
133+
expect(videoElMock.msRequestFullscreen).toHaveBeenCalled();
134+
});
134135

135-
it('requestsFullscreen for moz', () => {
136-
videoElMock.mozRequestFullScreen = jest.fn();
137-
fullscreen(videoElMock);
138-
expect(videoElMock.mozRequestFullScreen).toHaveBeenCalled();
136+
it('requestsFullscreen for moz', () => {
137+
videoElMock.mozRequestFullScreen = jest.fn();
138+
toggleFullscreen(videoElMock);
139+
expect(videoElMock.mozRequestFullScreen).toHaveBeenCalled();
140+
});
141+
142+
it('requestsFullscreen for webkit', () => {
143+
videoElMock.webkitRequestFullscreen = jest.fn();
144+
toggleFullscreen(videoElMock);
145+
expect(videoElMock.webkitRequestFullscreen).toHaveBeenCalled();
146+
});
139147
});
140148

141-
it('requestsFullscreen for webkit', () => {
142-
videoElMock.webkitRequestFullscreen = jest.fn();
143-
fullscreen(videoElMock);
144-
expect(videoElMock.webkitRequestFullscreen).toHaveBeenCalled();
149+
describe('exiting fullscreen', () => {
150+
beforeEach(() => {
151+
document.exitFullscreen = undefined;
152+
document.msExitFullscreen = undefined;
153+
document.mozCancelFullScreen = undefined;
154+
document.webkitExitFullscreen = undefined;
155+
document.fullscreenElement = undefined;
156+
document.msFullscreenElement = undefined;
157+
document.mozFullScreenElement = undefined;
158+
document.webkitFullscreenElement = undefined;
159+
});
160+
161+
it('exitFullscreen', () => {
162+
document.fullscreenElement = videoElMock;
163+
document.exitFullscreen = jest.fn();
164+
toggleFullscreen(videoElMock);
165+
expect(document.exitFullscreen).toHaveBeenCalled();
166+
});
167+
168+
it('exitFullscreen for ms', () => {
169+
document.msFullscreenElement = videoElMock;
170+
document.msExitFullscreen = jest.fn();
171+
toggleFullscreen(videoElMock);
172+
expect(document.msExitFullscreen).toHaveBeenCalled();
173+
});
174+
175+
it('exitFullscreen for moz', () => {
176+
document.mozFullScreenElement = videoElMock;
177+
document.mozCancelFullScreen = jest.fn();
178+
toggleFullscreen(videoElMock);
179+
expect(document.mozCancelFullScreen).toHaveBeenCalled();
180+
});
181+
182+
it('exitFullscreen for webkit', () => {
183+
document.webkitFullscreenElement = videoElMock;
184+
document.webkitExitFullscreen = jest.fn();
185+
toggleFullscreen(videoElMock);
186+
expect(document.webkitExitFullscreen).toHaveBeenCalled();
187+
});
145188
});
146189
});
147190

0 commit comments

Comments
 (0)