Blame view

js/app/views/PlotTabResultUI.js 24.3 KB
16035364   Benjamin Renard   First commit
1
2
3
/**
 * Project   : AMDA-NG
 * Name      : PlotTabResultUI.js
18d4a11e   Benjamin Renard   Save and load plo...
4
5
 * @class    amdaUI.PlotTabResultUI
 * @extends  Ext. panel.Panel
16035364   Benjamin Renard   First commit
6
7
 * @brief    Plot Tab Result UI definition (View)
 * @author    
bab90f22   Elena.Budnik   format + #5668
8
 * @version  $Id: PlotTabResultUI.js benjamin 
16035364   Benjamin Renard   First commit
9
10
11
 */

Ext.define('amdaUI.PlotTabResultUI', {
bab90f22   Elena.Budnik   format + #5668
12
	extend: 'Ext.panel.Panel',
16035364   Benjamin Renard   First commit
13

bab90f22   Elena.Budnik   format + #5668
14
15
16
17
18
	alias: 'widget.plotTabResult',

	requires: [
		'amdaPlotComp.PlotZoomPlug',
		'amdaPlotComp.PlotExtendShiftPlug',
bab90f22   Elena.Budnik   format + #5668
19
20
21
		'amdaPlotComp.PlotContextManager',
		'amdaPlotComp.PlotResultImage'
	],
8c88a270   Erdogan Furkan   10312 - Navigatio...
22
23
24
25
26
27
28

	panelImage: null,
	crtContext: null,
	interactiveId: '',
	navToolBar: null,
	isTTNavBar: false,
	crtTTFileIndex: 0,
bab90f22   Elena.Budnik   format + #5668
29
	disableSynchronize: false,
27a055f4   Benjamin Renard   Multiplot (#8314)
30
	multiplot: false,
55b10506   Benjamin Renard   Update correctly ...
31
	plotName: '',
1f9f9178   Menouard AZIB   I have created a ...
32
	listParams: [],
8c88a270   Erdogan Furkan   10312 - Navigatio...
33

bab90f22   Elena.Budnik   format + #5668
34
	hiddenForm: null,
8c88a270   Erdogan Furkan   10312 - Navigatio...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

	constructor: function (config) {
		this.addEvents({ 'pagesize': true });

		this.init(config);
		this.callParent(arguments);
	},

	updateConfig: function (name, multiplot) {
		this.multiplot = multiplot;
		this.plotName = name;
		this.findParentByType('window').setTitle(this.plotName + (this.multiplot ? ' - Synchronized to Multiplot' : ''));
	},

	getImageSize: function () {
bab90f22   Elena.Budnik   format + #5668
50
51
		if (!this.crtContext)
			return {
8c88a270   Erdogan Furkan   10312 - Navigatio...
52
53
				width: 0,
				height: 0
bab90f22   Elena.Budnik   format + #5668
54
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
55
56
57
58
59

		return {
			width: this.crtContext.page.width * this.sliderPage.getValue() / 100.,
			height: this.crtContext.page.height * this.sliderPage.getValue() / 100.
		}
bab90f22   Elena.Budnik   format + #5668
60
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
61
62
63

	getImageUrl: function (resultFolder, plotFile) {
		return 'data/' + sessionID + '/RES/' + resultFolder + '/' + plotFile;
bab90f22   Elena.Budnik   format + #5668
64
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
65
66
67

	toPixelOnSourceImage: function (value) {
		return value * 100 / this.sliderPage.getValue();
d0b61b72   Benjamin Renard   Show coordinates ...
68
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
69
70
71

	toPixelOnResultImage: function (value) {
		return value * this.sliderPage.getValue() / 100;
d0b61b72   Benjamin Renard   Show coordinates ...
72
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
73
74

	createZoomItemsForPanel: function (panelId) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
75
76
77
		var zoomPlugin = this.getPlugin('plot-zoom-plugin-id');
		if (zoomPlugin == null)
			return;
8c88a270   Erdogan Furkan   10312 - Navigatio...
78

9f08f4eb   Benjamin Renard   Zoom in interacti...
79
		var panelContext = amdaPlotComp.PlotContextManager.getPanelById(this.crtContext, panelId);
caff798e   Benjamin Renard   Fix zoom bar for ...
80
		var size = this.getImageSize();
1f9f9178   Menouard AZIB   I have created a ...
81
82
		// We need a list of parameters to compute the number of points needed to apply FFT
		this.listParams = panelContext["parameters"];
bd8d75af   Menouard AZIB   Disable paramter ...
83
		zoomPlugin.path_context_file = 'data/' + sessionID + '/RES/' + this.configResult.folder + '/' + "plotFunction0_context.xml";
1f9f9178   Menouard AZIB   I have created a ...
84
		zoomPlugin.setParameters(this.listParams);
8c88a270   Erdogan Furkan   10312 - Navigatio...
85

bd8d75af   Menouard AZIB   Disable paramter ...
86

9f08f4eb   Benjamin Renard   Zoom in interacti...
87
		var me = this;
8b11b1af   Benjamin Renard   Insert intervals ...
88
		var insertIntervalItem = null;
a54cfb3f   Benjamin Renard   Merge amdadev int...
89
		var plotFunctionItem = null;
9f08f4eb   Benjamin Renard   Zoom in interacti...
90
91
92
93
94
95
96
		Ext.each(panelContext.plotArea.axes, function (axis) {
			//Events for zoom on a time axis
			var onMinTimeSelection = function (posX) {
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceXPos = me.toPixelOnSourceImage(posX);
8c88a270   Erdogan Furkan   10312 - Navigatio...
97
98
				var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos);
				var crtTime = new Date(crtTimestamp * 1000);
9f08f4eb   Benjamin Renard   Zoom in interacti...
99
100
101
				crtTime = Ext.Date.add(crtTime, Ext.Date.MINUTE, crtTime.getTimezoneOffset());
				zoomPlugin.setMinValue(crtTime);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
102

9f08f4eb   Benjamin Renard   Zoom in interacti...
103
104
105
106
107
			var onMaxTimeSelection = function (posX) {
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceXPos = me.toPixelOnSourceImage(posX);
8c88a270   Erdogan Furkan   10312 - Navigatio...
108
109
				var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos);
				var crtTime = new Date(crtTimestamp * 1000);
9f08f4eb   Benjamin Renard   Zoom in interacti...
110
111
112
				crtTime = Ext.Date.add(crtTime, Ext.Date.MINUTE, crtTime.getTimezoneOffset());
				zoomPlugin.setMaxValue(crtTime);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
113

9f08f4eb   Benjamin Renard   Zoom in interacti...
114
			//Events for zoom on a Y axis
8c88a270   Erdogan Furkan   10312 - Navigatio...
115
			var onMinYValueSelection = function (posY) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
116
117
118
119
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceYPos = me.toPixelOnSourceImage(posY);
8c88a270   Erdogan Furkan   10312 - Navigatio...
120
				var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.y + panelContext.plotArea.height, panelContext.plotArea.y, sourceYPos);
9f08f4eb   Benjamin Renard   Zoom in interacti...
121
122
				zoomPlugin.setMinValue(crtValue);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
123
124

			var onMaxYValueSelection = function (posY) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
125
126
127
128
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceYPos = me.toPixelOnSourceImage(posY);
8c88a270   Erdogan Furkan   10312 - Navigatio...
129
				var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.y + panelContext.plotArea.height, panelContext.plotArea.y, sourceYPos);
9f08f4eb   Benjamin Renard   Zoom in interacti...
130
131
				zoomPlugin.setMaxValue(crtValue);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
132

9f08f4eb   Benjamin Renard   Zoom in interacti...
133
			//Events for zoom on X axis
8c88a270   Erdogan Furkan   10312 - Navigatio...
134
			var onMinXValueSelection = function (posX) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
135
136
137
138
139
140
141
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceXPos = me.toPixelOnSourceImage(posX);
				var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos);
				zoomPlugin.setMinValue(crtValue);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
142
143

			var onMaxXValueSelection = function (posX) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
144
145
146
147
148
149
150
				//Panel and axis context must be retrieved by using the crtContext
				var panelContext = amdaPlotComp.PlotContextManager.getPanelById(me.crtContext, panelId);
				var axisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panelContext, axis.id);
				var sourceXPos = me.toPixelOnSourceImage(posX);
				var crtValue = amdaPlotComp.PlotContextManager.toAxisValue(axisContext, panelContext.plotArea.x, panelContext.plotArea.x + panelContext.plotArea.width, sourceXPos);
				zoomPlugin.setMaxValue(crtValue);
			};
8c88a270   Erdogan Furkan   10312 - Navigatio...
151
152
153
154
155
156
157
158
159
160
161
162

			switch (axis.id) {
				case 'timeAxis':
					me.contextualMenu.add({
						text: 'Zoom on Time Axis',
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(true, 0/*me.toPixelOnResultImage(panelContext.y)*/, size.height /*me.toPixelOnResultImage(panelContext.height)*/, onMinTimeSelection, onMaxTimeSelection);
						},
						scope: this
					});
535d7638   Menouard AZIB   I have added a co...
163
					//plotFunction Menu
d0692c05   Menouard AZIB   Everthing works well
164
					plotFunctionItem = {
f401b3c7   Benjamin Renard   Fix
165
						text: 'Apply a Function on Interval',
535d7638   Menouard AZIB   I have added a co...
166
167
168
169
170
171
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id, true);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(true, 0, size.height, onMinTimeSelection, onMaxTimeSelection);
						},
						scope: this
d0692c05   Menouard AZIB   Everthing works well
172
					};
8c88a270   Erdogan Furkan   10312 - Navigatio...
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
					insertIntervalItem = {
						text: 'Insert Interval in TimeTable or Catalog',
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(true, 0/*me.toPixelOnResultImage(panelContext.y)*/, size.height /*me.toPixelOnResultImage(panelContext.height)*/, onMinTimeSelection, onMaxTimeSelection);
						},
						scope: this
					};
					break;
				case 'y-left':
					me.contextualMenu.add({
						text: 'Zoom on Y Left Axis',
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(false, me.toPixelOnResultImage(panelContext.x), me.toPixelOnResultImage(panelContext.width), onMinYValueSelection, onMaxYValueSelection);
						}
					});
					break;
				case 'y-right':
					me.contextualMenu.add({
						text: 'Zoom on Y Right Axis',
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(false, me.toPixelOnResultImage(panelContext.x), me.toPixelOnResultImage(panelContext.width), onMinYValueSelection, onMaxYValueSelection);
						}
					});
					break;
				case 'xaxis_id':
					me.contextualMenu.add({
						text: 'Zoom on X Axis',
						handler: function (item, e) {
							zoomPlugin.show(me.interactiveId, axis.id, panelContext.id);
							zoomPlugin.resetMinMaxValue();
							me.panelImage.startZoom(true, me.toPixelOnResultImage(panelContext.y), me.toPixelOnResultImage(panelContext.height), onMinXValueSelection, onMaxXValueSelection);
						}
					});
					break;
				case 'epochAxis':
					//Nothing to add
					break;
