1angular 2 .module('mainPage') 3 .component('mainPage', { 4 controller: function ($filter, 5 $routeParams, 6 $location, 7 allOrgs, 8 wdGetEntities, 9 entrez2QID, 10 orthoData, 11 GOTerms, 12 InterPro, 13 OperonData, 14 expasyData, 15 mutantData, 16 linkedPubs, 17 locusTag2QID, 18 sendToView) { 19 20 // Main gene page component. Loaded when a gene is selected. Parses the url for taxid and locus tag and uses 21 // those to make API calls to wikidata. 22 var ctrl = this; 23 ctrl.$onInit = function () { 24 ctrl.loading = true; 25 26 ctrl.currentTaxid = $routeParams.taxid; 27 ctrl.currentLocusTag = $routeParams.locusTag; 28 ctrl.currentGene = { 29 locusTag: ctrl.currentLocusTag, 30 taxid: ctrl.currentTaxid 31 }; 32 ctrl.annotations = { 33 ecnumber: [] 34 }; 35 36 // get all organism data for forms 37 allOrgs.getAllOrgs(function (data) { 38 ctrl.orgList = data; 39 ctrl.currentOrg = $filter('getJsonItemOrg')('taxid', ctrl.currentTaxid, ctrl.orgList); 40 ctrl.genus = ctrl.currentOrg.taxonLabel.split(' '); 41 linkedPubs.getLinkedPubs(ctrl.currentLocusTag, ctrl.genus[0]).then(function (data) { 42 ctrl.annotations.pubList = data.data.resultList.result; 43 }); 44 console.log(ctrl.genus); 45 if (ctrl.currentOrg == undefined) { 46 alert("not a valid taxonomy id"); 47 $location.path('/'); 48 } 49 }); 50 51 locusTag2QID.getLocusTag2QID(ctrl.currentLocusTag, ctrl.currentTaxid).then(function (data) { 52 var results = data.data.results.bindings; 53 if (results.length > 0) { 54 ctrl.currentGene.geneQID = $filter('parseQID')(results[0].gene.value); 55 ctrl.currentGene.proteinQID = $filter('parseQID')(results[0].protein.value); 56 } 57 else { 58 alert(ctrl.currentLocusTag + " doesn't seem to be a gene in this genome."); 59 $location.path('/organism/' + ctrl.currentTaxid); 60 61 } 62 63 wdGetEntities.wdGetEntities(ctrl.currentGene.geneQID).then(function (data) { 64 var entity = data.entities[ctrl.currentGene.geneQID]; 65 ctrl.currentGene.entrez = entity.claims.P351[0].mainsnak.datavalue.value; 66 ctrl.currentGene.geneLabel = entity.labels.en.value; 67 ctrl.currentGene.locusTag = entity.claims.P2393[0].mainsnak.datavalue.value; 68 ctrl.currentGene.geneDescription = entity.descriptions.en.value; 69 ctrl.currentGene.genStart = entity.claims.P644[0].mainsnak.datavalue.value; 70 ctrl.currentGene.genEnd = entity.claims.P645[0].mainsnak.datavalue.value; 71 ctrl.currentGene.strand = entity.claims.P2548[0].mainsnak.datavalue.value; 72 ctrl.currentGene.refseqGenome = entity.claims.P644[0].qualifiers.P2249[0].datavalue.value; 73 ctrl.currentGene.geneType = entity.claims.P279[0].mainsnak.datavalue.value; 74 ctrl.currentGene.geneAliases = []; 75 76 angular.forEach(entity.aliases.en, function (alias) { 77 if (alias.value != ctrl.currentGene.locusTag) { 78 ctrl.currentGene.geneAliases.push(alias.value); 79 } 80 }); 81 }); 82 83 wdGetEntities.wdGetEntities(ctrl.currentGene.proteinQID).then(function (data) { 84 var entity = data.entities[ctrl.currentGene.proteinQID]; 85 console.log(entity); 86 ctrl.currentGene.proteinLabel = entity.labels.en.value; 87 ctrl.currentGene.description = entity.descriptions.en.value; 88 ctrl.currentGene.uniprot = entity.claims.P352[0].mainsnak.datavalue.value; 89 ctrl.currentGene.refseqProt = entity.claims.P637[0].mainsnak.datavalue.value; 90 ctrl.currentGene.productType = entity.claims.P279[0].mainsnak.datavalue.value; 91 ctrl.currentGene.proteinAliases = []; 92 angular.forEach(entity.aliases.en, function (alias) { 93 ctrl.currentGene.proteinAliases.push(alias.value); 94 }); 95 96 // Get operon data from wikidata sparql query 97 OperonData.getOperonData(ctrl.currentGene.entrez).then( 98 function (data) { 99 var dataResults = data.data.results.bindings; 100 if (dataResults.length > 0) { 101 console.log(dataResults); 102 ctrl.annotations.currentOperon = dataResults[0].operonItemLabel.value; 103 console.log(ctrl.annotations.currentOperon); 104 ctrl.opData = dataResults; 105 ctrl.annotations.operons = dataResults; 106 } else { 107 ctrl.opData = []; 108 ctrl.annotations.operons = []; 109 } 110 }); 111 112 113 // Get ortholog data from local json file 114 orthoData.getOrthologs(function (data) { 115 ctrl.orthologs = data; 116 var current = $filter('keywordFilter')(data, ctrl.currentLocusTag); 117 ctrl.currentOrtholog = {}; 118 angular.forEach(current[0], function (value, key) { 119 if (key != '_id' && key != '$oid' && key != 'timestamp') { 120 ctrl.currentOrtholog[key] = value 121 } 122 }); 123 ctrl.annotations.orthologs = ctrl.currentOrtholog; 124 }); 125 126 127 128 129 // Get InterPro Domains from Wikidata SPARQL 130 InterPro.getInterPro(ctrl.currentGene.uniprot).then( 131 function (data) { 132 ctrl.ipData = data; 133 ctrl.annotations.interpro = data; 134 }); 135 136 137 // Get go terms and EC numbers from WIKIDATA SPARQL 138 GOTerms.getGoTerms(ctrl.currentGene.uniprot).then( 139 function (data) { 140 ctrl.annotations.go = { 141 cellcomp: [], 142 bioproc: [], 143 molfunc: [] 144 }; 145 ctrl.annotations.reaction = {}; 146 ctrl.mf = 'mf_button'; 147 ctrl.bp = 'bp_button'; 148 ctrl.cc = 'cc_button'; 149 150 var dataResults = data.data.results.bindings; 151 // gather ec numbers from go terms 152 angular.forEach(dataResults, function (value, key) { 153 if (value.hasOwnProperty('ecnumber')) { 154 ctrl.annotations.ecnumber.push(value.ecnumber.value); 155 angular.forEach(ctrl.annotations.ecnumber, function (value) { 156 if (value.indexOf('-') > -1) { 157 var multiReactions = "view reactions hierarchy " + 158 "at: http://enzyme.expasy.org/EC/" + value; 159 ctrl.annotations.reaction[value] = [multiReactions]; 160 } else { 161 expasyData.getReactionData(value).then(function (data) { 162 ctrl.annotations.reaction[data.ecnumber] = data.reaction; 163 }); 164 } 165 }); 166 } 167 if (value.goclass.value === 'http://www.wikidata.org/entity/Q5058355') { 168 ctrl.annotations.go.cellcomp.push(value); 169 170 } 171 if (value.goclass.value === 'http://www.wikidata.org/entity/Q14860489') { 172 ctrl.annotations.go.molfunc.push(value); 173 174 } 175 if (value.goclass.value === 'http://www.wikidata.org/entity/Q2996394') { 176 ctrl.annotations.go.bioproc.push(value); 177 } 178 179 }); 180 // This gets server side mongodb annotations. Nested in GO Terms function because of AJAX 181 // issues waiting for EC Number. NEED to refactor so it can be called outside of this. 182 //var annotation_keys = { 183 // locusTag: ctrl.currentGene.locusTag, 184 // taxid: ctrl.currentGene.taxid, 185 // ec_number: ctrl.annotations.ecnumber 186 //}; 187 //getServerAnnotationData(annotation_keys); 188 }); 189 }); 190 191 192 }).finally(function () { 193 ctrl.loading = false;
194 195 }); 196 197 //////send fo rm data to server to edit wikidata 198 //var getServerAnnotationData = function (anno_keys) { 199 // var url_suf = $location.path() + '/mg_mutant_view'; 200 // 201 // sendToView.sendToView(url_suf, anno_keys).then(function (data) { 202 // ctrl.annotations.mutants = { 203 // mutants: data.data.mutants, 204 // refseq: ctrl.currentGene.refseqGenome 205 // }; 206 // ctrl.annotations.reactions = data.data.reactions; 207 // console.log(ctrl.annotations.mutants); 208 // }); 209 //}; 210 211 212 }; 213 }, 214 templateUrl: '/static/wiki/js/angular_templates/main-page_new.html' 215 }); 216 217
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.