scinote-web/app/assets/javascripts/sitewide/bio_eddie.js
aignatov-bio 478df28689
Clear bioEddie molecule on creating new one [SCI-6001] (#3757)
Co-authored-by: Anton <anton@scinote.net>
2022-01-03 12:36:56 +01:00

162 lines
5.3 KiB
JavaScript

/* global HelperModule I18n */
var bioEddieEditor = (function() {
var BIO_EDDIE;
var CHEMAXON;
var bioEddieIframe;
var bioEddieModal;
function importMolecule() {
var monomerModel = BIO_EDDIE.getMonomerModel();
var monomerImporter = new CHEMAXON.HelmImportModule();
var molecule = bioEddieModal.data('molecule');
if (molecule) {
monomerImporter.import(molecule, monomerModel)
.then(builder => BIO_EDDIE.setModel(builder.graphStoreData));
}
}
function initIframe() {
bioEddieIframe.src = bioEddieIframe.dataset.src;
}
function saveMolecule(svg, structure, scheduleForRegistration) {
var moleculeName = bioEddieModal.find('.file-name input').val();
$.post(bioEddieModal.data('create-url'), {
description: structure,
schedule_for_registration: scheduleForRegistration,
object_id: bioEddieModal.data('object_id'),
object_type: bioEddieModal.data('object_type'),
name: moleculeName,
image: svg
}, function(result) {
var newAsset = $(result.html);
if (bioEddieModal.data('object_type') === 'Step') {
newAsset.find('.file-preview-link').css('top', '-300px');
newAsset.addClass('new').prependTo($(bioEddieModal.data('assets_container')));
setTimeout(function() {
newAsset.find('.file-preview-link').css('top', '0px');
}, 200);
bioEddieModal.modal('hide');
} else if (bioEddieModal.data('object_type') === 'Result') {
window.location.reload();
}
});
}
function updateMolecule(svg, structure, scheduleForRegistration) {
var moleculeName = bioEddieModal.find('.file-name input').val();
$.ajax({
url: bioEddieModal.data('update-url'),
data: {
description: structure,
schedule_for_registration: scheduleForRegistration,
name: moleculeName,
image: svg
},
dataType: 'json',
type: 'PUT',
success: function(json) {
$('#modal_link' + json.id + ' img').attr('src', json.url);
$('#modal_link' + json.id + ' .attachment-label').html(json.file_name);
bioEddieModal.modal('hide');
},
error: function(response) {
if (response.status === 403) {
HelperModule.flashAlertMsg(I18n.t('general.no_permissions'), 'danger');
}
}
});
}
function generateImage(structure, scheduleForRegistration) {
var imageGenerator = new CHEMAXON.ImageGenerator();
var emptySVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
imageGenerator.generateSVGFromHelm(emptySVG, structure)
.then(svg => {
if (bioEddieModal.data('edit-mode')) {
updateMolecule(svg, structure, scheduleForRegistration);
} else {
saveMolecule(svg, structure, scheduleForRegistration);
}
})
.catch(() => {
if (structure === '$$$$V2.0') {
HelperModule.flashAlertMsg(I18n.t('bio_eddie.empty_molecule_error'), 'danger');
}
});
}
$(document).on('turbolinks:load', function() {
bioEddieIframe = document.getElementById('bioEddieIframe');
bioEddieModal = $('#bioEddieModal');
if (bioEddieIframe) {
bioEddieIframe.onload = function() {
let body = $(bioEddieIframe).contents().find('body');
BIO_EDDIE = bioEddieIframe.contentWindow.bioEddieEditor;
CHEMAXON = bioEddieIframe.contentWindow.chemaxon;
let cssRemoveFileImport = `
<style>
.breg-modal .breg-import-dialog-tabs li:last-child{
display: none
}
</style>
`;
$(body).append(cssRemoveFileImport);
importMolecule();
};
}
bioEddieModal.on('shown.bs.modal', function() {
initIframe();
});
bioEddieModal.on('click', '.file-save-link', function() {
var model = BIO_EDDIE.getModel();
var monomerModel = BIO_EDDIE.getMonomerModel();
var monomerExporter = new CHEMAXON.Helm2ExportModule();
var scheduleForRegistration = $(this).data('schedule-for-registration');
monomerExporter.export(model, monomerModel)
.then(structure => generateImage(structure, scheduleForRegistration));
});
});
return {
open_new: (objectId, objectType, container) => {
bioEddieModal.data('object_id', objectId);
bioEddieModal.data('object_type', objectType);
bioEddieModal.data('molecule', null);
bioEddieModal.data('assets_container', container);
bioEddieModal.find('.file-name input').val('');
bioEddieModal.modal('show');
},
open_edit: (name, molecule, updateUrl) => {
bioEddieModal.data('edit-mode', true);
bioEddieModal.data('molecule', molecule);
bioEddieModal.data('update-url', updateUrl);
bioEddieModal.find('.file-name input').val(name);
bioEddieModal.modal('show');
}
};
}());
(function() {
$(document).on('click', '.new-bio-eddie-upload-button', function() {
bioEddieEditor.open_new(
this.dataset.objectId,
this.dataset.objectType,
this.dataset.assetsContainer
);
});
$(document).on('click', '.bio-eddie-edit-button', function() {
$('#filePreviewModal').modal('hide');
bioEddieEditor.open_edit(
this.dataset.moleculeName,
this.dataset.moleculeDescription,
this.dataset.updateUrl
);
$.post(this.dataset.editUrl);
});
}());