Spaces:
Running
Running
| <html> | |
| <head> | |
| <link rel="stylesheet" href="https://ebi.emblstatic.net/web_guidelines/EBI-Icon-fonts/v1.2/fonts.css" type="text/css" media="all"/> | |
| <script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script> | |
| <script type="text/javascript" src="https://www.ebi.ac.uk/pdbe/pdb-component-library/js/protvista-pdb-3.3.0.js"></script> | |
| </head> | |
| <body> | |
| <h4>ProtVista PDB custom data demo (Github Repo Source: https://github.com/PDBeurope/protvista-pdb)</h4> | |
| <div> | |
| <protvista-pdb custom-data="true" id="pv1"></protvista-pdb> | |
| </div> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', () => { | |
| //Get web-component element | |
| const pvInstance = document.getElementById('pv1'); | |
| if(!pvInstance) return; | |
| (async () => { | |
| // PDBe sequence conservation api data | |
| let scFetch = await fetch('https://www.ebi.ac.uk/pdbe/graph-api/uniprot/sequence_conservation/P29373'); | |
| let scResponseData = await scFetch.json(); | |
| const seqConservationData = scResponseData; | |
| // seqConservationData is a json array with following fields. Please refer the fetch api url for the data struture | |
| // [ | |
| // { | |
| // "start": 1, | |
| // "end": 1, | |
| // "conservation_score": 1, | |
| // "tooltipContent": "Conservation score: 1", | |
| // "amino": [ | |
| // { | |
| // "end": 1, | |
| // "letter": "P", | |
| // "proba": 0.428, | |
| // "start": 1, | |
| // "color": "#c0c000", | |
| // "tooltipContent": "Amino acid: PRO<br/>Probability: 42.80%" | |
| // },... | |
| // ] | |
| // }... | |
| // ] | |
| // PDBe variation api data | |
| let vrFetch = await fetch('https://www.ebi.ac.uk/pdbe/graph-api/uniprot/protvista/variation/P29373'); | |
| let vrResponseData = await vrFetch.json(); | |
| const variationData = vrResponseData; | |
| // variationData is a json with following fields. Please refer the fetch api url for the data struture | |
| // { | |
| // "sequence": "PNFSGNWKIIRSENFEELLKVLGVNVMLRKIAVAAASKPAVEIKQEGDTFYIKTSTTVRTTEINFKVGEEFEEQTVDGRPCKSLVKWESENKMVCEQKLLKGEGPKTSWTRELTNDGELILTMTADDVVCTRVYVRE", | |
| // "variants": [ | |
| // { | |
| // "accession": "NC_000001.11:g.156705439T>C", | |
| // "association": [], | |
| // "clinicalSignificances": null, | |
| // "color": "#002594", | |
| // "end": "2", | |
| // "polyphenScore": 0.003, | |
| // "siftScore": 0.055, | |
| // "sourceType": "large_scale_study", | |
| // "start": "2", | |
| // "tooltipContent": "XYZ Variant", | |
| // "variant": "S", | |
| // "xrefNames": [ | |
| // "gnomAD" | |
| // ], | |
| // "keywords": [ // Keywords are used to filter the variats | |
| // "predicted", | |
| // "large_scale_studies" | |
| // ] | |
| // },... | |
| // ] | |
| // } | |
| //Custom data model | |
| const customData = { | |
| displayNavigation: true, // Set to false to hide navigation scale | |
| displaySequence: true, // Set to false to hide sequence track | |
| sequence: 'MPNFSGNWKIIRSENFEELLKVLGVNVMLRKIAVAAASKPAVEIKQEGDTFYIKTSTTVRTTEINFKVGEEFEEQTVDGRPCKSLVKWESENKMVCEQKLLKGEGPKTSWTRELTNDGELILTMTADDVVCTRVYVRE', //Protein sequence | |
| length: 138, // Length of the sequence | |
| offset: 1, // Offset navigation scale start. Example offset:10 will display the navigation start from 10 instead of default 1. | |
| tracks: [ // Array of track objects (PDBe implementation extends core ProtVista track component. Refer - https://github.com/ebi-webcomponents/nightingale/tree/master/packages/protvista-track#data-array for all the supported track properties ) | |
| { | |
| label: "Domains", // Track label | |
| labelType: "text", // Supported values 'text' and 'html' | |
| data: [ | |
| { | |
| accession: "d1", // Some unique id | |
| type: "UniProt range", // Displayed in tooltip title | |
| label: "Domain 1", // Expected values 'text' and 'html' | |
| labelTooltip: "Residues mapped to domain 1", // Label tooltip content. Support text and HTML mark-up | |
| locations: [ // Array of sub-tracks | |
| { | |
| fragments : [ // Array of sub-track fragments | |
| { | |
| start: 1, // Track start value | |
| end: 56, // Track end value | |
| tooltipContent: "Type: domain 1<br>Range: XYZ1 - XYZ56", // track tooltip content. Support text and HTML mark-up | |
| color: "rgb(135,158,247)" // track (fragment) colour, supported rgb and hex code value | |
| }, | |
| { | |
| start: 70, | |
| end: 130, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130", | |
| color: "rgb(160,174,232)" | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| accession: "d2", | |
| type: "UniProt range", | |
| label: "<div><i class='icon icon-generic' data-icon=';' style='color: #000;'></i> <a href='resource.xyz'>Domain 2</a></div>", //HTML strcutured label with font-icons. You can add any HTML markup. | |
| labelTooltip: "<strong>Domain Compound</strong><br><img src='https://www.ebi.ac.uk/pdbe/static/files/pdbechem_v2/REA_200.svg'>", // labelTooltip HTML mark-up example displaying compound image in the tooltip. | |
| locations: [ | |
| { | |
| fragments : [ | |
| { | |
| start: 1, | |
| end: 20, | |
| tooltipContent: "<strong>Type: domain 2</strong><br>Range: XY1 - XYZ20<br><a href='resource.xyz' style='color:blue'>view details</a>", // tooltipContent HTML mark-up example | |
| color: "rgb(107,119,39)" | |
| }, | |
| { | |
| start: 22, | |
| end: 137, | |
| tooltipContent: "Type: domain 2<br>Range: XYZ22 - XYZ137", | |
| color: "rgb(90,102,23)" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| label: "Annotations", | |
| labelType: "text", | |
| labelColor: "rgb(128,128,128)", // Set labelColor to change label background colour | |
| data: [ | |
| { | |
| accession: "a1", | |
| type: "UniProt range", | |
| label: "Annotations 1", | |
| labelType: "text", | |
| labelTooltip: "Residues mapped to annotations 1", | |
| labelColor: "rgb(211,211,211)", | |
| color: "rgb(255,99,163)", | |
| locations: [ | |
| { | |
| fragments : [ | |
| { | |
| start: 1, | |
| end: 56, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ1 - XYZ56" | |
| }, | |
| { | |
| start: 70, | |
| end: 130, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| label: "Annotation shapes", | |
| data: [ | |
| { | |
| accession: "s1", | |
| type: "UniProt range", | |
| label: "Circle", | |
| color: "rgb(249,166,2)", | |
| shape: 'circle', // supported shapes rectangle|bridge|diamond|chevron|catFace|triangle|wave|hexagon|pentagon|circle|arrow|doubleBar, | |
| locations: [ | |
| { | |
| fragments : [ | |
| { | |
| start: 5, | |
| end: 5, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ1 - XYZ56", | |
| }, | |
| { | |
| start: 9, | |
| end: 9, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130" | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| accession: "s2", | |
| type: "UniProt range", | |
| label: "Diamond", | |
| shape: 'diamond', | |
| color: "rgb(255,99,163)", // Default colour value for all fragments in this track | |
| locations: [ | |
| { | |
| fragments : [ | |
| { | |
| start: 5, | |
| end: 5, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ1 - XYZ56" | |
| }, | |
| { | |
| start: 9, | |
| end: 9, | |
| color: "rgb(0,128,129)", // Set colour here for individual shape fragment. This will override the track default colour. | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130" | |
| }, | |
| { | |
| start: 20, | |
| end: 20, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130" | |
| }, | |
| { | |
| start: 22, | |
| end: 22, | |
| tooltipContent: "Type: domain 1<br>Range: XYZ70 - XYZ130" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ], | |
| sequenceConservation: seqConservationData, // Set this property to display your own sequence conservation data. Refer comments at the top for data structure. | |
| variants: variationData, // Set this property to display your own variation data. Refer comments at the top for data structure. | |
| legends: { | |
| alignment: 'right', // expected values 'left', 'right' or 'center' | |
| data: { // Legend Row, key is used as the row label | |
| "Domains": [ // legends for Domains row | |
| { | |
| color: ["rgb(135,158,247)", "rgb(160,174,232)"], // legend color, supported rgb and hex code value | |
| text: "Domains 1" // legend text | |
| }, | |
| { | |
| color: ["rgb(107,119,39)", "rgb(90,102,23)"], | |
| text: "Domains 2" | |
| } | |
| ], | |
| "Annotations": [ // legends for Annotation row row | |
| { | |
| color: ["rgb(255,99,163)"], | |
| text: "Custom Annotations" | |
| } | |
| ] | |
| } | |
| } | |
| }; | |
| // Assign custom data object to instance viewerdata property | |
| pvInstance.viewerdata = customData; | |
| })(); | |
| }); | |
| </script> | |
| </body> | |
| </html> | |