2024-08-13 06:57:58 +00:00
|
|
|
|
window.generateDiff = function (text1, text2, divDiff, divLegend) {
|
|
|
|
|
|
let wikEdDiff = new WikEdDiff();
|
|
|
|
|
|
let targetDiv = document.getElementById(divDiff)
|
|
|
|
|
|
targetDiv.innerHTML = wikEdDiff.diff(text1, text2);
|
2024-09-15 20:21:33 +00:00
|
|
|
|
targetDiv.classList.add('mud-typography-body1', 'improvedDiff');
|
2024-08-13 06:57:58 +00:00
|
|
|
|
|
|
|
|
|
|
let legend = document.getElementById(divLegend);
|
|
|
|
|
|
legend.innerHTML = `
|
|
|
|
|
|
<div class="legend mt-2">
|
|
|
|
|
|
<h3>Legend</h3>
|
|
|
|
|
|
<ul class="mt-2">
|
|
|
|
|
|
<li><span class="wikEdDiffMarkRight" title="Moved block" id="wikEdDiffMark999" onmouseover="wikEdDiffBlockHandler(undefined, this, 'mouseover');"></span> Original block position</li>
|
|
|
|
|
|
<li><span title="+" class="wikEdDiffInsert">Inserted<span class="wikEdDiffSpace"><span class="wikEdDiffSpaceSymbol"></span> </span>text<span class="wikEdDiffNewline"> </span></span></li>
|
|
|
|
|
|
<li><span title="−" class="wikEdDiffDelete">Deleted<span class="wikEdDiffSpace"><span class="wikEdDiffSpaceSymbol"></span> </span>text<span class="wikEdDiffNewline"> </span></span></li>
|
|
|
|
|
|
<li><span class="wikEdDiffBlockLeft" title="◀" id="wikEdDiffBlock999" onmouseover="wikEdDiffBlockHandler(undefined, this, 'mouseover');">Moved<span class="wikEdDiffSpace"><span class="wikEdDiffSpaceSymbol"></span> </span>block<span class="wikEdDiffNewline"> </span></span></li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
`;
|
2024-08-18 19:48:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
window.clearDiv = function (divName) {
|
|
|
|
|
|
let targetDiv = document.getElementById(divName);
|
|
|
|
|
|
targetDiv.innerHTML = '';
|
2024-08-23 08:32:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
window.scrollToBottom = function(element) {
|
2024-09-05 17:37:54 +00:00
|
|
|
|
element.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });
|
2026-01-01 16:55:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let mediaRecorder;
|
|
|
|
|
|
let audioChunks = [];
|
|
|
|
|
|
|
|
|
|
|
|
window.audioRecorder = {
|
|
|
|
|
|
start: async function () {
|
|
|
|
|
|
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
|
|
|
|
mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });
|
|
|
|
|
|
audioChunks = [];
|
|
|
|
|
|
|
|
|
|
|
|
mediaRecorder.ondataavailable = (event) => {
|
|
|
|
|
|
if (event.data.size > 0) {
|
|
|
|
|
|
audioChunks.push(event.data);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
mediaRecorder.start();
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
stop: async function () {
|
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
|
mediaRecorder.onstop = async () => {
|
|
|
|
|
|
const blob = new Blob(audioChunks, { type: 'audio/webm' });
|
|
|
|
|
|
const arrayBuffer = await blob.arrayBuffer();
|
|
|
|
|
|
const base64 = btoa(
|
|
|
|
|
|
new Uint8Array(arrayBuffer).reduce((data, byte) => data + String.fromCharCode(byte), '')
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// Tracks stoppen, damit das Mic-Icon verschwindet
|
|
|
|
|
|
mediaRecorder.stream.getTracks().forEach(track => track.stop());
|
|
|
|
|
|
resolve(base64);
|
|
|
|
|
|
};
|
|
|
|
|
|
mediaRecorder.stop();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|