-
-
Notifications
You must be signed in to change notification settings - Fork 865
Expand file tree
/
Copy pathdefault.js
More file actions
80 lines (64 loc) · 2.36 KB
/
Copy pathdefault.js
File metadata and controls
80 lines (64 loc) · 2.36 KB
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
/* imports common modules */
var electron = require('electron')
var ipc = electron.ipcRenderer
var propertiesToClone = ['deltaX', 'deltaY', 'metaKey', 'ctrlKey', 'defaultPrevented', 'clientX', 'clientY']
function cloneEvent (e) {
var obj = {}
for (var i = 0; i < propertiesToClone.length; i++) {
obj[propertiesToClone[i]] = e[propertiesToClone[i]]
}
return JSON.stringify(obj)
}
// workaround for Electron bug
setTimeout(function () {
/* Used for swipe gestures */
window.addEventListener('wheel', function (e) {
ipc.send('wheel-event', cloneEvent(e))
})
var scrollTimeout = null
window.addEventListener('scroll', function () {
clearTimeout(scrollTimeout)
scrollTimeout = setTimeout(function () {
ipc.send('scroll-position-change', Math.round(window.scrollY))
}, 200)
})
}, 0)
/* Used for picture in picture item in context menu */
ipc.on('getContextMenuData', function (event, data) {
// check for video element to show picture-in-picture menu
var hasVideo = Array.from(document.elementsFromPoint(data.x, data.y)).some(el => el.tagName === 'VIDEO')
ipc.send('contextMenuData', { hasVideo })
})
ipc.on('enterPictureInPicture', function (event, data) {
var videos = Array.from(document.elementsFromPoint(data.x, data.y)).filter(el => el.tagName === 'VIDEO')
if (videos[0]) {
videos[0].requestPictureInPicture()
}
})
window.addEventListener('message', function (e) {
if (!e.origin.startsWith('min://')) {
return
}
if (e.data?.message === 'showCredentialList') {
ipc.send('showCredentialList')
}
if (e.data?.message === 'showUserscriptDirectory') {
ipc.send('showUserscriptDirectory')
}
if (e.data?.message === 'downloadFile') {
ipc.send('downloadFile', e.data.url)
}
if (e.data?.message === 'readLocalPDF') {
var requestId = e.data.requestId
if (typeof e.data.url !== 'string') {
window.postMessage({ message: 'readLocalPDFResult', requestId, error: 'invalid PDF URL' }, 'min://app')
return
}
ipc.invoke('readLocalPDF', e.data.url).then(function (fileData) {
var data = new Uint8Array(fileData)
window.postMessage({ message: 'readLocalPDFResult', requestId, data: data.buffer }, 'min://app')
}).catch(function (err) {
window.postMessage({ message: 'readLocalPDFResult', requestId, error: err?.message || 'unable to read local PDF' }, 'min://app')
})
}
})