${item.data.notes ? `
Notes: ${escapeHtml(item.data.notes)}
` : ''}
Remove
`;
analysesList.appendChild(listItem);
});
}
}
if (addAnalysisButton) {
addAnalysisButton.addEventListener('click', function() {
const data = {
analysisName: analysisNameInput.value.trim(),
dexName: dexNameSelect.value,
blockchain: blockchainSelect.value,
poolLink: poolLinkInput.value.trim(),
tokenASymbol: tokenASymbolInput.value.trim(),
depositA: depositAInput.value, // Keep as string for calc function
initialPriceA: initialPriceAInput.value,
currentPriceA: currentPriceAInput.value,
tokenBSymbol: tokenBSymbolInput.value.trim(),
depositB: depositBInput.value,
initialPriceB: initialPriceBInput.value,
currentPriceB: currentPriceBInput.value,
myLPTokens: myLPTokensInput.value,
totalLPTokens: totalLPTokensInput.value,
reportedAPY: reportedAPYInput.value.trim(),
dataDate: dataDateInput.value,
notes: notesInput.value.trim()
};
if (!data.analysisName || !data.tokenASymbol || !data.tokenBSymbol ||
!data.depositA || !data.initialPriceA || !data.currentPriceA ||
!data.depositB || !data.initialPriceB || !data.currentPriceB) {
alert('Please fill in all required fields for Token A, Token B (deposits and prices), and Analysis Name.');
return;
}
// Basic validation for positive numbers where expected for core IL calculation
const depA = parseFloat(data.depositA), initPA = parseFloat(data.initialPriceA);
const depB = parseFloat(data.depositB), initPB = parseFloat(data.initialPriceB);
if (depA <= 0 || initPA <= 0 || depB <= 0 || initPB <= 0) {
alert('Deposited quantities and initial prices must be greater than zero.');
return;
}
savedAnalyses.push({ data: data });
saveAnalyses();
renderAnalyses();
// Optionally clear form (or reset specific fields)
analysisNameInput.value = '';
// ... reset other fields if desired
if(dataDateInput) dataDateInput.valueAsDate = new Date(); // Reset date to today
});
}
if (analysesList) {
analysesList.addEventListener('click', function(event) {
if (event.target.classList.contains('dla-remove-button')) {
const itemToRemove = event.target.closest('.dla-analysis-item');
if (itemToRemove) {
const index = parseInt(itemToRemove.getAttribute('data-index'), 10);
savedAnalyses.splice(index, 1);
saveAnalyses();
renderAnalyses();
}
}
});
}
if (pdfButton) {
pdfButton.addEventListener('click', function() {
if (savedAnalyses.length === 0) {
alert("No analyses to export. Please add some first.");
return;
}
window.print();
});
}
// Initial load and render
const criticalElements = [analysisNameInput, dexNameSelect, tokenASymbolInput, depositAInput, initialPriceAInput, currentPriceAInput, tokenBSymbolInput, depositBInput, initialPriceBInput, currentPriceBInput, addAnalysisButton, analysesList, pdfButton, noAnalysesMessage, dataDateInput];
if (criticalElements.some(el => !el)) {
console.error("DEXLiquidityAnalyzer: One or more critical HTML elements are missing from the DOM.");
const appDiv = document.getElementById('dexLiquidityAnalyzerApp');
if(appDiv) {
appDiv.innerHTML = "
Error: Tool initialization failed. Required elements not found.
";
}
return;
}
loadAnalyses();
renderAnalyses();
});