<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Yealink Key Configurator</title>
<style>
body {
font-family: Arial, sans-serif;
}
#handler {
display: flex;
flex-direction: column;
}
.key-container {
display: flex;
margin-bottom: 5px;
}
.key-container div {
border: 1px solid #ccc;
padding: 5px;
margin-right: 5px;
cursor: move;
}
#config-output {
margin-top: 20px;
white-space: pre-wrap;
}
</style>
</head>
<body>
<div id="handler">
<!-- The sortable div for keys -->
</div>
<button onclick="generateConfig()">Generate Config</button>
<pre id="config-output"></pre>
<script src="https://unpkg.com/sortablejs@1.14.0/Sortable.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
loadKeys(); // Load keys on page load
});
function loadKeys() {
// Assuming you have an input with type=file for uploading the XLS file
// You need to implement this part based on your requirements
// For now, I'll use a sample data for demonstration purposes
const sampleData = [
["keynumber", "label", "value"],
[1, "Key 1", "Value 1"],
[2, "Key 2", "Value 2"],
// Add more rows as needed
];
renderKeys(sampleData);
}
function renderKeys(keysData) {
const handlerDiv = document.getElementById('handler');
handlerDiv.innerHTML = '';
keysData.slice(1).forEach((row, index) => {
const [keynumber, label, value] = row;
const keyContainer = document.createElement('div');
keyContainer.classList.add('key-container');
const keynumberDiv = document.createElement('div');
keynumberDiv.textContent = keynumber;
const labelDiv = document.createElement('div');
labelDiv.textContent = label;
const valueDiv = document.createElement('div');
valueDiv.textContent = value;
keyContainer.appendChild(keynumberDiv);
keyContainer.appendChild(labelDiv);
keyContainer.appendChild(valueDiv);
handlerDiv.appendChild(keyContainer);
});
// Enable sorting using SortableJS
new Sortable(handlerDiv, {
animation: 150,
onUpdate: () => updateKeyNumbers(),
});
}
function updateKeyNumbers() {
const keyContainers = document.querySelectorAll('.key-container');
keyContainers.forEach((container, index) => {
const keynumberDiv = container.querySelector(':first-child');
keynumberDiv.textContent = index + 1;
});
}
function generateConfig() {
const keyContainers = document.querySelectorAll('.key-container');
let configOutput = '';
keyContainers.forEach((container, index) => {
const [keynumber, label, value] = Array.from(container.children).map(div => div.textContent);
configOutput += `expansion_module.1.key.${index + 1}.label = ${label}\n`;
configOutput += `expansion_module.1.key.${index + 1}.line = 1\n`;
configOutput += `expansion_module.1.key.${index + 1}.type = 16\n`;
configOutput += `expansion_module.1.key.${index + 1}.value = ${value}\n\n`;
});
const configOutputElement = document.getElementById('config-output');
configOutputElement.textContent = configOutput;
}
</script>
</body>
</html>