migu/common/modules/clipboard.js
2023-11-12 14:43:06 +01:00

31 lines
929 B
JavaScript

import 'browser-event-target-emitter'
export default new class extends EventTarget {
constructor () {
super()
window.on('drop', this.handleTransfer.bind(this))
window.on('paste', this.handleTransfer.bind(this))
window.on('dragover', e => e.preventDefault())
}
async handleTransfer ({ dataTransfer, clipboardData }) {
const promises = [...(dataTransfer || clipboardData).items].map(item => {
const type = item.type
return new Promise(resolve => item.kind === 'string' ? item.getAsString(text => resolve({ text, type })) : resolve(item.getAsFile()))
})
const items = await Promise.all(promises)
const files = []
const text = []
for (const item of items) {
if (item instanceof Blob) {
files.push(item)
} else {
text.push(item)
}
}
if (files.length) this.emit('files', files)
if (text.length) this.emit('text', text)
}
}()