9f08f4eb   Benjamin Renard   Zoom in interacti...
216
			}
8c88a270   Erdogan Furkan   10312 - Navigatio...
217

9f08f4eb   Benjamin Renard   Zoom in interacti...
218
		});
8b11b1af   Benjamin Renard   Insert intervals ...
219
220
221
222
223

		if (insertIntervalItem != null) {
			me.contextualMenu.add('-');
			me.contextualMenu.add(insertIntervalItem);
		}
f401b3c7   Benjamin Renard   Fix
224
		if (plotFunctionItem != null) {
bd8d75af   Menouard AZIB   Disable paramter ...
225
			me.contextualMenu.insert(0, '-');
f401b3c7   Benjamin Renard   Fix
226
227
			me.contextualMenu.insert(0, plotFunctionItem);
		}
9f08f4eb   Benjamin Renard   Zoom in interacti...
228
	},
2ea6eb0d   Benjamin Renard   Fix decimal preci...
229

8c88a270   Erdogan Furkan   10312 - Navigatio...
230
231
232
233
234
235
236
237
238
239
240
241
242
	getAxisValue: function (axis, pixelMin, pixelMax, pixelVal) {
		var val = amdaPlotComp.PlotContextManager.toAxisValue(axis, pixelMin, pixelMax, pixelVal);
		return parseFloat(val).toPrecision(5);
	},

	createPlotImage: function (resultFolder, plotFile) {
		var me = this;
		var size = this.getImageSize();
		this.panelImage = Ext.create('amdaPlotComp.PlotResultImage', {
			src: this.getImageUrl(resultFolder, plotFile),
			width: size.width,
			height: size.height,
			onMouseMove: function (x, y) {
d0b61b72   Benjamin Renard   Show coordinates ...
243
244
				if (!me.crtContext)
					return;
8c88a270   Erdogan Furkan   10312 - Navigatio...
245

d0b61b72   Benjamin Renard   Show coordinates ...
246
247
248
				var sourceXPos = me.toPixelOnSourceImage(x);
				var sourceYPos = me.toPixelOnSourceImage(y);
				var panel = amdaPlotComp.PlotContextManager.getPanel(me.crtContext, sourceXPos, sourceYPos);
2cd12bf9   Erdogan Furkan   #9326 - Showing T...
249

d0b61b72   Benjamin Renard   Show coordinates ...
250
				var text = '';
8c88a270   Erdogan Furkan   10312 - Navigatio...
251
252
				if (me.panelImage) {
					if (!panel) {
d0b61b72   Benjamin Renard   Show coordinates ...
253
254
255
						me.panelImage.resetCursor();
						text += 'No panel';
					}
8c88a270   Erdogan Furkan   10312 - Navigatio...
256
					else {
d0b61b72   Benjamin Renard   Show coordinates ...
257
258
						text += 'Panel Id : ';
						text += panel.id;
8c88a270   Erdogan Furkan   10312 - Navigatio...
259
						if (amdaPlotComp.PlotContextManager.isInPlotArea(panel, sourceXPos, sourceYPos)) {
d0b61b72   Benjamin Renard   Show coordinates ...
260
261
262
263
264
265
266
							/*me.panelImage.updateCursor(
								me.toPixelOnResultImage(panel.plotArea.x),
								me.toPixelOnResultImage(panel.plotArea.y),
								me.toPixelOnResultImage(panel.plotArea.width),
								me.toPixelOnResultImage(panel.plotArea.height),
								x, y);*/
							me.panelImage.updateCursor(
8c88a270   Erdogan Furkan   10312 - Navigatio...
267
268
269
270
271
272
								me.toPixelOnResultImage(0),
								me.toPixelOnResultImage(0),
								me.toPixelOnResultImage(me.crtContext.page.width),
								me.toPixelOnResultImage(me.crtContext.page.height),
								x, y);

d0b61b72   Benjamin Renard   Show coordinates ...
273
274
275
							var xText = '';
							var yLeftText = '';
							var yRightText = '';
2cd12bf9   Erdogan Furkan   #9326 - Showing T...
276
							var intervalText = '';
d0b61b72   Benjamin Renard   Show coordinates ...
277
							Ext.each(panel.plotArea.axes, function (axis) {
8c88a270   Erdogan Furkan   10312 - Navigatio...
278
279
280
281
								switch (axis.id) {
									case 'timeAxis':
										var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(axis, panel.plotArea.x, panel.plotArea.x + panel.plotArea.width, sourceXPos);
										var crtTime = new Date(crtTimestamp * 1000);
c2cc7749   Erdogan Furkan   #10098 - Modifica...
282
										intervalText = amdaPlotComp.PlotContextManager.getIntervalCoordInfo(me.crtContext, panel, crtTimestamp);
8c88a270   Erdogan Furkan   10312 - Navigatio...
283
										xText = crtTime.toJSON();
8c88a270   Erdogan Furkan   10312 - Navigatio...
284
285
286
287
288
289
290
291
292
293
294
295
296
										break;
									case 'y-left':
										yLeftText = me.getAxisValue(axis, panel.plotArea.y + panel.plotArea.height, panel.plotArea.y, sourceYPos);
										break;
									case 'y-right':
										yRightText = me.getAxisValue(axis, panel.plotArea.y + panel.plotArea.height, panel.plotArea.y, sourceYPos);
										break;
									case 'xaxis_id':
										xText = me.getAxisValue(axis, panel.plotArea.x, panel.plotArea.x + panel.plotArea.width, sourceXPos);
										break;
									case 'epochAxis':
										xText = me.getAxisValue(axis, panel.plotArea.x, panel.plotArea.x + panel.plotArea.width, sourceXPos);
										break;
d0b61b72   Benjamin Renard   Show coordinates ...
297
								}
8c88a270   Erdogan Furkan   10312 - Navigatio...
298

d0b61b72   Benjamin Renard   Show coordinates ...
299
							});
8c88a270   Erdogan Furkan   10312 - Navigatio...
300

d0b61b72   Benjamin Renard   Show coordinates ...
301
							if (xText != '')
8c88a270   Erdogan Furkan   10312 - Navigatio...
302
								text += (', X : ' + xText);
d0b61b72   Benjamin Renard   Show coordinates ...
303
							if (yLeftText != '')
8c88a270   Erdogan Furkan   10312 - Navigatio...
304
								text += (', Y Left : ' + yLeftText);
d0b61b72   Benjamin Renard   Show coordinates ...
305
							if (yRightText != '')
8c88a270   Erdogan Furkan   10312 - Navigatio...
306
								text += (', Y Right : ' + yRightText);
2cd12bf9   Erdogan Furkan   #9326 - Showing T...
307
							if (intervalText != '')
c2cc7749   Erdogan Furkan   #10098 - Modifica...
308
								text += (', ' + intervalText);
d0b61b72   Benjamin Renard   Show coordinates ...
309
310
311
312
313
314
315
						}
						else
							me.panelImage.resetCursor();
					}
				}
				me.coordinatesField.setText(text);
			},
8c88a270   Erdogan Furkan   10312 - Navigatio...
316
			onContextMenu: function (absoluteX, absoluteY, imageX, imageY) {
9f08f4eb   Benjamin Renard   Zoom in interacti...
317
318
				if (!me.crtContext)
					return;
8c88a270   Erdogan Furkan   10312 - Navigatio...
319

87658ba0   Benjamin Renard   TT Navigation in ...
320
				me.contextualMenu.removeAll(true);
8c88a270   Erdogan Furkan   10312 - Navigatio...
321

9f08f4eb   Benjamin Renard   Zoom in interacti...
322
323
324
				var sourceXPos = me.toPixelOnSourceImage(imageX);
				var sourceYPos = me.toPixelOnSourceImage(imageY);
				var panel = amdaPlotComp.PlotContextManager.getPanel(me.crtContext, sourceXPos, sourceYPos);
c2cc7749   Erdogan Furkan   #10098 - Modifica...
325
326
327
328
				var timeAxisContext = amdaPlotComp.PlotContextManager.getPanelAxisById(panel, 'timeAxis');
				if (timeAxisContext == null)
					return;
				var crtTimestamp = amdaPlotComp.PlotContextManager.toAxisValue(timeAxisContext, panel.plotArea.x, panel.plotArea.x + panel.plotArea.width, sourceXPos);
8c88a270   Erdogan Furkan   10312 - Navigatio...
329
330
331

				if (panel != null) {
					if (panel.plotArea.hasSpectro) {
c9071a43   Benjamin Renard   Add instant plot ...
332
						me.contextualMenu.add([
bab90f22   Elena.Budnik   format + #5668
333
							{
8c88a270   Erdogan Furkan   10312 - Navigatio...
334
335
								text: 'Instant cut at this position',
								handler: function () {
c2cc7749   Erdogan Furkan   #10098 - Modifica...
336

8c88a270   Erdogan Furkan   10312 - Navigatio...
337
									var crtTime = new Date(crtTimestamp * 1000);
3afa41ee   Erdogan Furkan   #10663 - Fixed bug
338
									//crtTime = Ext.Date.add(crtTime, Ext.Date.MINUTE, crtTime.getTimezoneOffset());
592d7b65   Menouard AZIB   Merge develop int...
339
									me.callInteractivePlot({ 'action': 'instant', 'interactiveId': this.interactiveId, 'panelId': panel.id, 'time': crtTime.toISOString() });
bab90f22   Elena.Budnik   format + #5668
340
341
342
								},
								scope: me
							},
8c88a270   Erdogan Furkan   10312 - Navigatio...
343
							'-'
c9071a43   Benjamin Renard   Add instant plot ...
344
345
						]);
					}
9f08f4eb   Benjamin Renard   Zoom in interacti...
346
347
					if (amdaPlotComp.PlotContextManager.isInPlotArea(panel, sourceXPos, sourceYPos))
						me.createZoomItemsForPanel(panel.id);
c2cc7749   Erdogan Furkan   #10098 - Modifica...
348
349


9f08f4eb   Benjamin Renard   Zoom in interacti...
350
				}
8b11b1af   Benjamin Renard   Insert intervals ...
351

9f08f4eb   Benjamin Renard   Zoom in interacti...
352
353
				if (me.contextualMenu.items.getCount() > 0)
					me.contextualMenu.add('-');
8c88a270   Erdogan Furkan   10312 - Navigatio...
354

37e81bff   Benjamin Renard   Direct save of pl...
355
				me.contextualMenu.add([
bab90f22   Elena.Budnik   format + #5668
356
					{
8c88a270   Erdogan Furkan   10312 - Navigatio...
357
358
359
						text: 'Extend/Shift Time interval',
						disabled: me.isTTNavBar,
						handler: function () {
bab90f22   Elena.Budnik   format + #5668
360
							var extendShiftPlugin = this.getPlugin('plot-extendshift-plugin-id');
b39c9d1d   Benjamin Renard   Fix interactive n...
361
							extendShiftPlugin.show(me.interactiveId);
bab90f22   Elena.Budnik   format + #5668
362
363
364
365
366
367
						},
						scope: me
					},
					'-',
					{
						text: 'Save Plot',
8c88a270   Erdogan Furkan   10312 - Navigatio...
368
						handler: function () {
bab90f22   Elena.Budnik   format + #5668
369
370
							if (me.hiddenForm == null)
								me.hiddenForm = Ext.create('Ext.form.Panel', {
8c88a270   Erdogan Furkan   10312 - Navigatio...
371
									title: 'hiddenForm',
bab90f22   Elena.Budnik   format + #5668
372
373
374
375
									renderTo: Ext.getBody(),
									standardSubmit: true,
									url: 'php/downloadPlot.php',
									timeout: 120000,
8c88a270   Erdogan Furkan   10312 - Navigatio...
376
									height: 100,
bab90f22   Elena.Budnik   format + #5668
377
									width: 100,
8c88a270   Erdogan Furkan   10312 - Navigatio...
378
379
									hidden: true,
									items: []
bab90f22   Elena.Budnik   format + #5668
380
								});
37e81bff   Benjamin Renard   Direct save of pl...
381

bab90f22   Elena.Budnik   format + #5668
382
383
384
							me.hiddenForm.getForm().submit({
								params: {
									sessionId: sessionID,
8c88a270   Erdogan Furkan   10312 - Navigatio...
385
									interactiveId: me.interactiveId
bab90f22   Elena.Budnik   format + #5668
386
								},
8c88a270   Erdogan Furkan   10312 - Navigatio...
387
388
								success: function (form, action) { },
								failure: function (form, action) { }
bab90f22   Elena.Budnik   format + #5668
389
390
391
							});
						}
					}
37e81bff   Benjamin Renard   Direct save of pl...
392
				]);
8c88a270   Erdogan Furkan   10312 - Navigatio...
393

c2cc7749   Erdogan Furkan   #10098 - Modifica...
394
395
396
397
398
399
				if (amdaPlotComp.PlotContextManager.isInterval(me.crtContext, panel, crtTimestamp)) {
					var allintervalParams = amdaPlotComp.PlotContextManager.getAllIntervalParams(me.crtContext, panel, crtTimestamp);
					if (allintervalParams.length > 0) {

						var links = amdaPlotComp.PlotContextManager.getIntervalLinks(allintervalParams);
						if (links.length > 0) {
1be6ea03   Erdogan Furkan   #10098 - Final co...
400
401
							var menu = Ext.create('Ext.menu.Menu', { plain: true });
							var realLinks = amdaPlotComp.PlotContextManager.setIntervalsRef(links, menu);
c2cc7749   Erdogan Furkan   #10098 - Modifica...
402
403
404
							me.contextualMenu.add('-');
							me.contextualMenu.add([
								{
1be6ea03   Erdogan Furkan   #10098 - Final co...
405
406
									text: 'Open references (' + realLinks.length + ')',
									menu: menu,
c2cc7749   Erdogan Furkan   #10098 - Modifica...
407
408
409
410
411
412
									scope: me
								}]);
						}
					}
				}

9f08f4eb   Benjamin Renard   Zoom in interacti...
413
414
				me.contextualMenu.showAt(absoluteX, absoluteY);
			}
bab90f22   Elena.Budnik   format + #5668
415
		});
16035364   Benjamin Renard   First commit
416

bab90f22   Elena.Budnik   format + #5668
417
418
		return this.panelImage;
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
419
420

	updatePlotImage: function (configResult, newPlot) {
bab90f22   Elena.Budnik   format + #5668
421
		this.crtContext = configResult.context;
8c88a270   Erdogan Furkan   10312 - Navigatio...
422
423


bab90f22   Elena.Budnik   format + #5668
424
		this.crtTTFileIndex = configResult.ttFileIndex;
8c88a270   Erdogan Furkan   10312 - Navigatio...
425
426

		if (this.isTTNavBar != (!configResult.isInterval) || (this.isSuperposeMode != this.crtContext.page.superposeMode)) {
bab90f22   Elena.Budnik   format + #5668
427
428
429
			//Update navigation bar
			this.updateNavToolBar(!configResult.isInterval, this.crtContext.page.superposeMode);
		}
8c88a270   Erdogan Furkan   10312 - Navigatio...
430

bab90f22   Elena.Budnik   format + #5668
431
		this.updateTimeTableInfo();
8c88a270   Erdogan Furkan   10312 - Navigatio...
432

bab90f22   Elena.Budnik   format + #5668
433
		this.panelImage.setSrc(this.getImageUrl(configResult.folder, configResult.plotFile));
8c88a270   Erdogan Furkan   10312 - Navigatio...
434

bab90f22   Elena.Budnik   format + #5668
435
436
		var size = this.getImageSize();
		this.panelImage.setSize(size.width, size.height);
8c88a270   Erdogan Furkan   10312 - Navigatio...
437

bab90f22   Elena.Budnik   format + #5668
438
439
		this.panelImage.refreshMe();
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
440
441

	updateTimeTableInfo: function () {
bab90f22   Elena.Budnik   format + #5668
442
443
		if (!this.navToolBar)
			return;
8c88a270   Erdogan Furkan   10312 - Navigatio...
444
445

		var ttNameField = this.navToolBar.items.get('tt-table-' + this.interactiveId);
bab90f22   Elena.Budnik   format + #5668
446
447
		if (ttNameField)
			ttNameField.setValue(this.crtContext.page.ttName);
8c88a270   Erdogan Furkan   10312 - Navigatio...
448
449

		var ttNumberField = this.navToolBar.items.get('tt-number-' + this.interactiveId);
bab90f22   Elena.Budnik   format + #5668
450
451
		if (ttNumberField)
			ttNumberField.setValue(this.crtContext.page.ttIndex + 1);
8c88a270   Erdogan Furkan   10312 - Navigatio...
452
453

		var ttTotalField = this.navToolBar.items.get('tt-total-' + this.interactiveId);
bab90f22   Elena.Budnik   format + #5668
454
455
456
		if (ttTotalField)
			ttTotalField.setValue(this.crtContext.page.ttNbIntervals);
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
457

bd8d75af   Menouard AZIB   Disable paramter ...
458
	callInteractivePlot: function (obj, postProcess = () => null) {
bab90f22   Elena.Budnik   format + #5668
459
		loadMask.show(true);
8c88a270   Erdogan Furkan   10312 - Navigatio...
460

bab90f22   Elena.Budnik   format + #5668
461
		var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id);
27a055f4   Benjamin Renard   Multiplot (#8314)
462
		obj['multiplot'] = this.multiplot;
8c88a270   Erdogan Furkan   10312 - Navigatio...
463

b0a1c31b   Benjamin Renard   Remove multi-plot...
464
		AmdaAction.interactivePlot(obj, function (result, e) {
bab90f22   Elena.Budnik   format + #5668
465
466
			loadMask.hide();
			var t = e.getTransaction();
8c88a270   Erdogan Furkan   10312 - Navigatio...
467
468
			if (e.status) {
				if (result) {
8c88a270   Erdogan Furkan   10312 - Navigatio...
469
					if (result.success) {
a0db7984   Erdogan Furkan   #10663 - Done
470
						plotModule.updateInteractiveSession(result, false, obj['panelId'], obj['time']);
9f08f4eb   Benjamin Renard   Zoom in interacti...
471
472
					}
					else
8c88a270   Erdogan Furkan   10312 - Navigatio...
473
						myDesktopApp.errorMsg('Interactive action error - ' + result.message);
9f08f4eb   Benjamin Renard   Zoom in interacti...
474
475
476
477
				}
				else
					myDesktopApp.errorMsg('Cannot execute interactive action');
			}
8c88a270   Erdogan Furkan   10312 - Navigatio...
478
			else {
9f08f4eb   Benjamin Renard   Zoom in interacti...
479
				// FAILURE
8c88a270   Erdogan Furkan   10312 - Navigatio...
480
481
482
				myDesktopApp.errorMsg('Error System - ' + e.message);
			}
		}, this);
bab90f22   Elena.Budnik   format + #5668
483
	},
8c88a270   Erdogan Furkan   10312 - Navigatio...
484
485

	updateNavToolBar: function (isTimeTable, isSuperposeMode) {
bab90f22   Elena.Budnik   format + #5668
486
487
		if (this.navToolBar)
			this.navToolBar.removeAll(true);
8c88a270   Erdogan Furkan   10312 - Navigatio...
488

bab90f22   Elena.Budnik   format + #5668
489
		var commonItemsCfg = [
8c88a270   Erdogan Furkan   10312 - Navigatio...
490
491
492
493
494
495
			'-',
			{
				xtype: 'tbspacer',
				width: 20
			},
			'->',
bab90f22   Elena.Budnik   format + #5668
496
			{
8c88a270   Erdogan Furkan   10312 - Navigatio...
497
				text: 'Get HST Data',
bab90f22   Elena.Budnik   format + #5668
498
				scope: this,
8c88a270   Erdogan Furkan   10312 - Navigatio...
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
				menu: [
					{
						text: 'Giant Planet Auroral Emissions',
						scope: this,
						handler: function () {
							var me = this;
							myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.astro.id, true, function (module) {
								var startTime = new Date(me.crtContext.page.startTime * 1000);
								startTime = Ext.Date.add(startTime, Ext.Date.MINUTE, startTime.getTimezoneOffset());

								var stopTime = new Date(me.crtContext.page.stopTime * 1000);
								stopTime = Ext.Date.add(stopTime, Ext.Date.MINUTE, stopTime.getTimezoneOffset());

								module.createWindow(startTime, stopTime);
							});
						}
					}]
			}];

		if (isTimeTable) {
bab90f22   Elena.Budnik   format + #5668
519
520
521
			var navigationItemsCfg = [{
				text: 'Previous',
				scope: this,
8c88a270   Erdogan Furkan   10312 - Navigatio...
522
				handler: function () {
bab90f22   Elena.Budnik   format + #5668
523
524
					var ttFileIndex = this.crtTTFileIndex;
					var ttintervalIndex = this.crtContext.page.ttIndex;
8c88a270   Erdogan Furkan   10312 - Navigatio...
525
526
527

					if (ttintervalIndex <= 0 && ttFileIndex > 0) {
						--ttFileIndex;
bab90f22   Elena.Budnik   format + #5668
528
529
530
					}
					else
						--ttintervalIndex;
8c88a270   Erdogan Furkan   10312 - Navigatio...
531
532
					this.callInteractivePlot({ 'action': 'goto', 'interactiveId': this.interactiveId, 'ttFileIndex': ttFileIndex, 'intIndex': ttintervalIndex });
				}
bab90f22   Elena.Budnik   format + #5668
533
			},
8c88a270   Erdogan Furkan   10312 - Navigatio...
534
				'-',
bab90f22   Elena.Budnik   format + #5668
535
536
537
			{
				text: 'Next',
				scope: this,
8c88a270   Erdogan Furkan   10312 - Navigatio...
538
				handler: function () {
bab90f22   Elena.Budnik   format + #5668
539
540
					var ttFileIndex = this.crtTTFileIndex;
					var ttintervalIndex = this.crtContext.page.ttIndex;
8c88a270   Erdogan Furkan   10312 - Navigatio...
541
542
543

					if (ttintervalIndex >= this.crtContext.page.ttNbIntervals - 1) {

bab90f22   Elena.Budnik   format + #5668
544
545
546
547
548
549
						++ttFileIndex;
						ttintervalIndex = 0;
					}
					else
						++ttintervalIndex;

8c88a270   Erdogan Furkan   10312 - Navigatio...
550
					this.callInteractivePlot({ 'action': 'goto', 'interactiveId': this.interactiveId, 'ttFileIndex': ttFileIndex, 'intIndex': ttintervalIndex });
bab90f22   Elena.Budnik   format + #5668
551
552
				}
			},
535d7638   Menouard AZIB   I have added a co...
553
				'-',
8c88a270   Erdogan Furkan   10312 - Navigatio...
554
			{
46bd4591   Hacene SI HADJ MOHAND   us ok
555
556
				text: 'Use This Time Inteval',
				scope: this,
535d7638   Menouard AZIB   I have added a co...
557
558
559
560
561
562
563
				handler: function () {
					var timeObj = new Object();
					var startTime = new Date(this.crtContext.page.startTime * 1000);
					timeObj.start = Ext.Date.add(startTime, Ext.Date.MINUTE, startTime.getTimezoneOffset());

					var stopTime = new Date(this.crtContext.page.stopTime * 1000);
					timeObj.stop = Ext.Date.add(stopTime, Ext.Date.MINUTE, stopTime.getTimezoneOffset());
46bd4591   Hacene SI HADJ MOHAND   us ok
564
565

					var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id);
535d7638   Menouard AZIB   I have added a co...
566
					plotModule.setTimeInterval(timeObj);
46bd4591   Hacene SI HADJ MOHAND   us ok
567
568
				}
			},
535d7638   Menouard AZIB   I have added a co...
569
570
571
				'-',
			{
				text: 'Go to Interval #',
bab90f22   Elena.Budnik   format + #5668
572
				scope: this,
8c88a270   Erdogan Furkan   10312 - Navigatio...
573
574
				handler: function (bt) {
					var ttGotoNumberField = this.navToolBar.items.get('tt-goto-number-' + this.interactiveId);
bab90f22   Elena.Budnik   format + #5668
575
576
577
578
					var goToIndex = ttGotoNumberField.getValue() - 1;
					if ((goToIndex < 0) || (goToIndex >= this.crtContext.page.ttNbIntervals))
						myDesktopApp.errorMsg('This interval number is outside of the current timeTable');
					else
8c88a270   Erdogan Furkan   10312 - Navigatio...
579
						this.callInteractivePlot({ 'action': 'goto', 'interactiveId': this.interactiveId, 'ttFileIndex': this.crtTTFileIndex, 'intIndex': goToIndex });
bab90f22   Elena.Budnik   format + #5668
580
581
582
583
				}
			},
			{
				xtype: 'numberfield',
8c88a270   Erdogan Furkan   10312 - Navigatio...
584
585
586
				id: 'tt-goto-number-' + this.interactiveId,
				hideTrigger: true,
				width: 50,
bab90f22   Elena.Budnik   format + #5668
587
588
				minValue: 1
			},
8c88a270   Erdogan Furkan   10312 - Navigatio...
589
590
591
592
				' ',
				' ',
				' ',
			{
bab90f22   Elena.Budnik   format + #5668
593
				xtype: 'textfield',
8c88a270   Erdogan Furkan   10312 - Navigatio...
594
				id: 'tt-table-' + this.interactiveId,
bab90f22   Elena.Budnik   format + #5668
595
596
597
598
				labelAlign: 'right',
				labelWidth: 30,
				fieldLabel: 'Table',
				width: 130,
8c88a270   Erdogan Furkan   10312 - Navigatio...
599
				disabled: true
bab90f22   Elena.Budnik   format + #5668
600
			},
8c88a270   Erdogan Furkan   10312 - Navigatio...
601
			{
bab90f22   Elena.Budnik   format + #5668
602
				xtype: 'textfield',
8c88a270   Erdogan Furkan   10312 - Navigatio...
603
				id: 'tt-number-' + this.interactiveId,
bab90f22   Elena.Budnik   format + #5668
604
605
606
607
				labelAlign: 'right',
				labelWidth: 30,
				fieldLabel: 'Int #',
				width: 90,
8c88a270   Erdogan Furkan   10312 - Navigatio...
608
				disabled: true
bab90f22   Elena.Budnik   format + #5668
609
			},
8c88a270   Erdogan Furkan   10312 - Navigatio...
610
611
612
			{
				xtype: 'textfield',
				id: 'tt-total-' + this.interactiveId,
bab90f22   Elena.Budnik   format + #5668
613
614
615
616
				labelAlign: 'right',
				labelWidth: 30,
				fieldLabel: 'Total',
				width: 90,
8c88a270   Erdogan Furkan   10312 - Navigatio...
617
				disabled: true
bab90f22   Elena.Budnik   format + #5668
618
619
			}];
		}
8c88a270   Erdogan Furkan   10312 - Navigatio...
620
		else {
bab90f22   Elena.Budnik   format + #5668
621
			var navigationItemsCfg = [
8c88a270   Erdogan Furkan   10312 - Navigatio...
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
				{
					text: 'Backward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'backward', 'interactiveId': this.interactiveId });
					}
				},
				'-',
				{
					text: '1/2 Backward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'halfbackward', 'interactiveId': this.interactiveId });
					}
				},
				'-',
				{
					text: '1/4 Backward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'quarterbackward', 'interactiveId': this.interactiveId });
					}
				},
				'-',
				{
					text: '1/4 Forward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'quarterforward', 'interactiveId': this.interactiveId });
					}
				},
				'-',
				{
					text: '1/2 Forward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'halfforward', 'interactiveId': this.interactiveId });
					}
				},
				'-',
				{
					text: 'Forward',
					scope: this,
					handler: function () {
						this.callInteractivePlot({ 'action': 'forward', 'interactiveId': this.interactiveId });
					}
				}];
