diff --git a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js index e5ffcbc892cbac289bb19f3a1c885b863d99bc86..37c7cb0f4c0e25753841dfdb4462072ee0cd6b74 100644 --- a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js +++ b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js @@ -60,6 +60,49 @@ GuiUtils.prototype.createLabel = function (value) { return result; }; +/** + * + * @param {Object} modification + * @param {string} [modification.name] + * @param {string} modification.type + * @param {string} [modification.state] + * + * @returns {HTMLElement| null} + */ +GuiUtils.prototype.createModificationRow = function (modification) { + var self = this; + var row = null; + var name = modification.name; + var desc = undefined; + if (modification.state !== undefined && modification.state !== null) { + var modificationStateType = self.getConfiguration().getModificationStateTypeByName(modification.state); + var state = modificationStateType.getCommonName(); + + if (name !== null && name !== undefined && name !== "") { + desc = state + " at position " + name + ", "; + } else { + desc = state + ","; + } + } else if (name !== null && name !== undefined && name !== "" && + (modification.type === "BINDING_REGION" || + modification.type === "CODING_REGION" || + modification.type === "PROTEIN_BINDING_DOMAIN" || + modification.type === "TRANSCRIPTION_SITE_LEFT" || + modification.type === "TRANSCRIPTION_SITE_RIGHT" || + modification.type === "REGULATORY_REGION" + )) { + desc = name + ","; + } + + if (desc !== undefined) { + row = Functions.createElement({ + type: "li" + }); + row.appendChild(self.createLabelText(desc)); + } + return row; +}; + /** * * @param {string} label @@ -68,38 +111,47 @@ GuiUtils.prototype.createLabel = function (value) { */ GuiUtils.prototype.createPostTranslationalModifications = function (label, value) { var result = document.createElement("div"); + var count = 0; if (value !== undefined && value.length > 0) { var self = this; - result.appendChild(self.createLabel(label)); + var userFriendlyLabel = label + ": "; + if (label === "RESIDUE") { + userFriendlyLabel = "Posttranslational modifications: " + } else if (label === "BINDING_REGION") { + userFriendlyLabel = "Binding regions: " + } else if (label === "CODING_REGION") { + userFriendlyLabel = "Coding regions: " + } else if (label === "PROTEIN_BINDING_DOMAIN") { + userFriendlyLabel = "Protein binding domains: " + } else if (label === "TRANSCRIPTION_SITE_LEFT") { + userFriendlyLabel = "Transcription sites (left): " + } else if (label === "TRANSCRIPTION_SITE_RIGHT") { + userFriendlyLabel = "Transcription sites (right): " + } else if (label === "TRANSCRIPTION_SITE") { + userFriendlyLabel = "Transcription sites: " + } else if (label === "MODIFICATION_SITE") { + userFriendlyLabel = "Modification sites: " + } + result.appendChild(self.createLabel(userFriendlyLabel)); result.appendChild(self.createNewLine()); var list = Functions.createElement({ type: "ul" }); for (var i = 0; i < value.length; i++) { - var name = value[i].name; - var desc = undefined; - if (value[i].state !== undefined && value[i].name !== null) { - var modificationStateType = self.getConfiguration().getModificationStateTypeByName(value[i].state); - var state = modificationStateType.getCommonName(); - - if (name !== null && name !== undefined && name !== "") { - desc = state + " at position " + name + ", "; - } else { - desc = state + ","; - } - } - - if (desc !== undefined) { - var row = Functions.createElement({ - type: "li" - }); - row.appendChild(self.createLabelText(desc)); + var modification = value[i]; + var row = self.createModificationRow(modification, self); + if (row !== null) { list.appendChild(row); + count++; } } result.appendChild(list); } - return result; + if (count > 0) { + return result; + } else { + return document.createElement("div"); + } }; /** @@ -579,6 +631,33 @@ GuiUtils.prototype.createReactionElement = function (params) { return Promise.resolve(div); }; +/** + * + * @param {Object[]} modifications + * + * @returns {HTMLDivElement} + */ +GuiUtils.prototype.createModifications = function (modifications) { + var self = this; + var result = document.createElement("div"); + var modificationsByType = []; + if (modifications !== undefined) { + for (var i = 0; i < modifications.length; i++) { + var modification = modifications[i]; + if (modificationsByType[modification.type] === undefined) { + modificationsByType[modification.type] = []; + } + modificationsByType[modification.type].push(modification); + } + for (var key in modificationsByType) { + if (modificationsByType.hasOwnProperty(key)) { + result.appendChild(self.createPostTranslationalModifications(key, modificationsByType[key])); + } + } + } + return result; +}; + /** * * @param {Alias|SearchBioEntityGroup} params.alias @@ -640,8 +719,7 @@ GuiUtils.prototype.createAliasElement = function (params) { div.appendChild(self.createParamLine("Abbreviation: ", alias.getAbbreviation())); div.appendChild(self.createParamLine("Formula: ", alias.getFormula())); div.appendChild(self.createArrayParamLine("Former symbols: ", alias.getFormerSymbols())); - div.appendChild(self.createPostTranslationalModifications("PostTranslational modifications: ", alias - .getOther('modifications'))); + div.appendChild(self.createModifications(alias.getOther('modifications'))); div.appendChild(self.createParamLine("Charge: ", alias.getCharge())); div.appendChild(self.createArrayParamLine("Synonyms: ", alias.getSynonyms())); div.appendChild(self.createLabelText(alias.getDescription())); diff --git a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js index ff5e92fd78587ce9637c88d172198c5d2670ccb4..93f55f5850b2867e0295e4ea34d38c6a1de1588a 100644 --- a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js +++ b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js @@ -251,5 +251,92 @@ describe('GuiUtils', function () { }); }); + describe('createModificationRow', function () { + describe('PTM', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "RESIDUE", state: "PHOSPHORYLATED"}); + assert.ok(li); + }); + it('empty PTM', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "RESIDUE"}); + assert.notOk(li); + }); + }); + describe('Modification Site', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "MODIFICATION_SITE", state: "PHOSPHORYLATED"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "MODIFICATION_SITE"}); + assert.notOk(li); + }); + }); + describe('Binding Region', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "BINDING_REGION"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({type: "BINDING_REGION"}); + assert.notOk(li); + }); + }); + describe('Coding Region', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "CODING_REGION"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({type: "CODING_REGION"}); + assert.notOk(li); + }); + }); + describe('Protein binding region', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "PROTEIN_BINDING_DOMAIN"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({type: "PROTEIN_BINDING_DOMAIN"}); + assert.notOk(li); + }); + }); + describe('Regulatory region', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "REGULATORY_REGION"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({type: "REGULATORY_REGION"}); + assert.notOk(li); + }); + }); + describe('Transcription sites', function () { + it('default', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({name: "n", type: "TRANSCRIPTION_SITE_LEFT"}); + assert.ok(li); + }); + it('empty', function () { + var guiUtils = new GuiUtils(helper.getConfiguration()); + var li = guiUtils.createModificationRow({type: "TRANSCRIPTION_SITE_LEFT"}); + assert.notOk(li); + }); + }); + }); + });