-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkeepAwake.js
102 lines (98 loc) · 3.85 KB
/
keepAwake.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
* Keeps devices from falling asleep or turning off their displays while
* recording data.
* @class KeepAwake
*/
(function(KeepAwake, undefined) {
/**
* Formats a string with given mimeType and data for a src value in a source
* element for a video.
*
* @private
* @param {string} mimeType The mime type.
* @param {string} base64 The base 64 data.
* @return {string} THe formatted string.
*/
function base64(mimeType, base64) {
return 'data:' + mimeType + ';base64,' + base64;
};
// Create video to play on loop in order to keep device awake.
const video = document.createElement('video');
video.loop = true;
document.body.appendChild(video);
/**
* Add data to for video to play.
*
* @param {Element} element The parent video element to attach the source to.
* @param {string} type The mimeType of the source.
* @param {string} dataURI The src value.
*/
function addSourceToVideo(element, type, dataURI) {
const source = document.createElement('source');
source.src = dataURI;
source.type = 'video/' + type;
element.appendChild(source);
}
addSourceToVideo(
video, 'webm',
base64(
'video/webm',
'GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQC' +
'gq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0Ax' +
'rkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCL' +
'qBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA='));
addSourceToVideo(
video, 'mp4',
base64(
'video/mp4',
'AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzAB' +
'AHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gA' +
'AAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAA' +
'AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAA' +
'AFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'ABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAAB' +
'sW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAA' +
'AAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAA' +
'FHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdX' +
'JsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAAB' +
'AAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAA' +
'AAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTG' +
'F2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAA' +
'AAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3Rjbw' +
'AAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAA' +
'AG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQ' +
'AAAABMYXZmNTIuNzguMw=='));
/**
* Set method for keeping device awake.
*
* @public
* @param {string} mode The method to use.
*/
KeepAwake.keepAwakeSetting = function(mode) {
keepAwakeMode = mode;
};
/**
* Enable/Disable keeping device awake.
* @TODO: Fix pageload leak.
*
* @public
* @param {boolean} setting Enable or Disable.
*/
KeepAwake.keepAwake = function(setting) {
try {
if (keepAwakeMode == 'video') {
// Play a video to keep the device awake. (Chrome)
setting ? video.play() : video.pause();
} else if (keepAwakeMode == 'pageload') {
// Every 30s change the page then cancel page change. (Safari)
setInterval(function() {
window.location.href = '/fake/page';
window.setTimeout(window.stop);
}, 30000);
}
} catch (err) {
console.error(err);
}
};
}(window.KeepAwake = window.KeepAwake || {}));