lazy_high_charts 1.4.2 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +8 -3
  4. data/GEM_VERSION +1 -1
  5. data/Gemfile +1 -1
  6. data/Guardfile +2 -2
  7. data/README.md +4 -4
  8. data/Rakefile +36 -1
  9. data/lazy_high_charts.gemspec +11 -11
  10. data/lib/lazy_high_charts.rb +4 -2
  11. data/lib/lazy_high_charts/core_ext/string.rb +4 -4
  12. data/lib/lazy_high_charts/high_chart.rb +32 -17
  13. data/lib/lazy_high_charts/layout_helper.rb +9 -9
  14. data/lib/lazy_high_charts/railtie.rb +6 -6
  15. data/spec/high_chart_spec.rb +56 -41
  16. data/spec/lazy_high_charts_spec.rb +49 -43
  17. data/spec/spec_helper.rb +1 -1
  18. data/vendor/assets/javascripts/highcharts/adapters/mootools-adapter.js +13 -0
  19. data/vendor/assets/javascripts/highcharts/adapters/prototype-adapter.js +15 -0
  20. data/vendor/assets/javascripts/highcharts/highcharts-more.js +51 -0
  21. data/vendor/assets/javascripts/highcharts/highcharts.js +272 -0
  22. data/vendor/assets/javascripts/highcharts/highstock.js +334 -0
  23. data/vendor/assets/javascripts/highcharts/modules/exporting.js +10 -10
  24. data/vendor/assets/javascripts/highcharts/stock/adapters/mootools-adapter.js +13 -0
  25. data/vendor/assets/javascripts/highcharts/stock/adapters/prototype-adapter.js +15 -0
  26. data/vendor/assets/javascripts/highcharts/stock/highcharts-more.js +51 -0
  27. data/vendor/assets/javascripts/highcharts/stock/modules/exporting.js +22 -0
  28. metadata +59 -52
  29. metadata.gz.sig +3 -2
  30. checksums.yaml +0 -7
  31. checksums.yaml.gz.sig +0 -2
  32. data/lib/generators/lazy_high_charts/install/install_generator.rb +0 -31
  33. data/vendor/assets/javascripts/exporting.js +0 -22
  34. data/vendor/assets/javascripts/highcharts-more.js +0 -50
  35. data/vendor/assets/javascripts/highcharts.js +0 -270
  36. data/vendor/assets/javascripts/highcharts/modules/canvas-tools.js +0 -133
  37. data/vendor/assets/javascripts/highcharts/modules/canvas-tools.src.js +0 -3113
  38. data/vendor/assets/javascripts/highcharts/modules/data.js +0 -16
  39. data/vendor/assets/javascripts/highcharts/modules/data.src.js +0 -537
  40. data/vendor/assets/javascripts/highcharts/modules/exporting.src.js +0 -703
  41. data/vendor/assets/javascripts/highcharts/modules/funnel.js +0 -12
  42. data/vendor/assets/javascripts/highcharts/modules/funnel.src.js +0 -284
  43. data/vendor/assets/javascripts/highcharts/themes/dark-blue.js +0 -254
  44. data/vendor/assets/javascripts/highcharts/themes/dark-green.js +0 -255
  45. data/vendor/assets/javascripts/highcharts/themes/gray.js +0 -257
  46. data/vendor/assets/javascripts/highcharts/themes/grid.js +0 -103
  47. data/vendor/assets/javascripts/highcharts/themes/skies.js +0 -89
  48. data/vendor/assets/javascripts/highstock.js +0 -332
