Skip to content

Instantly share code, notes, and snippets.

@bjoerntx
Created April 8, 2024 20:32
Show Gist options
  • Save bjoerntx/d9de8c715cc6136a520c9236f777f994 to your computer and use it in GitHub Desktop.
Save bjoerntx/d9de8c715cc6136a520c9236f777f994 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Text Control JavaScript Demo</title>
<script src="https://backend.textcontrol.com/api/TXWebSocket/GetResource?name=tx-document-editor.min.js"></script>
<style>
#txDocumentEditor {
height: 800px;
width: 800px;
}
</style>
</head>
<body>
<div id="txDocumentEditor"></div>
<select id="fileSelect" onchange="loadDocumentFromAzureBlob(this.value)">
<option value="">Select a document</option>
</select>
<script>
const textControlAccessToken = "";
const storageAccount = "";
const containerName = "";
const sasToken = "";
TXTextControl.init({
containerID: "txDocumentEditor",
webSocketURL: "wss://backend.textcontrol.com/api/TXWebSocket?access-token=" + textControlAccessToken,
});
TXTextControl.addEventListener("textControlLoaded", function () {
listDocumentsFromAzureBlob();
});
function listDocumentsFromAzureBlob() {
var xhr = new XMLHttpRequest();
xhr.open("GET", `${storageAccount}/${containerName}?restype=container&comp=list&${sasToken}`);
xhr.onload = function () {
if (this.status === 200) {
var xmlRespsone = this.responseText;
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlRespsone, "text/xml");
var blobs = xmlDoc.getElementsByTagName("Blob");
for (var i = 0; i < blobs.length; i++) {
var blobName = blobs[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
var option = document.createElement("option");
option.value = blobName;
option.text = blobName;
document.querySelector("#fileSelect").appendChild(option);
}
}
};
xhr.send();
}
function loadDocumentFromAzureBlob(blobName) {
var xhr = new XMLHttpRequest();
xhr.open("GET", `${storageAccount}/${containerName}/${blobName}?${sasToken}`);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
if (this.status === 200) {
var blob = new Blob([this.response], { type: "application/octet-stream" });
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function () {
var base64data = reader.result;
switch (blobName.split('.').pop()) {
case "docx":
TXTextControl.loadDocument(TXTextControl.StreamType.WordprocessingML, base64data.split(',')[1]);
break;
case "doc":
TXTextControl.loadDocument(TXTextControl.StreamType.MSWord, base64data.split(',')[1]);
break;
case "rtf":
TXTextControl.loadDocument(TXTextControl.StreamType.RichTextFormat, base64data.split(',')[1]);
break;
case "tx":
TXTextControl.loadDocument(TXTextControl.StreamType.InternalUnicodeFormat, base64data.split(',')[1]);
break;
default:
alert("Unsupported file format");
break;
}
}
}
};
xhr.send();
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment