forked from enviPath/enviPy
fix: more defensive ketcher reference
This commit is contained in:
@ -137,6 +137,25 @@
|
||||
</div>
|
||||
{# prettier-ignore-start #}
|
||||
<script>
|
||||
// Helper function to safely get Ketcher instance from iframe
|
||||
function getKetcherInstance(iframeId) {
|
||||
const ketcherFrame = document.getElementById(iframeId);
|
||||
if (!ketcherFrame) {
|
||||
console.error("Ketcher iframe not found:", iframeId);
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
if ('contentWindow' in ketcherFrame && ketcherFrame.contentWindow.ketcher) {
|
||||
return ketcherFrame.contentWindow.ketcher;
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Cannot access Ketcher iframe - possible CORS issue:", err);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function predictKetcherToTextInput() {
|
||||
$("#predict-smiles").val(this.ketcher.getSmiles());
|
||||
}
|
||||
@ -171,10 +190,21 @@
|
||||
let smiles = $("#predict-smiles").val().trim();
|
||||
|
||||
// If SMILES input is empty, try to get from Ketcher
|
||||
if (!smiles && window.predictKetcher) {
|
||||
smiles = window.predictKetcher.getSmiles().trim();
|
||||
if (smiles) {
|
||||
$("#predict-smiles").val(smiles);
|
||||
if (!smiles) {
|
||||
const ketcher = getKetcherInstance('predict-ketcher');
|
||||
if (ketcher && ketcher.getSmiles) {
|
||||
try {
|
||||
smiles = ketcher.getSmiles().trim();
|
||||
if (smiles) {
|
||||
$("#predict-smiles").val(smiles);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Failed to get SMILES from Ketcher:", err);
|
||||
alert("Unable to extract structure from the drawing editor. Please enter a SMILES string instead.");
|
||||
button.prop("disabled", false);
|
||||
button.text("Predict");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user