@@ -1,703 +0,0 @@
1
- /**
2
- * @license Highcharts JS v3.0.1 (2013-04-09)
3
- * Exporting module
4
- *
5
- * (c) 2010-2013 Torstein Hønsi
6
- *
7
- * License: www.highcharts.com/license
8
- */
9
-
10
- // JSLint options:
11
- /*global Highcharts, document, window, Math, setTimeout */
12
-
13
- (function (Highcharts) { // encapsulate
14
-
15
- // create shortcuts
16
- var Chart = Highcharts.Chart,
17
- addEvent = Highcharts.addEvent,
18
- removeEvent = Highcharts.removeEvent,
19
- createElement = Highcharts.createElement,
20
- discardElement = Highcharts.discardElement,
21
- css = Highcharts.css,
22
- merge = Highcharts.merge,
23
- each = Highcharts.each,
24
- extend = Highcharts.extend,
25
- math = Math,
26
- mathMax = math.max,
27
- doc = document,
28
- win = window,
29
- isTouchDevice = Highcharts.isTouchDevice,
30
- M = 'M',
31
- L = 'L',
32
- DIV = 'div',
33
- HIDDEN = 'hidden',
34
- NONE = 'none',
35
- PREFIX = 'highcharts-',
36
- ABSOLUTE = 'absolute',
37
- PX = 'px',
38
- UNDEFINED,
39
- symbols = Highcharts.Renderer.prototype.symbols,
40
- defaultOptions = Highcharts.getOptions(),
41
- buttonOffset;
42
-
43
- // Add language
44
- extend(defaultOptions.lang, {
45
- printChart: 'Print chart',
46
- downloadPNG: 'Download PNG image',
47
- downloadJPEG: 'Download JPEG image',
48
- downloadPDF: 'Download PDF document',
49
- downloadSVG: 'Download SVG vector image',
50
- contextButtonTitle: 'Chart context menu'
51
- });
52
-
53
- // Buttons and menus are collected in a separate config option set called 'navigation'.
54
- // This can be extended later to add control buttons like zoom and pan right click menus.
55
- defaultOptions.navigation = {
56
- menuStyle: {
57
- border: '1px solid #A0A0A0',
58
- background: '#FFFFFF',
59
- padding: '5px 0'
60
- },
61
- menuItemStyle: {
62
- padding: '0 10px',
63
- background: NONE,
64
- color: '#303030',
65
- fontSize: isTouchDevice ? '14px' : '11px'
66
- },
67
- menuItemHoverStyle: {
68
- background: '#4572A5',
69
- color: '#FFFFFF'
70
- },
71
-
72
- buttonOptions: {
73
- symbolFill: '#E0E0E0',
74
- symbolSize: 14,
75
- symbolStroke: '#666',
76
- symbolStrokeWidth: 3,
77
- symbolX: 12.5,
78
- symbolY: 10.5,
79
- align: 'right',
80
- buttonSpacing: 3,
81
- height: 22,
82
- // text: null,
83
- theme: {
84
- fill: 'white', // capture hover
85
- stroke: 'none'
86
- },
87
- verticalAlign: 'top',
88
- width: 24
89
- }
90
- };
91
-
92
-
93
-
94
- // Add the export related options
95
- defaultOptions.exporting = {
96
- //enabled: true,
97
- //filename: 'chart',
98
- type: 'image/png',
99
- url: 'http://export.highcharts.com/',
100
- //width: undefined,
101
- //scale: 2
102
- buttons: {
103
- contextButton: {
104
- //x: -10,
105
- symbol: 'menu',
106
- _titleKey: 'contextButtonTitle',
107
- menuItems: [{
108
- textKey: 'printChart',
109
- onclick: function () {
110
- this.print();
111
- }
112
- }, {
113
- separator: true
114
- }, {
115
- textKey: 'downloadPNG',
116
- onclick: function () {
117
- this.exportChart();
118
- }
119
- }, {
120
- textKey: 'downloadJPEG',
121
- onclick: function () {
122
- this.exportChart({
123
- type: 'image/jpeg'
124
- });
125
- }
126
- }, {
127
- textKey: 'downloadPDF',
128
- onclick: function () {
129
- this.exportChart({
130
- type: 'application/pdf'
131
- });
132
- }
133
- }, {
134
- textKey: 'downloadSVG',
135
- onclick: function () {
136
- this.exportChart({
137
- type: 'image/svg+xml'
138
- });
139
- }
140
- }
141
- // Enable this block to add "View SVG" to the dropdown menu
142
- /*
143
- ,{
144
-
145
- text: 'View SVG',
146
- onclick: function () {
147
- var svg = this.getSVG()
148
- .replace(/</g, '\n&lt;')
149
- .replace(/>/g, '&gt;');
150
-
151
- doc.body.innerHTML = '<pre>' + svg + '</pre>';
152
- }
153
- } // */
154
- ]
155
- }
156
- }
157
- };
158
-
159
- // Add the Highcharts.post utility
160
- Highcharts.post = function (url, data) {
161
- var name,
162
- form;
163
-
164
- // create the form
165
- form = createElement('form', {
166
- method: 'post',
167
- action: url,
168
- enctype: 'multipart/form-data'
169
- }, {
170
- display: NONE
171
- }, doc.body);
172
-
173
- // add the data
174
- for (name in data) {
175
- createElement('input', {
176
- type: HIDDEN,
177
- name: name,
178
- value: data[name]
179
- }, null, form);
180
- }
181
-
182
- // submit
183
- form.submit();
184
-
185
- // clean up
186
- discardElement(form);
187
- };
188
-
189
- extend(Chart.prototype, {
190
-
191
- /**
192
- * Return an SVG representation of the chart
193
- *
194
- * @param additionalOptions {Object} Additional chart options for the generated SVG representation
195
- */
196
- getSVG: function (additionalOptions) {
197
- var chart = this,
198
- chartCopy,
199
- sandbox,
200
- svg,
201
- seriesOptions,
202
- sourceWidth,
203
- sourceHeight,
204
- cssWidth,
205
- cssHeight,
206
- options = merge(chart.options, additionalOptions); // copy the options and add extra options
207
-
208
- // IE compatibility hack for generating SVG content that it doesn't really understand
209
- if (!doc.createElementNS) {
210
- /*jslint unparam: true*//* allow unused parameter ns in function below */
211
- doc.createElementNS = function (ns, tagName) {
212
- return doc.createElement(tagName);
213
- };
214
- /*jslint unparam: false*/
215
- }
216
-
217
- // create a sandbox where a new chart will be generated
218
- sandbox = createElement(DIV, null, {
219
- position: ABSOLUTE,
220
- top: '-9999em',
221
- width: chart.chartWidth + PX,
222
- height: chart.chartHeight + PX
223
- }, doc.body);
224
-
225
- // get the source size
226
- cssWidth = chart.renderTo.style.width;
227
- cssHeight = chart.renderTo.style.height;
228
- sourceWidth = options.exporting.sourceWidth ||
229
- options.chart.width ||
230
- (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||
231
- 600;
232
- sourceHeight = options.exporting.sourceHeight ||
233
- options.chart.height ||
234
- (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||
235
- 400;
236
-
237
- // override some options
238
- extend(options.chart, {
239
- animation: false,
240
- renderTo: sandbox,
241
- forExport: true,
242
- width: sourceWidth,
243
- height: sourceHeight
244
- });
245
- options.exporting.enabled = false; // hide buttons in print
246
- options.chart.plotBackgroundImage = null; // the converter doesn't handle images
247
-
248
- // prepare for replicating the chart
249
- options.series = [];
250
- each(chart.series, function (serie) {
251
- seriesOptions = merge(serie.options, {
252
- animation: false, // turn off animation
253
- showCheckbox: false,
254
- visible: serie.visible
255
- });
256
-
257
- if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set
258
- options.series.push(seriesOptions);
259
- }
260
- });
261
-
262
- // generate the chart copy
263
- chartCopy = new Highcharts.Chart(options, chart.callback);
264
-
265
- // reflect axis extremes in the export
266
- each(['xAxis', 'yAxis'], function (axisType) {
267
- each(chart[axisType], function (axis, i) {
268
- var axisCopy = chartCopy[axisType][i],
269
- extremes = axis.getExtremes(),
270
- userMin = extremes.userMin,
271
- userMax = extremes.userMax;
272
-
273
- if (userMin !== UNDEFINED || userMax !== UNDEFINED) {
274
- axisCopy.setExtremes(userMin, userMax, true, false);
275
- }
276
- });
277
- });
278
-
279
- // get the SVG from the container's innerHTML
280
- svg = chartCopy.container.innerHTML;
281
-
282
- // free up memory
283
- options = null;
284
- chartCopy.destroy();
285
- discardElement(sandbox);
286
-
287
- // sanitize
288
- svg = svg
289
- .replace(/zIndex="[^"]+"/g, '')
290
- .replace(/isShadow="[^"]+"/g, '')
291
- .replace(/symbolName="[^"]+"/g, '')
292
- .replace(/jQuery[0-9]+="[^"]+"/g, '')
293
- .replace(/url\([^#]+#/g, 'url(#')
294
- .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
295
- .replace(/ href=/g, ' xlink:href=')
296
- .replace(/\n/, ' ')
297
- .replace(/<\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894)
298
- /* This fails in IE < 8
299
- .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight
300
- return s2 +'.'+ s3[0];
301
- })*/
302
-
303
- // Replace HTML entities, issue #347
304
- .replace(/&nbsp;/g, '\u00A0') // no-break space
305
- .replace(/&shy;/g, '\u00AD') // soft hyphen
306
-
307
- // IE specific
308
- .replace(/<IMG /g, '<image ')
309
- .replace(/height=([^" ]+)/g, 'height="$1"')
310
- .replace(/width=([^" ]+)/g, 'width="$1"')
311
- .replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>')
312
- .replace(/id=([^" >]+)/g, 'id="$1"')
313
- .replace(/class=([^" ]+)/g, 'class="$1"')
314
- .replace(/ transform /g, ' ')
315
- .replace(/:(path|rect)/g, '$1')
316
- .replace(/style="([^"]+)"/g, function (s) {
317
- return s.toLowerCase();
318
- });
319
-
320
- // IE9 beta bugs with innerHTML. Test again with final IE9.
321
- svg = svg.replace(/(url\(#highcharts-[0-9]+)&quot;/g, '$1')
322
- .replace(/&quot;/g, "'");
323
- if (svg.match(/ xmlns="/g).length === 2) {
324
- svg = svg.replace(/xmlns="[^"]+"/, '');
325
- }
326
-
327
- return svg;
328
- },
329
-
330
- /**
331
- * Submit the SVG representation of the chart to the server
332
- * @param {Object} options Exporting options. Possible members are url, type and width.
333
- * @param {Object} chartOptions Additional chart options for the SVG representation of the chart
334
- */
335
- exportChart: function (options, chartOptions) {
336
- options = options || {};
337
-
338
- var chart = this,
339
- chartExportingOptions = chart.options.exporting,
340
- svg = chart.getSVG(merge(
341
- { chart: { borderRadius: 0 } },
342
- chartExportingOptions,
343
- chartOptions,
344
- {
345
- exporting: {
346
- sourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth, // docs: option and parameter in exportChart()
347
- sourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight // docs
348
- }
349
- }
350
- ));
351
-
352
- // merge the options
353
- options = merge(chart.options.exporting, options);
354
-
355
- // do the post
356
- Highcharts.post(options.url, {
357
- filename: options.filename || 'chart',
358
- type: options.type,
359
- width: options.width || 0, // IE8 fails to post undefined correctly, so use 0
360
- scale: options.scale || 2,
361
- svg: svg
362
- });
363
-
364
- },
365
-
366
- /**
367
- * Print the chart
368
- */
369
- print: function () {
370
-
371
- var chart = this,
372
- container = chart.container,
373
- origDisplay = [],
374
- origParent = container.parentNode,
375
- body = doc.body,
376
- childNodes = body.childNodes;
377
-
378
- if (chart.isPrinting) { // block the button while in printing mode
379
- return;
380
- }
381
-
382
- chart.isPrinting = true;
383
-
384
- // hide all body content
385
- each(childNodes, function (node, i) {
386
- if (node.nodeType === 1) {
387
- origDisplay[i] = node.style.display;
388
- node.style.display = NONE;
389
- }
390
- });
391
-
392
- // pull out the chart
393
- body.appendChild(container);
394
-
395
- // print
396
- win.focus(); // #1510
397
- win.print();
398
-
399
- // allow the browser to prepare before reverting
400
- setTimeout(function () {
401
-
402
- // put the chart back in
403
- origParent.appendChild(container);
404
-
405
- // restore all body content
406
- each(childNodes, function (node, i) {
407
- if (node.nodeType === 1) {
408
- node.style.display = origDisplay[i];
409
- }
410
- });
411
-
412
- chart.isPrinting = false;
413
-
414
- }, 1000);
415
-
416
- },
417
-
418
- /**
419
- * Display a popup menu for choosing the export type
420
- *
421
- * @param {String} name An identifier for the menu
422
- * @param {Array} items A collection with text and onclicks for the items
423
- * @param {Number} x The x position of the opener button
424
- * @param {Number} y The y position of the opener button
425
- * @param {Number} width The width of the opener button
426
- * @param {Number} height The height of the opener button
427
- */
428
- contextMenu: function (name, items, x, y, width, height, button) {
429
- var chart = this,
430
- navOptions = chart.options.navigation,
431
- menuItemStyle = navOptions.menuItemStyle,
432
- chartWidth = chart.chartWidth,
433
- chartHeight = chart.chartHeight,
434
- cacheName = 'cache-' + name,
435
- menu = chart[cacheName],
436
- menuPadding = mathMax(width, height), // for mouse leave detection
437
- boxShadow = '3px 3px 10px #888',
438
- innerMenu,
439
- hide,
440
- hideTimer,
441
- menuStyle;
442
-
443
- // create the menu only the first time
444
- if (!menu) {
445
-
446
- // create a HTML element above the SVG
447
- chart[cacheName] = menu = createElement(DIV, {
448
- className: PREFIX + name
449
- }, {
450
- position: ABSOLUTE,
451
- zIndex: 1000,
452
- padding: menuPadding + PX
453
- }, chart.container);
454
-
455
- innerMenu = createElement(DIV, null,
456
- extend({
457
- MozBoxShadow: boxShadow,
458
- WebkitBoxShadow: boxShadow,
459
- boxShadow: boxShadow
460
- }, navOptions.menuStyle), menu);
461
-
462
- // hide on mouse out
463
- hide = function () {
464
- css(menu, { display: NONE });
465
- if (button) {
466
- button.setState(0);
467
- }
468
- };
469
-
470
- // Hide the menu some time after mouse leave (#1357)
471
- addEvent(menu, 'mouseleave', function () {
472
- hideTimer = setTimeout(hide, 500);
473
- });
474
- addEvent(menu, 'mouseenter', function () {
475
- clearTimeout(hideTimer);
476
- });
477
-
478
-
479
- // create the items
480
- each(items, function (item) {
481
- if (item) {
482
- var element = item.separator ?
483
- createElement('hr', null, null, innerMenu) :
484
- createElement(DIV, {
485
- onmouseover: function () {
486
- css(this, navOptions.menuItemHoverStyle);
487
- },
488
- onmouseout: function () {
489
- css(this, menuItemStyle);
490
- },
491
- onclick: function () {
492
- hide();
493
- item.onclick.apply(chart, arguments);
494
- },
495
- innerHTML: item.text || chart.options.lang[item.textKey]
496
- }, extend({
497
- cursor: 'pointer'
498
- }, menuItemStyle), innerMenu);
499
-
500
-
501
- // Keep references to menu divs to be able to destroy them
502
- chart.exportDivElements.push(element);
503
- }
504
- });
505
-
506
- // Keep references to menu and innerMenu div to be able to destroy them
507
- chart.exportDivElements.push(innerMenu, menu);
508
-
509
- chart.exportMenuWidth = menu.offsetWidth;
510
- chart.exportMenuHeight = menu.offsetHeight;
511
- }
512
-
513
- menuStyle = { display: 'block' };
514
-
515
- // if outside right, right align it
516
- if (x + chart.exportMenuWidth > chartWidth) {
517
- menuStyle.right = (chartWidth - x - width - menuPadding) + PX;
518
- } else {
519
- menuStyle.left = (x - menuPadding) + PX;
520
- }
521
- // if outside bottom, bottom align it
522
- if (y + height + chart.exportMenuHeight > chartHeight) {
523
- menuStyle.bottom = (chartHeight - y - menuPadding) + PX;
524
- } else {
525
- menuStyle.top = (y + height - menuPadding) + PX;
526
- }
527
-
528
- css(menu, menuStyle);
529
- },
530
-
531
- /**
532
- * Add the export button to the chart
533
- */
534
- addButton: function (options) {
535
- var chart = this,
536
- renderer = chart.renderer,
537
- btnOptions = merge(chart.options.navigation.buttonOptions, options),
538
- onclick = btnOptions.onclick,
539
- menuItems = btnOptions.menuItems,
540
- symbol,
541
- button,
542
- symbolAttr = {
543
- stroke: btnOptions.symbolStroke,
544
- fill: btnOptions.symbolFill
545
- },
546
- symbolSize = btnOptions.symbolSize || 12,
547
- menuKey;
548
-
549
- if (!chart.btnCount) {
550
- chart.btnCount = 0;
551
- }
552
- menuKey = chart.btnCount++;
553
-
554
- // Keeps references to the button elements
555
- if (!chart.exportDivElements) {
556
- chart.exportDivElements = [];
557
- chart.exportSVGElements = [];
558
- }
559
-
560
- if (btnOptions.enabled === false) {
561
- return;
562
- }
563
-
564
-
565
- var attr = btnOptions.theme,
566
- states = attr.states,
567
- hover = states && states.hover,
568
- select = states && states.select,
569
- callback;
570
-
571
- delete attr.states;
572
-
573
- if (onclick) {
574
- callback = function () {
575
- onclick.apply(chart, arguments);
576
- };
577
-
578
- } else if (menuItems) {
579
- callback = function () {
580
- chart.contextMenu(
581
- 'contextmenu',
582
- menuItems,
583
- button.translateX,
584
- button.translateY,
585
- button.width,
586
- button.height,
587
- button
588
- );
589
- button.setState(2);
590
- };
591
- }
592
-
593
-
594
- if (btnOptions.text && btnOptions.symbol) {
595
- attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);
596
-
597
- } else if (!btnOptions.text) {
598
- extend(attr, {
599
- width: btnOptions.width,
600
- height: btnOptions.height,
601
- padding: 0
602
- });
603
- }
604
-
605
- button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)
606
- .attr({
607
- title: chart.options.lang[btnOptions._titleKey],
608
- 'stroke-linecap': 'round'
609
- });
610
-
611
- if (btnOptions.symbol) {
612
- symbol = renderer.symbol(
613
- btnOptions.symbol,
614
- btnOptions.symbolX - (symbolSize / 2),
615
- btnOptions.symbolY - (symbolSize / 2),
616
- symbolSize,
617
- symbolSize
618
- )
619
- .attr(extend(symbolAttr, {
620
- 'stroke-width': btnOptions.symbolStrokeWidth || 1,
621
- zIndex: 1
622
- })).add(button);
623
- }
624
-
625
- button.add()
626
- .align(extend(btnOptions, {
627
- width: button.width,
628
- x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654
629
- }), true, 'spacingBox');
630
-
631
- buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);
632
-
633
- chart.exportSVGElements.push(button, symbol);
634
-
635
- },
636
-
637
- /**
638
- * Destroy the buttons.
639
- */
640
- destroyExport: function (e) {
641
- var chart = e.target,
642
- i,
643
- elem;
644
-
645
- // Destroy the extra buttons added
646
- for (i = 0; i < chart.exportSVGElements.length; i++) {
647
- elem = chart.exportSVGElements[i];
648
- // Destroy and null the svg/vml elements
649
- elem.onclick = elem.ontouchstart = null;
650
- chart.exportSVGElements[i] = elem.destroy();
651
- }
652
-
653
- // Destroy the divs for the menu
654
- for (i = 0; i < chart.exportDivElements.length; i++) {
655
- elem = chart.exportDivElements[i];
656
-
657
- // Remove the event handler
658
- removeEvent(elem, 'mouseleave');
659
-
660
- // Remove inline events
661
- chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null;
662
-
663
- // Destroy the div by moving to garbage bin
664
- discardElement(elem);
665
- }
666
- }
667
- });
668
-
669
-
670
- symbols.menu = function (x, y, width, height) {
671
- var arr = [
672
- M, x, y + 2.5,
673
- L, x + width, y + 2.5,
674
- M, x, y + height / 2 + 0.5,
675
- L, x + width, y + height / 2 + 0.5,
676
- M, x, y + height - 1.5,
677
- L, x + width, y + height - 1.5
678
- ];
679
- return arr;
680
- };
681
-
682
- // Add the buttons on chart load
683
- Chart.prototype.callbacks.push(function (chart) {
684
- var n,
685
- exportingOptions = chart.options.exporting,
686
- buttons = exportingOptions.buttons;
687
-
688
- buttonOffset = 0;
689
-
690
- if (exportingOptions.enabled !== false) {
691
-
692
- for (n in buttons) {
693
- chart.addButton(buttons[n]);
694
- }
695
-
696
- // Destroy the export elements at chart destroy
697
- addEvent(chart, 'destroy', chart.destroyExport);
698
- }
699
-
700
- });
701
-
702
-
703
- }(Highcharts));