pdbe-molstar
Version:
Molstar implementation for PDBe
197 lines (196 loc) • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.subscribeToComponentEvents = subscribeToComponentEvents;
function subscribeToComponentEvents(wrapperCtx) {
document.addEventListener('PDB.interactions.click', function (e) {
if (typeof e.detail !== 'undefined') {
const data = e.detail.interacting_nodes ? { data: e.detail.interacting_nodes } : { data: [e.detail.selected_node] };
data.data[0]['focus'] = true;
wrapperCtx.visual.select(data);
}
});
document.addEventListener('PDB.interactions.mouseover', function (e) {
if (typeof e.detail !== 'undefined') {
const data = e.detail.interacting_nodes ? { data: e.detail.interacting_nodes } : { data: [e.detail.selected_node] };
wrapperCtx.visual.highlight(data);
}
});
document.addEventListener('PDB.interactions.mouseout', function (e) {
wrapperCtx.visual.clearHighlight();
});
document.addEventListener('PDB.topologyViewer.click', function (e) {
if (typeof e.eventData !== 'undefined') {
// Call highlightAnnotation
wrapperCtx.visual.select({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.structAsymId,
beg_label_seq_id: e.eventData.residueNumber,
end_label_seq_id: e.eventData.residueNumber,
sideChain: true,
focus: true,
}],
});
}
});
document.addEventListener('PDB.topologyViewer.mouseover', function (e) {
if (typeof e.eventData !== 'undefined') {
// Call highlightAnnotation
wrapperCtx.visual.highlight({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.structAsymId,
beg_label_seq_id: e.eventData.residueNumber,
end_label_seq_id: e.eventData.residueNumber,
}],
});
}
});
document.addEventListener('PDB.topologyViewer.mouseout', function (e) {
wrapperCtx.visual.clearHighlight();
});
document.addEventListener('protvista-mouseover', function (e) {
var _a, _b, _c;
if (e.detail !== undefined) {
// Create query object from event data
const query = {};
if (e.detail.start !== undefined) {
query.beg_label_seq_id = parseInt(e.detail.start);
}
if (e.detail.end !== undefined) {
query.end_label_seq_id = parseInt(e.detail.end);
}
if (((_a = e.detail.feature) === null || _a === void 0 ? void 0 : _a.entityId) !== undefined) {
query.label_entity_id = `${e.detail.feature.entityId}`;
}
if (((_b = e.detail.feature) === null || _b === void 0 ? void 0 : _b.bestChainId) !== undefined) {
query.label_asym_id = e.detail.feature.bestChainId;
}
if (((_c = e.detail.feature) === null || _c === void 0 ? void 0 : _c.chainId) !== undefined) {
query.label_asym_id = e.detail.feature.chainId;
}
if (Object.keys(query).length > 0) {
wrapperCtx.visual.highlight({ data: [query] });
}
}
});
document.addEventListener('protvista-mouseout', function (e) {
wrapperCtx.visual.clearHighlight();
});
document.addEventListener('protvista-click', function (e) {
if (typeof e.detail !== 'undefined') {
let showInteraction = false;
let highlightQuery = undefined;
// Create query object from event data
if (e.detail.start && e.detail.end) {
highlightQuery = {
beg_label_seq_id: parseInt(e.detail.start),
end_label_seq_id: parseInt(e.detail.end),
};
}
if (e.detail.feature && e.detail.feature.entityId)
highlightQuery['label_entity_id'] = e.detail.feature.entityId + '';
if (e.detail.feature && e.detail.feature.bestChainId)
highlightQuery['label_asym_id'] = e.detail.feature.bestChainId;
if (e.detail.feature && e.detail.feature.chainId)
highlightQuery['label_asym_id'] = e.detail.feature.chainId;
if (e.detail.feature && e.detail.feature.accession && e.detail.feature.accession.split(' ')[0] === 'Chain' || e.detail.feature.tooltipContent === 'Ligand binding site') {
showInteraction = true;
}
if (e.detail.start === e.detail.end)
showInteraction = true;
if (highlightQuery) {
if (showInteraction) {
highlightQuery['sideChain'] = true;
}
else {
let selColor = undefined;
if (e.detail.trackIndex > -1 && e.detail.feature.locations && e.detail.feature.locations[0].fragments[e.detail.trackIndex].color)
selColor = e.detail.feature.locations[0].fragments[e.detail.trackIndex].color;
if (selColor === undefined && e.detail.feature.color)
selColor = e.detail.feature.color;
if (selColor === undefined && e.detail.color)
selColor = e.detail.color;
if (selColor === undefined) {
selColor = { r: 65, g: 96, b: 91 };
}
else {
const isRgb = /rgb/g;
if (isRgb.test(selColor)) {
const rgbArr = selColor.substring(4, selColor.length - 1).split(',');
selColor = { r: rgbArr[0], g: rgbArr[1], b: rgbArr[2] };
}
}
highlightQuery['color'] = selColor;
}
highlightQuery['focus'] = true;
wrapperCtx.visual.select({ data: [highlightQuery] });
}
}
});
const elementTypeArrForRange = ['uniprot', 'pfam', 'cath', 'scop', 'strand', 'helice'];
const elementTypeArrForSingle = ['chain', 'quality', 'quality_outlier', 'binding site', 'alternate conformer'];
document.addEventListener('PDB.seqViewer.click', function (e) {
if (typeof e.eventData !== 'undefined') {
// Abort if entryid and entityid do not match or viewer type is unipdb
// if(e.eventData.entryId != scope.pdbId) return;
if (typeof e.eventData.elementData !== 'undefined' && elementTypeArrForSingle.indexOf(e.eventData.elementData.elementType) > -1) {
// Call highlightAnnotation
wrapperCtx.visual.select({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.elementData.pathData.struct_asym_id,
beg_label_seq_id: e.eventData.residueNumber,
end_label_seq_id: e.eventData.residueNumber,
sideChain: true,
focus: true,
}],
});
}
else if (typeof e.eventData.elementData !== 'undefined' && elementTypeArrForRange.indexOf(e.eventData.elementData.elementType) > -1) {
const seqColorArray = e.eventData.elementData.color;
wrapperCtx.visual.select({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.elementData.pathData.struct_asym_id,
beg_label_seq_id: e.eventData.elementData.pathData.start.residue_number,
end_label_seq_id: e.eventData.elementData.pathData.end.residue_number,
color: { r: seqColorArray[0], g: seqColorArray[1], b: seqColorArray[2] },
focus: true,
}],
});
}
}
});
document.addEventListener('PDB.seqViewer.mouseover', function (e) {
if (typeof e.eventData !== 'undefined') {
// Abort if entryid and entityid do not match or viewer type is unipdb
// if(e.eventData.entryId != scope.pdbId) return;
if (typeof e.eventData.elementData !== 'undefined' && elementTypeArrForSingle.indexOf(e.eventData.elementData.elementType) > -1) {
wrapperCtx.visual.select({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.elementData.pathData.struct_asym_id,
beg_label_seq_id: e.eventData.residueNumber,
end_label_seq_id: e.eventData.residueNumber,
focus: true,
}],
});
}
else if (typeof e.eventData.elementData !== 'undefined' && elementTypeArrForRange.indexOf(e.eventData.elementData.elementType) > -1) {
// Call highlightAnnotation
wrapperCtx.visual.highlight({
data: [{
label_entity_id: e.eventData.entityId,
label_asym_id: e.eventData.elementData.pathData.struct_asym_id,
beg_label_seq_id: e.eventData.elementData.pathData.start.residue_number,
end_label_seq_id: e.eventData.elementData.pathData.end.residue_number,
}],
});
}
}
});
document.addEventListener('PDB.seqViewer.mouseout', function (e) {
wrapperCtx.visual.clearHighlight();
});
}