bab90f22   Elena.Budnik   format + #5668
669
670
671
		}

		var toolItemsCfg = navigationItemsCfg;
8c88a270   Erdogan Furkan   10312 - Navigatio...
672
		Ext.each(commonItemsCfg, function (item) {
bab90f22   Elena.Budnik   format + #5668
673
674
			toolItemsCfg.push(item);
		});
8c88a270   Erdogan Furkan   10312 - Navigatio...
675
676

		if (!this.navToolBar) {
bab90f22   Elena.Budnik   format + #5668
677
678
			var toolConfig = {
				dock: 'top',
8c88a270   Erdogan Furkan   10312 - Navigatio...
679
				items: toolItemsCfg
bab90f22   Elena.Budnik   format + #5668
680
681
			};

8c88a270   Erdogan Furkan   10312 - Navigatio...
682
			this.navToolBar = Ext.create('Ext.toolbar.Toolbar', toolConfig);
bab90f22   Elena.Budnik   format + #5668
683
684
685
686
687
688
689
690
		}
		else
			this.navToolBar.add(toolItemsCfg);

		this.navToolBar.setDisabled(isSuperposeMode);

		this.isTTNavBar = isTimeTable;
		this.isSuperposeMode = isSuperposeMode;
8c88a270   Erdogan Furkan   10312 - Navigatio...
691
692
693
	},

	init: function (configResult) {
bab90f22   Elena.Budnik   format + #5668
694
		this.crtContext = configResult.context;
bd8d75af   Menouard AZIB   Disable paramter ...
695
		this.configResult = configResult;
b39c9d1d   Benjamin Renard   Fix interactive n...
696
		this.interactiveId = configResult.interactiveId;
27a055f4   Benjamin Renard   Multiplot (#8314)
697
		this.multiplot = (configResult.multiplot == true);
bab90f22   Elena.Budnik   format + #5668
698
699
700

		this.coordinatesField = new Ext.toolbar.TextItem({
			width: 300,
8c88a270   Erdogan Furkan   10312 - Navigatio...
701
			text: ''
bab90f22   Elena.Budnik   format + #5668
702
703
704
		});

		this.sliderPage = new Ext.slider.Single({
8c88a270   Erdogan Furkan   10312 - Navigatio...
705
706
707
708
709
710
711
712
713
714
715
716
717
718
			width: 130,
			value: 75,
			increment: 5,
			minValue: 50,
			maxValue: 100,
			fieldLabel: 'Resize',
			labelWidth: 40,
			listeners: {
				scope: this,
				changecomplete: function (s, v) {
					var zoomPlugin = this.getPlugin('plot-zoom-plugin-id');
					zoomPlugin.close();
					var size = this.getImageSize();
					this.panelImage.width = size.width;
bab90f22   Elena.Budnik   format + #5668
719
720
					this.panelImage.height = size.height;
					this.panelImage.doComponentLayout();
8c88a270   Erdogan Furkan   10312 - Navigatio...
721
					this.fireEvent('pagesize', this, v);
bab90f22   Elena.Budnik   format + #5668
722
				}
8c88a270   Erdogan Furkan   10312 - Navigatio...
723
724
725
			}
		});

bab90f22   Elena.Budnik   format + #5668
726
727
728
729
		var mouseToolbar = {
			xtype: 'toolbar',
			height: 25,
			dock: 'bottom',
8c88a270   Erdogan Furkan   10312 - Navigatio...
730
			items: [
bab90f22   Elena.Budnik   format + #5668
731
732
733
734
735
				this.coordinatesField,
				'->',
				this.sliderPage
			]
		};
8c88a270   Erdogan Furkan   10312 - Navigatio...
736

bab90f22   Elena.Budnik   format + #5668
737
738
739
740
741
742
743
744
745
746
		this.contextualMenu = Ext.create('Ext.menu.Menu', {
			width: 200,
			plain: true,
			items: []
		});

		this.updateNavToolBar(!configResult.isInterval, this.crtContext.page.superposeMode);

		this.updateTimeTableInfo();

bab90f22   Elena.Budnik   format + #5668
747
		var plotResultTabPanelConfig = {
8c88a270   Erdogan Furkan   10312 - Navigatio...
748
749
750
			preventHeader: true,
			autoScroll: true,
			items: [this.createPlotImage(configResult.folder, configResult.plotFile)],
bab90f22   Elena.Budnik   format + #5668
751
752
			dockedItems: [this.navToolBar, mouseToolbar],
			plugins: [
8c88a270   Erdogan Furkan   10312 - Navigatio...
753
754
755
756
757
758
759
				{
					ptype: 'plotZoomPlugin',
					pluginId: 'plot-zoom-plugin-id'
				},
				{
					ptype: 'plotExtendShiftPlugin',
					pluginId: 'plot-extendshift-plugin-id'
8c88a270   Erdogan Furkan   10312 - Navigatio...
760
				}],
bab90f22   Elena.Budnik   format + #5668
761
			listeners: {
8c88a270   Erdogan Furkan   10312 - Navigatio...
762
763
				scope: this,
				destroy: function () {
bab90f22   Elena.Budnik   format + #5668
764
765
766
767
768
769
					var zoomPlugin = this.getPlugin('plot-zoom-plugin-id');
					if (zoomPlugin)
						zoomPlugin.close();
					var exttendShiftPlugin = this.getPlugin('plot-extendshift-plugin-id');
					if (exttendShiftPlugin)
						exttendShiftPlugin.close();
bab90f22   Elena.Budnik   format + #5668
770
771
772
				}
			}
		};
8c88a270   Erdogan Furkan   10312 - Navigatio...
773
774

		Ext.apply(this, plotResultTabPanelConfig);
bab90f22   Elena.Budnik   format + #5668
775
776
	}
});