mirror of https://github.com/trapexit/mergerfs.git
1 changed files with 154 additions and 0 deletions
-
154index.html
@ -0,0 +1,154 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head><title>mergerfs ui</title> |
|||
<style> |
|||
.tab { |
|||
overflow: hidden; |
|||
border: 1px solid #ccc; |
|||
background-color: #f1f1f1; |
|||
} |
|||
.tab button { |
|||
background-color: inherit; |
|||
float: left; |
|||
border: none; |
|||
outline: none; |
|||
cursor: pointer; |
|||
padding: 14px 16px; |
|||
transition: 0.3s; |
|||
} |
|||
.tab button:hover { |
|||
background-color: #ddd; |
|||
} |
|||
.tab button.active { |
|||
background-color: #ccc; |
|||
} |
|||
.tabcontent { |
|||
display: none; |
|||
padding: 6px 12px; |
|||
border: 1px solid #ccc; |
|||
border-top: none; |
|||
} |
|||
table { |
|||
border-collapse: collapse; |
|||
width: 100%; |
|||
} |
|||
th, td { |
|||
border: 1px solid #ddd; |
|||
padding: 8px; |
|||
text-align: left; |
|||
} |
|||
th { |
|||
background-color: #f2f2f2; |
|||
} |
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div class="tab"> |
|||
<button class="tablinks active" onclick="openTab(event, 'Advanced')">Advanced</button> |
|||
<button class="tablinks" onclick="openTab(event, 'Mounts')">Mounts</button> |
|||
</div> |
|||
<div id="Advanced" class="tabcontent" style="display: block;"> |
|||
<div> |
|||
<label for="mount-select-advanced">Select Mountpoint:</label> |
|||
<select id="mount-select-advanced"></select> |
|||
</div> |
|||
<div id="kv-list"></div> |
|||
</div> |
|||
<div id="Mounts" class="tabcontent"> |
|||
<form> |
|||
<label for="mount-select">Select Mountpoint:</label> |
|||
<select id="mount-select"></select> |
|||
</form> |
|||
</div> |
|||
<script> |
|||
function openTab(evt, tabName) { |
|||
var i, tabcontent, tablinks; |
|||
tabcontent = document.getElementsByClassName("tabcontent"); |
|||
for (i = 0; i < tabcontent.length; i++) { |
|||
tabcontent[i].style.display = "none"; |
|||
} |
|||
tablinks = document.getElementsByClassName("tablinks"); |
|||
for (i = 0; i < tablinks.length; i++) { |
|||
tablinks[i].className = tablinks[i].className.replace(" active", ""); |
|||
} |
|||
document.getElementById(tabName).style.display = "block"; |
|||
if (evt) evt.currentTarget.className += " active"; |
|||
} |
|||
function loadKV(mount) { |
|||
let url = '/kvs'; |
|||
if (mount) { |
|||
url += '?mount=' + encodeURIComponent(mount); |
|||
} |
|||
fetch(url) |
|||
.then(r => r.json()) |
|||
.then(data => { |
|||
const div = document.getElementById('kv-list'); |
|||
div.innerHTML = ''; |
|||
const table = document.createElement('table'); |
|||
const headerRow = document.createElement('tr'); |
|||
const headerKey = document.createElement('th'); |
|||
headerKey.textContent = 'Key'; |
|||
const headerValue = document.createElement('th'); |
|||
headerValue.textContent = 'Value'; |
|||
headerRow.appendChild(headerKey); |
|||
headerRow.appendChild(headerValue); |
|||
table.appendChild(headerRow); |
|||
for (const [k, v] of Object.entries(data)) { |
|||
const row = document.createElement('tr'); |
|||
const keyCell = document.createElement('td'); |
|||
keyCell.textContent = k; |
|||
const valueCell = document.createElement('td'); |
|||
const input = document.createElement('input'); |
|||
input.type = 'text'; |
|||
input.value = v; |
|||
input.style.width = '100%'; |
|||
input.onkeydown = function(e) { |
|||
if (e.key === 'Enter') { |
|||
url = '/kvs?mount=' + encodeURIComponent(mount) |
|||
fetch(url, { |
|||
method: 'POST', |
|||
headers: {'Content-Type': 'application/json'}, |
|||
body: JSON.stringify({[k]: input.value}) |
|||
}); |
|||
} |
|||
}; |
|||
valueCell.appendChild(input); |
|||
row.appendChild(keyCell); |
|||
row.appendChild(valueCell); |
|||
table.appendChild(row); |
|||
} |
|||
div.appendChild(table); |
|||
}); |
|||
} |
|||
function loadMounts() { |
|||
fetch('/mounts') |
|||
.then(r => r.json()) |
|||
.then(data => { |
|||
const select = document.getElementById('mount-select'); |
|||
const selectAdvanced = document.getElementById('mount-select-advanced'); |
|||
[select, selectAdvanced].forEach(s => { |
|||
s.innerHTML = ''; |
|||
data.forEach(m => { |
|||
const opt = document.createElement('option'); |
|||
opt.value = m; |
|||
opt.text = m; |
|||
s.appendChild(opt); |
|||
}); |
|||
}); |
|||
const onchangeFunc = function() { |
|||
const mount = this.value; |
|||
loadKV(mount); |
|||
}; |
|||
select.onchange = onchangeFunc; |
|||
selectAdvanced.onchange = onchangeFunc; |
|||
if (data.length > 0) { |
|||
select.value = data[0]; |
|||
selectAdvanced.value = data[0]; |
|||
loadKV(data[0]); |
|||
} |
|||
}); |
|||
} |
|||
window.onload = () => { loadMounts(); }; |
|||
</script> |
|||
</body> |
|||
</html> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue