function updateNode (selectedNode) {
if (selectedNode == "remote") {
node.default = "remote";
node.remote.address = document.querySelector("#remote_address").value
node.remote.port = document.querySelector("#remote_apiPort").value
node.remote.gateway = document.querySelector("#remote").querySelector("#remote_gatewayPort").value
node.remote.protocol = document.querySelector("#remoteProtocol").querySelector("li.active").innerText.toLowerCase()
}
if (selectedNode == "local") {
node.default = "local";
node.local.address = document.querySelector("#local_address").value
node.local.port = document.querySelector("#local_apiPort").value
node.local.gateway = document.querySelector("#local").querySelector("#local_gatewayPort").value
node.local.protocol = document.querySelector("#localProtocol").querySelector("li.active").innerText.toLowerCase()
}
nodeConnect(selectedNode);
}
function nodeConnect (selectedNode) {
if (selectedNode == "remote") {
document.querySelector('button#buttonRemote').setAttribute('disabled', '')
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").innerText = "Connecting"
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").classList.add("connecting")
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").innerHTML = 'Connect
'
document.querySelector('button#buttonRemote').querySelector(".buttonContent .min-loading").classList.remove('min-loading-hidden') //loading event
}
if (selectedNode == "local") {
document.querySelector('button#buttonLocal').setAttribute('disabled', '')
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").innerText = "Connecting"
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").classList.add("connecting")
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").innerHTML = 'Connect
'
document.querySelector('button#buttonLocal').querySelector(".buttonContent .min-loading").classList.remove('min-loading-hidden') //loading event
}
var status = "wait"
ipfsRequest ("GatewayCheck.log", buffer.Buffer.from('ABC', 'utf-8')).then((data) => {
if (data[0].hash == "QmNz1UBzpdd4HfZ3qir3aPiRdX5a93XwTuDNyXRc6PKhWW" ) {
online(selectedNode);
status = "online"
} else {
offline(selectedNode);
status = "offline"
}
document.querySelector('button#buttonRemote').removeAttribute("disabled");
document.querySelector('button#buttonLocal').removeAttribute("disabled");
document.querySelector('button#buttonRemote').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden') //loading event
document.querySelector('button#buttonLocal').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden') //loading event
return status
}, function (reason) {
document.querySelector('button#buttonRemote').removeAttribute("disabled");
document.querySelector('button#buttonLocal').removeAttribute("disabled");
document.querySelector('button#buttonRemote').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden') //loading event
document.querySelector('button#buttonLocal').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden') //loading event
offline(selectedNode)
return "offline"
})
}
function online (selectedNode) {
connected = 1
if (selectedNode == "remote") {
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").classList.remove("connecting")
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").innerHTML = 'Node Online
'
document.querySelector('button#buttonRemote').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden')
}
if (selectedNode == "local") {
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").classList.remove("connecting")
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").innerHTML = 'Node Online
'
document.querySelector('button#buttonLocal').querySelector('.buttonContent .min-loading').classList.add('min-loading-hidden')
}
}
function offline (selectedNode) {
connected = 0
if (selectedNode == "remote") {
document.querySelector('button#buttonRemote').querySelector(".buttonContent div").innerHTML = 'Node Offline!
'
}
if (selectedNode == "local") {
document.querySelector('button#buttonLocal').querySelector(".buttonContent div").innerHTML = 'Node Offline!
'
}
}
function upload() {
if (!connected) {
alert ("Unable to connect to Butter Box's IPFS Node.")
return
}
if (filesOk.length < 1) {
alert("
At least one selected file is invalid - do not select any folders.
Please reselect and try again.
"); return } document.querySelector('.min-loading.blue').classList.remove('loading-hidden') //loading event document.querySelector('button#buttonUpload').setAttribute('disabled', '') document.querySelector('button#buttonRemote').setAttribute('disabled', '') document.querySelector('button#buttonLocal').setAttribute('disabled', '') filesOk.forEach(function(file){ let reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onloadend = function() { ipfsRequest (file.name, buffer.Buffer(reader.result)).then((data) => { response.push(data[0]) document.querySelector("#response").innerText = JSON.stringify(response, null, 2) updateList(fileChecksum(file), data[0].hash) uploadCount++ if (uploadCount == filesOk.length) { document.querySelector('.min-loading.blue').classList.add('loading-hidden'); //stop loading event document.querySelector('button#buttonRemote').removeAttribute('disabled', '') document.querySelector('button#buttonLocal').removeAttribute('disabled', '') document.querySelector('button#buttonUpload').onclick=function(){resetFiles()} document.querySelector('button#buttonUpload').innerHTML = 'Clean Up
'
document.querySelector('button#buttonUpload').removeAttribute("disabled");
}
})
}
})
}
function ipfsRequest (file_name, data) {
var ipfs = window.IpfsHttpClient(node[node.default].address, node[node.default].port, {protocol: node[node.default].protocol}) //router to the IPFS network without any local node
var file_send =
[
{
path: file_name,
content: data
}
]
return new Promise((resolve, reject) => {
ipfs.add(file_send, function (err, json) {
if (err) {
alert(err);
reject (0)
} else {
resolve (json)
}
})
})
}
function removeItem(checksum) {
var item = files_checksum.indexOf(checksum)
filesOk.splice(item, 1)
files_checksum.splice(item, 1)
document.getElementById(checksum).remove();
}
function handleDragOver(evt) {
evt.stopPropagation(); // Do not allow the dragover event to bubble.
evt.preventDefault(); // Prevent default dragover event behavior.
} // handleDragOver
function handleFileSelect(evt) {
evt.stopPropagation(); // Do not allow the drop event to bubble.
evt.preventDefault(); // Prevent default drop event behavior.
if (evt.dataTransfer != null){
var files = evt.dataTransfer.files; // Grab the list of files dragged to the drop box.
} else {
var files = evt.target.files; // FileList object from input
}
if (!files) {
alert("At least one selected file is invalid - do not select any folders.
Please reselect and try again.
"); return; } for (var i = 0; i < files.length; i++) { if (!files[i]) { alert("Unable to access " + file.name); continue; // Immediately move to the next file object. } if (files[i].size == 0) { alert("Skipping " + files[i].name.toUpperCase() + " because it is empty."); continue; } if (files_checksum.includes(fileChecksum(files[i]))) { alert("This files is already listed"); continue } else { files_checksum[filesOk.length] = fileChecksum(files[i]) document.querySelector("#list").querySelector("ul").innerHTML += '
' +
'
'
}
var filesOk = []
var response = []
var message = []
var files_checksum = []
var selectedNode = ""
var uploadCount = 0
var connected = 0
if (!window.FileReader) {
message = 'The ' + 'File APIs ' + 'are not fully supported by this browser.
' + 'Upgrade your browser to the latest version.
'; document.querySelector('body').innerHTML = message; } else { // Set up the file drag and drop listeners: document.getElementById('fileDropBox').addEventListener('dragover', handleDragOver, false); document.getElementById('fileDropBox').addEventListener('drop', handleFileSelect, false); document.getElementById('files').addEventListener('change', handleFileSelect, false); } updateNode(node.default)