Commit 24fcdbc7a43cfb0f257759891333df96fb7614d9

Authored by Nathanael Jourdane
1 parent 3345b95b

Fix crash when epntap panel reloads, move service tooltip in utils.Format render…

…ers, autoload services/granules stores
js/app/controllers/EpnTapModule.js
... ... @@ -35,10 +35,27 @@ Ext.define('amdaDesktop.EpnTapModule', {
35 35 handler: this.createWindow,
36 36 scope: this
37 37 };
  38 + },
38 39  
  40 + /**
  41 + Called each time the epntap module is loaded.
  42 + - `target`: an array of 3 values: [target_name, dataproduct_type]; or null.
  43 + */
  44 + loadTarget: function(target) {
  45 + this.target = target;
39 46 this.aquireElements();
40   - this.servicesStore.load();
41   - this.productTypesStore.load();
  47 + this.addListeners();
  48 +
  49 + // this.servicesStore.clearFilter();
  50 + this.granulesStore.removeAll();
  51 +
  52 + if(target) {
  53 + var name = target[0].charAt(0).toUpperCase() + target[0].replace(/_/g, ' ').substr(1).toLowerCase();
  54 + this.targetNameCB.getStore().add({'id': target[0], 'name': name});
  55 + this.targetNameCB.select(target[0]);
  56 + this.productTypeCB.select(target[1]);
  57 + this.updateNbResults();
  58 + }
42 59 },
43 60  
44 61 aquireElements: function() {
... ... @@ -91,28 +108,6 @@ Ext.define('amdaDesktop.EpnTapModule', {
91 108 } else {
92 109 this.getBtn.disable();
93 110 }
94   -
95   - },
96   -
97   - /**
98   - Called each time the epntap module is loaded.
99   - - `target`: an array of 3 values: [target_name, dataproduct_type]; or null.
100   - */
101   - loadTarget: function(target) {
102   - this.target = target;
103   - this.aquireElements();
104   - this.addListeners();
105   -
106   - // this.servicesStore.clearFilter();
107   - this.granulesStore.removeAll();
108   -
109   - if(target) {
110   - var name = target[0].charAt(0).toUpperCase() + target[0].replace(/_/g, ' ').substr(1).toLowerCase();
111   - this.targetNameCB.getStore().add({'id': target[0], 'name': name});
112   - this.targetNameCB.select(target[0]);
113   - this.productTypeCB.select(target[1]);
114   - this.updateNbResults();
115   - }
116 111 },
117 112  
118 113 /*************
... ...
js/app/controllers/InteropModule.js
... ... @@ -423,7 +423,7 @@ Ext.define('amdaDesktop.InteropModule', {
423 423 activeTab: activeTab,
424 424 baseId: baseId,
425 425 loadTab: function(tab) {
426   - if(tab['id'] == 'epntapTab') {
  426 + if(tab['id'] === 'epntapTab') {
427 427 me.loadEpnTap(config && 'epntapTarget' in config ? config['epntapTarget']: false);
428 428 }
429 429 },
... ...
js/app/views/EpnTapUI.js
... ... @@ -28,7 +28,8 @@ store.
28 28 TODO: try "var arrayStore = Ext.create(...);"
29 29 */
30 30 Ext.create('Ext.data.Store', {
31   - storeId:'productTypesStore',
  31 + storeId: 'productTypesStore',
  32 + autoLoad: true,
32 33 fields: ['id', 'name', 'desc'],
33 34 data: [
34 35 {'id': 'all', 'name': '--All--', 'desc': 'Select all produt types.'},
... ... @@ -95,6 +96,7 @@ This list is used to fill the `servicesGrid` table, which is updated by `EpnTapM
95 96 */
96 97 Ext.create('Ext.data.Store', {
97 98 storeId: 'servicesStore',
  99 + autoLoad: true,
98 100 fields: [
99 101 {name: 'id', type: 'string'},
100 102 {name: 'short_name', type: 'string'},
... ... @@ -146,7 +148,7 @@ selected.
146 148 - `thumbnail_url`: the thumbnail_url EPN-TAP parameter (ibid).
147 149 */
148 150 Ext.create('Ext.data.Store', {
149   - id: 'granulesStore',
  151 + storeId: 'granulesStore',
150 152 model: 'granulesModel', // Created dynamically
151 153 autoload: false,
152 154 pageSize: 25,
... ... @@ -166,6 +168,38 @@ Ext.create('Ext.data.Store', {
166 168  
167 169 Ext.define('App.util.Format', {
168 170 override: 'Ext.util.Format',
  171 + 'prettify': function(data) {
  172 + return data.charAt(0).toUpperCase() + data.replace(/_/g, ' ').substr(1).toLowerCase();
  173 + },
  174 + 'serviceTooltip': function(value, data) {
  175 + var infoColor = data.nb_results == -2 ? 'IndianRed' : 'green';
  176 + var info = data.info.length > 0 ? "<p style='color:" + infoColor + "'>" + data.info + '</p>' : '';
  177 +
  178 + var colums = ['res_title', 'ivoid', 'access_url', 'table_name', 'content_type', 'creator_seq', 'content_level', 'reference_url', 'created', 'updated'];
  179 + var details = '';
  180 + for (var i=0 ; i < colums.length ; i++) {
  181 + if(data[colums[i]] !== '') {
  182 + key = Ext.util.Format.prettify(colums[i]);
  183 + var val = key === 'Content level' ? data[colums[i]].replace(/#/g, ', ') : data[colums[i]];
  184 + details += '<li><b>' + key + '</b>: ' + val + '</li>';
  185 + }
  186 + }
  187 + return Ext.String.format('<div data-qtitle="{0}" data-qtip="{1}<ul>{2}</ul>">{0}</div>', value, info, details);
  188 + },
  189 + 'service.text': function(data, metadata, record) {
  190 + return Ext.util.Format.serviceTooltip(data, record.data);
  191 + },
  192 + 'service.number': function(data, metadata, record) {
  193 + value = '' + data;
  194 + if(data < 0) {
  195 + value = '-';
  196 + } else if(data >= 1000*1000) {
  197 + value = (data/(1000*1000)).toPrecision(3) + 'm';
  198 + } else if(data >= 1000) {
  199 + value = (data/1000).toPrecision(3) + 'k';
  200 + }
  201 + return Ext.util.Format.serviceTooltip(value, record.data);
  202 + },
169 203 'text': function(data) {
170 204 return '<p style="white-space: normal;">' + data + '</p>';
171 205 },
... ... @@ -209,17 +243,6 @@ Ext.define(&#39;App.util.Format&#39;, {
209 243 var Y = Math.floor(e / 1461) - 4716 + Math.floor((12 + 2 - M) / 12);
210 244 return Ext.Date.format(new Date(Y, M-1, D), 'Y/m/d');
211 245 },
212   - 'number': function(val) {
213   - if(val < 0) {
214   - return '-';
215   - } else if(val >= 1000*1000) {
216   - return (val/(1000*1000)).toPrecision(3) + 'm';
217   - } else if(val >= 1000) {
218   - return (val/1000).toPrecision(3) + 'k';
219   - } else {
220   - return val;
221   - }
222   - },
223 246 'format': function(data) {
224 247 var mimetypeDict = {
225 248 'application/fits': 'fits',
... ... @@ -518,14 +541,15 @@ Ext.define(&#39;amdaUI.EpnTapUI&#39;, {
518 541 service granules.
519 542 */
520 543 createServicesGrid: function() {
521   - var epnTapServicesGrid = new Ext.grid.Panel({
  544 + return {
  545 + xtype: 'grid',
522 546 id: 'epnTapServicesGrid',
523 547 title: 'Services',
524 548 store: Ext.data.StoreManager.lookup('servicesStore'),
525 549 flex: 1,
526 550 columns: [
527   - {text: 'Name', dataIndex: 'short_name', flex: 1},
528   - {text: 'Nb res.', dataIndex: 'nb_results', width: 50, renderer: 'number'}
  551 + {text: 'Name', dataIndex: 'short_name', flex: 1, renderer: 'service.text'},
  552 + {text: 'Nb res.', dataIndex: 'nb_results', width: 50, renderer: 'service.number'}
529 553 ],
530 554 viewConfig: {
531 555 getRowClass: function(record, index) {
... ... @@ -536,45 +560,8 @@ Ext.define(&#39;amdaUI.EpnTapUI&#39;, {
536 560 return 'error_row';
537 561 }
538 562 }
539   - },
540   - renderTo: Ext.getBody()
541   - });
542   -
543   - Ext.create('Ext.tip.ToolTip', {
544   - target: epnTapServicesGrid.getView().el,
545   - delegate: epnTapServicesGrid.getView().itemSelector,
546   - trackMouse: true,
547   - listeners: {
548   - beforeshow: function updateTipBody(tooltip) {
549   - var column_titles = {
550   - 'res_title': 'Title',
551   - 'ivoid': 'ivoid',
552   - 'access_url': 'Access URL',
553   - 'table_name': 'Table name',
554   - 'content_type': 'content type',
555   - 'creator_seq': 'Creator',
556   - 'content_level': 'Content level',
557   - 'reference_url': 'reference URL',
558   - 'created': 'Created on',
559   - 'updated': 'Updated on'};
560   - var record = epnTapServicesGrid.getView().getRecord(tooltip.triggerElement);
561   - var ttContent = '<h3>' + record.get('short_name') + '</h3><ul>';
562   - if(record.get('info').length > 0) {
563   - var infoColor = record.get('nb_results') == -2 ? 'IndianRed' : 'green';
564   - ttContent += '<p style="color:' + infoColor + '">' + record.get('info') + '</p><br/>';
565   - }
566   - for (var column in column_titles) {
567   - var col_content = record.get(column);
568   - if(column === 'content_level' && col_content!=='') {
569   - col_content = col_content.replace(/#/g, ", ");
570   - }
571   - ttContent += '<li><b>' + column_titles[column] + '</b>: ' + col_content + '</li>';
572   - }
573   - tooltip.update(ttContent + '</ul>');
574   - }
575 563 }
576   - });
577   - return epnTapServicesGrid;
  564 + };
578 565 },
579 566  
580 567 /**
... ...