PageSourceSearch

http://wikigenomes.org/static/wiki/js/app/main-page/mainpage-view.component.js

js wikigenomes.org collected 2026-09-25 23:42:32 UTC 11,534 bytes, 217 lines download raw bytes

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.