record = {
let lastId = 0;
let recordingId = 0;
let chunks = [];
let recorder;
const button = DOM.download(() => new Blob(chunks, {type: 'video/webm'}), 'canvas.webm', 'Download recording');
const MediaRecorder = window.MediaRecorder;
if (!MediaRecorder || !MediaRecorder.isTypeSupported('video/webm')) {
return () => html`<span style="color:red">Your browser doesn't support MediaRecorder/WebM.</span>`;
}
return (canvas) => {
const id = canvas.__recorder_id = canvas.__recorder_id || ++lastId;
if (recordingId === id) return button;
if (recordingId > 0 && recordingId < id) {
chunks = [];
recorder.stop();
}
recordingId = id;
recorder = new MediaRecorder(canvas.captureStream(), {mimeType: 'video/webm'});
recorder.ondataavailable = (e) => chunks.push(e.data);
recorder.start(100);
return button;
};
}