legendAction.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. var echarts = require("../../echarts");
  2. var zrUtil = require("zrender/lib/core/util");
  3. function legendSelectActionHandler(methodName, payload, ecModel) {
  4. var selectedMap = {};
  5. var isToggleSelect = methodName === 'toggleSelected';
  6. var isSelected; // Update all legend components
  7. ecModel.eachComponent('legend', function (legendModel) {
  8. if (isToggleSelect && isSelected != null) {
  9. // Force other legend has same selected status
  10. // Or the first is toggled to true and other are toggled to false
  11. // In the case one legend has some item unSelected in option. And if other legend
  12. // doesn't has the item, they will assume it is selected.
  13. legendModel[isSelected ? 'select' : 'unSelect'](payload.name);
  14. } else {
  15. legendModel[methodName](payload.name);
  16. isSelected = legendModel.isSelected(payload.name);
  17. }
  18. var legendData = legendModel.getData();
  19. zrUtil.each(legendData, function (model) {
  20. var name = model.get('name'); // Wrap element
  21. if (name === '\n' || name === '') {
  22. return;
  23. }
  24. var isItemSelected = legendModel.isSelected(name);
  25. if (selectedMap.hasOwnProperty(name)) {
  26. // Unselected if any legend is unselected
  27. selectedMap[name] = selectedMap[name] && isItemSelected;
  28. } else {
  29. selectedMap[name] = isItemSelected;
  30. }
  31. });
  32. }); // Return the event explicitly
  33. return {
  34. name: payload.name,
  35. selected: selectedMap
  36. };
  37. }
  38. /**
  39. * @event legendToggleSelect
  40. * @type {Object}
  41. * @property {string} type 'legendToggleSelect'
  42. * @property {string} [from]
  43. * @property {string} name Series name or data item name
  44. */
  45. echarts.registerAction('legendToggleSelect', 'legendselectchanged', zrUtil.curry(legendSelectActionHandler, 'toggleSelected'));
  46. /**
  47. * @event legendSelect
  48. * @type {Object}
  49. * @property {string} type 'legendSelect'
  50. * @property {string} name Series name or data item name
  51. */
  52. echarts.registerAction('legendSelect', 'legendselected', zrUtil.curry(legendSelectActionHandler, 'select'));
  53. /**
  54. * @event legendUnSelect
  55. * @type {Object}
  56. * @property {string} type 'legendUnSelect'
  57. * @property {string} name Series name or data item name
  58. */
  59. echarts.registerAction('legendUnSelect', 'legendunselected', zrUtil.curry(legendSelectActionHandler, 'unSelect'));