@desynova-digital/player 4.0.0 → 4.0.2

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 (111) hide show
  1. package/Manager.js +99 -0
  2. package/actions/player.js +331 -0
  3. package/actions/video.js +206 -0
  4. package/{utils/colors.js → colors.js} +1 -2
  5. package/{media → components}/AudioMeter.js +96 -109
  6. package/components/BigPlayButton.js +84 -0
  7. package/components/ImageViewer.js +272 -0
  8. package/{control → components}/MarkerBar.js +33 -24
  9. package/{utils → components}/Menu.js +13 -4
  10. package/components/Player.js +706 -0
  11. package/{header/Header.js → components/PlayerHeader.js} +104 -78
  12. package/components/Playlist.js +95 -0
  13. package/{control → components}/PointersBar.js +122 -61
  14. package/components/PosterImage.js +50 -0
  15. package/{media → components}/SDOutline.js +13 -49
  16. package/components/Shortcut.js +821 -0
  17. package/{control → components}/Slider.js +27 -23
  18. package/components/TagsBar.js +81 -0
  19. package/components/Video.js +1280 -0
  20. package/{control → components/control-bar}/AudioTracksMenuButton.js +32 -28
  21. package/components/control-bar/CameraButton.js +75 -0
  22. package/components/control-bar/CommentsButton.js +186 -0
  23. package/components/control-bar/ControlBar.js +266 -0
  24. package/components/control-bar/EditorControlMenuButton.js +317 -0
  25. package/components/control-bar/ForwardControl.js +12 -0
  26. package/components/control-bar/ForwardReplayControl.js +106 -0
  27. package/{control → components/control-bar}/FullscreenToggle.js +26 -21
  28. package/components/control-bar/PlayToggle.js +85 -0
  29. package/components/control-bar/ReplayControl.js +12 -0
  30. package/components/control-bar/SettingsMenuButton.js +41 -0
  31. package/components/control-bar/SubtitleLanguagesMenuButton.js +149 -0
  32. package/components/control-bar/SubtitleMovementMenu.js +140 -0
  33. package/{control/VolumneMenuButton.js → components/control-bar/VolumeMenuButton.js} +26 -27
  34. package/components/control-bar/ZoomMenuButton.js +90 -0
  35. package/{control → components/marking-controls}/MarkInControl.js +32 -25
  36. package/{control → components/marking-controls}/MarkOutControl.js +35 -26
  37. package/components/marking-controls/MarkingAddButton.js +79 -0
  38. package/components/marking-controls/MarkingControl.js +95 -0
  39. package/components/marking-controls/MarkingDeleteButton.js +70 -0
  40. package/{control → components/marking-controls}/MarkingDuration.js +12 -5
  41. package/components/marking-controls/MarkingPreview.js +72 -0
  42. package/components/progress-bar/AudioWaveform.js +126 -0
  43. package/components/progress-bar/LoadProgressBar.js +67 -0
  44. package/components/progress-bar/MouseTimeDisplay.js +36 -0
  45. package/{control → components/progress-bar}/PlayProgressBar.js +4 -4
  46. package/components/progress-bar/ProgressControl.js +186 -0
  47. package/{control → components/progress-bar}/SeekBar.js +113 -72
  48. package/{control → components/progress-bar}/Timeline.js +43 -32
  49. package/{control/PlayBackRateControl.js → components/settings-menu-control/PlaybackRateControl.js} +44 -30
  50. package/components/settings-menu-control/SafeAreaControl.js +81 -0
  51. package/components/settings-menu-control/SettingsMenu.js +56 -0
  52. package/components/settings-menu-control/SubtitleControl.js +1 -0
  53. package/components/time-controls/CurrentTimeDisplay.js +83 -0
  54. package/{control → components/time-controls}/DurationDisplay.js +8 -15
  55. package/components/time-controls/TimeDivider.js +25 -0
  56. package/{control → components/volume-control}/VolumeBar.js +62 -80
  57. package/components/volume-control/VolumeControl.js +19 -0
  58. package/{control → components/volume-control}/VolumeLevel.js +2 -3
  59. package/components/zoom-control/ZoomBar.js +155 -0
  60. package/components/zoom-control/ZoomLevel.js +55 -0
  61. package/index.js +198 -1
  62. package/package.json +5 -8
  63. package/reducers/index.js +19 -0
  64. package/reducers/operation.js +35 -0
  65. package/reducers/player.js +222 -0
  66. package/utils/browser.js +30 -0
  67. package/utils/dom.js +93 -0
  68. package/utils/fullscreen.js +72 -0
  69. package/utils/index.js +156 -57
  70. package/Player.js +0 -945
  71. package/control/AudioTracksMenuButton.jsx +0 -80
  72. package/control/ControlBar.js +0 -303
  73. package/control/ControlBar.jsx +0 -264
  74. package/control/CurrentTimeDisplay.js +0 -34
  75. package/control/CurrentTimeDisplay.jsx +0 -35
  76. package/control/DurationDisplay.jsx +0 -48
  77. package/control/ForwardBackwardControl.js +0 -76
  78. package/control/ForwardBackwardControl.jsx +0 -79
  79. package/control/FullscreenToggle.jsx +0 -83
  80. package/control/MarkInControl.jsx +0 -109
  81. package/control/MarkOutControl.jsx +0 -131
  82. package/control/MarkerBar.jsx +0 -107
  83. package/control/MarkingControl.js +0 -82
  84. package/control/MarkingControl.jsx +0 -143
  85. package/control/MarkingPreview.js +0 -49
  86. package/control/MarkingPreview.jsx +0 -60
  87. package/control/PlayBackRateControl.jsx +0 -106
  88. package/control/PlayProgressBar.jsx +0 -92
  89. package/control/PlayToggle.js +0 -56
  90. package/control/PlayToggle.jsx +0 -57
  91. package/control/PointersBar.jsx +0 -286
  92. package/control/ProgressControl.js +0 -127
  93. package/control/ProgressControl.jsx +0 -155
  94. package/control/SeekBar.jsx +0 -229
  95. package/control/SettingsMenuButton.js +0 -63
  96. package/control/SettingsMenuButton.jsx +0 -69
  97. package/control/Slider.jsx +0 -243
  98. package/control/Timeline.jsx +0 -131
  99. package/control/VolumeBar.jsx +0 -174
  100. package/control/VolumeLevel.jsx +0 -66
  101. package/control/VolumneMenuButton.jsx +0 -111
  102. package/header/Header.jsx +0 -479
  103. package/media/AudioMeter.jsx +0 -411
  104. package/media/SDOutline.jsx +0 -90
  105. package/media/Video.js +0 -684
  106. package/media/Video.jsx +0 -714
  107. package/playlist/Playlist.js +0 -67
  108. package/playlist/Playlist.jsx +0 -91
  109. package/playlist/index.js +0 -13
  110. package/shortcuts/Shortcut.js +0 -662
  111. package/utils/Menu.jsx +0 -105
@@ -1,229 +0,0 @@
1
- import React, { Component } from 'react';
2
- import styled from 'styled-components';
3
- import { PropTypes } from 'prop-types';
4
-
5
- // import AudioWaveform from './AudioWaveform';
6
- import Slider from './Slider';
7
- import PlayProgressBar from './PlayProgressBar';
8
- import { formatTime } from '../utils';
9
- import Timeline from './Timeline';
10
- import MarkerBar from './MarkerBar';
11
- // import TagsBar from '../TagsBar';
12
- // import MouseTimeDisplay from './MouseTimeDisplay';
13
-
14
- const AdvancedControlBlock = styled.div`
15
- width: 100%;
16
- height: 46px;
17
- position: relative;
18
- cursor: pointer;
19
- z-index: 1;
20
- `;
21
-
22
- const SliderBlock = styled.div`
23
- width: 100%;
24
- height: 4px;
25
- position: relative;
26
- cursor: pointer;
27
- z-index: 2;
28
- `;
29
-
30
- const propTypes = {
31
- actions: PropTypes.instanceOf(Object),
32
- player: PropTypes.instanceOf(Object),
33
- controlType: PropTypes.string,
34
- tagsMarker: PropTypes.instanceOf(Array),
35
- mouseTime: PropTypes.instanceOf(Object),
36
- assetType: PropTypes.oneOf(['fc', 'rc']),
37
- playerType: PropTypes.oneOf([
38
- 'dubbing_review',
39
- 'clipping_default',
40
- 'default',
41
- 'tagging',
42
- 'qc',
43
- 'subtitle',
44
- 'snp_edit',
45
- 'archive',
46
- 'restore',
47
- 'clipping',
48
- 'storyboard',
49
- 'panel'
50
- ])
51
- };
52
-
53
- export default class SeekBar extends Component {
54
- constructor(props, context) {
55
- super(props, context);
56
-
57
- this.getPercent = this.getPercent.bind(this);
58
- this.getNewTime = this.getNewTime.bind(this);
59
- this.stepForward = this.stepForward.bind(this);
60
- this.stepBack = this.stepBack.bind(this);
61
-
62
- this.handleMouseDown = this.handleMouseDown.bind(this);
63
- this.handleMouseMove = this.handleMouseMove.bind(this);
64
- this.handleMouseUp = this.handleMouseUp.bind(this);
65
-
66
- this.state = {
67
- sliderActive: false
68
- };
69
- }
70
-
71
- componentDidMount() {}
72
-
73
- componentDidUpdate() {}
74
-
75
- /**
76
- * Get percentage of video played
77
- *
78
- * @return {Number} Percentage played
79
- * @method getPercent
80
- */
81
- getPercent() {
82
- const {
83
- currentTime: { seconds },
84
- seekingTime,
85
- duration
86
- } = this.props;
87
- const time = seekingTime || seconds;
88
- const percent = time / duration.seconds;
89
- return percent >= 1 ? 1 : percent;
90
- }
91
-
92
- getNewTime(event) {
93
- const {
94
- duration: { seconds }
95
- } = this.props;
96
- const distance = this.slider.calculateDistance(event);
97
- const newTime = distance * seconds;
98
-
99
- // Don't let video end while scrubbing.
100
- return newTime === seconds ? newTime - 0.1 : newTime;
101
- }
102
-
103
- handleMouseDown() {
104
- console.log('handleMouse handleMouseDown');
105
- this.setState({ sliderActive: true });
106
- }
107
-
108
- handleMouseUp(event) {
109
- console.log('handleMouse handleMouseUp');
110
- const { actionClick } = this.props;
111
- const newTime = this.getNewTime(event);
112
- // Set new time (tell video to seek to new time)
113
- actionClick({
114
- action: 'seek',
115
- value: newTime
116
- });
117
- // actions.handleEndSeeking(newTime);//todo check if needed
118
- this.setState({ sliderActive: false });
119
- }
120
-
121
- handleMouseMove(event) {
122
- const { sliderActive } = this.state;
123
- if (sliderActive) {
124
- const { actionClick } = this.props;
125
- const newTime = this.getNewTime(event);
126
- actionClick({
127
- action: 'seeking_time',
128
- value: newTime
129
- });
130
- }
131
- }
132
-
133
- stepForward() {
134
- const { actionClick } = this.props;
135
- actionClick({
136
- action: 'add_seconds',
137
- value: '0.04'
138
- });
139
- }
140
-
141
- stepBack() {
142
- const { actionClick } = this.props;
143
- actionClick({
144
- action: 'add_seconds',
145
- value: '-0.04'
146
- });
147
- }
148
-
149
- render() {
150
- const {
151
- currentTime: { seconds },
152
- seekingTime,
153
- duration,
154
- isFullscreen,
155
- controlType,
156
- playerType,
157
- tagsMarker,
158
- assetType
159
- // mouseTime
160
- } = this.props;
161
- const time = seekingTime || seconds;
162
- return (
163
- <React.Fragment>
164
- <MarkerBar {...this.props} />
165
- {/* {tagsMarker && tagsMarker.length ? <TagsBar {...this.props} /> : null} */}
166
- {/* {controlType === 'advanced' ? <MarkerBar {...this.props} /> : null} */}
167
- <div onMouseDown={this.handleMouseDown} onMouseMove={this.handleMouseMove} onMouseUp={this.handleMouseUp}>
168
- <SliderBlock>
169
- <Slider
170
- ref={(input) => {
171
- this.slider = input;
172
- }}
173
- label="video progress bar"
174
- valuenow={(this.getPercent() * 100).toFixed(2)}
175
- valuetext={formatTime(time, duration.seconds)}
176
- // onMouseDown={this.handleMouseDown}
177
- // onMouseMove={this.handleMouseMove}
178
- // onMouseUp={this.handleMouseUp}
179
- getPercent={this.getPercent}
180
- stepForward={this.stepForward}
181
- stepBack={this.stepBack}>
182
- {/* <LoadProgressBar
183
- buffered={buffered}
184
- currentTime={time}
185
- duration={duration}
186
- playerType={this.props.playerType}
187
- />
188
- <MouseTimeDisplay
189
- duration={duration}
190
- mouseTime={mouseTime}
191
- playerType={playerType}
192
- />*/}
193
- <PlayProgressBar
194
- currentTime={time}
195
- duration={duration.seconds}
196
- playerType={playerType}
197
- assetType={assetType}
198
- {...this.props}
199
- />
200
- </Slider>
201
- </SliderBlock>
202
- {controlType === 'advanced' && !isFullscreen ? (
203
- <React.Fragment>
204
- <AdvancedControlBlock>
205
- {/*
206
- <AudioWaveform
207
- {...this.props}
208
- ref={(c) => {
209
- this.audioWaveform = c;
210
- }}
211
- />
212
- */}
213
- <Timeline
214
- {...this.props}
215
- ref={(c) => {
216
- this.timeline = c;
217
- }}
218
- />
219
- </AdvancedControlBlock>
220
- </React.Fragment>
221
- ) : null}
222
- </div>
223
- </React.Fragment>
224
- );
225
- }
226
- }
227
-
228
- SeekBar.displayName = 'SeekBar';
229
- SeekBar.propTypes = propTypes;
@@ -1,63 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = SettingsMenuButton;
7
- var _propTypes = require("prop-types");
8
- var _react = _interopRequireDefault(require("react"));
9
- var _styledComponents = _interopRequireDefault(require("styled-components"));
10
- var _Menu = _interopRequireDefault(require("../utils/Menu"));
11
- var _components = require("@desynova-digital/components");
12
- var _PlayBackRateControl = _interopRequireDefault(require("./PlayBackRateControl"));
13
- var _templateObject, _templateObject2;
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
16
- var propTypes = {
17
- player: _propTypes.PropTypes.instanceOf(Object),
18
- actions: _propTypes.PropTypes.instanceOf(Object),
19
- style: _propTypes.PropTypes.instanceOf(Object)
20
- };
21
- var SettingsMenuContainer = _styledComponents["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 100%;\n position: relative;\n .settings-menu-tile {\n background: transparent;\n div {\n padding: 15px;\n cursor: pointer;\n }\n }\n"])));
22
- var SafeAreaBlock = (0, _styledComponents["default"])('div')(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n background: transparent;\n font-family: SFUIText-Medium;\n font-size: 12px;\n text-transform: uppercase;\n justify-content: flex-start;\n align-items: center;\n &:hover {\n background: rgba(0, 206, 198, 0.1);\n }\n p {\n margin-left: 10px;\n white-space: nowrap;\n }\n"])));
23
- function SettingsMenuButton(_ref) {
24
- var style = _ref.style,
25
- SDBorderActive = _ref.SDBorderActive,
26
- actionClick = _ref.actionClick,
27
- playbackRate = _ref.playbackRate;
28
- var handleClick = function handleClick() {
29
- actionClick({
30
- action: 'handle_sd_border_change',
31
- value: !SDBorderActive
32
- });
33
- };
34
- return /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
35
- icon: "settings",
36
- position: "left",
37
- style: style
38
- }, /*#__PURE__*/_react["default"].createElement(SettingsMenuContainer, {
39
- style: style
40
- }, /*#__PURE__*/_react["default"].createElement("div", {
41
- className: "settings-menu-tile"
42
- }, /*#__PURE__*/_react["default"].createElement(SafeAreaBlock, {
43
- onClick: handleClick
44
- }, /*#__PURE__*/_react["default"].createElement(_components.Icon, {
45
- name: "safe-area",
46
- width: 20,
47
- height: 20,
48
- color: SDBorderActive ? '#00cec6' : '#333333'
49
- }), /*#__PURE__*/_react["default"].createElement("p", {
50
- style: SDBorderActive ? {
51
- color: '#00cec6'
52
- } : {
53
- color: '#333333'
54
- }
55
- }, "4:3 Safe Area"))), /*#__PURE__*/_react["default"].createElement("div", {
56
- className: "settings-menu-tile"
57
- }, /*#__PURE__*/_react["default"].createElement(_PlayBackRateControl["default"], {
58
- actionClick: actionClick,
59
- playbackRate: playbackRate
60
- }))));
61
- }
62
- SettingsMenuButton.propTypes = propTypes;
63
- SettingsMenuButton.displayName = 'SettingsMenuButton';
@@ -1,69 +0,0 @@
1
- import { PropTypes } from 'prop-types';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
- import Menu from '../utils/Menu';
5
- import { Icon } from '@desynova-digital/components';
6
- import PlaybackRateControl from './PlayBackRateControl';
7
-
8
- const propTypes = {
9
- player: PropTypes.instanceOf(Object),
10
- actions: PropTypes.instanceOf(Object),
11
- style: PropTypes.instanceOf(Object)
12
- };
13
-
14
- const SettingsMenuContainer = styled.div`
15
- width: 100%;
16
- position: relative;
17
- .settings-menu-tile {
18
- background: transparent;
19
- div {
20
- padding: 15px;
21
- cursor: pointer;
22
- }
23
- }
24
- `;
25
-
26
- const SafeAreaBlock = styled('div')`
27
- display: flex;
28
- background: transparent;
29
- font-family: SFUIText-Medium;
30
- font-size: 12px;
31
- text-transform: uppercase;
32
- justify-content: flex-start;
33
- align-items: center;
34
- &:hover {
35
- background: rgba(0, 206, 198, 0.1);
36
- }
37
- p {
38
- margin-left: 10px;
39
- white-space: nowrap;
40
- }
41
- `;
42
-
43
- export default function SettingsMenuButton({ style, SDBorderActive, actionClick, playbackRate }) {
44
- const handleClick = () => {
45
- actionClick({
46
- action: 'handle_sd_border_change',
47
- value: !SDBorderActive
48
- });
49
- };
50
-
51
- return (
52
- <Menu icon="settings" position="left" style={style}>
53
- <SettingsMenuContainer style={style}>
54
- <div className="settings-menu-tile">
55
- <SafeAreaBlock onClick={handleClick}>
56
- <Icon name="safe-area" width={20} height={20} color={SDBorderActive ? '#00cec6' : '#333333'} />
57
- <p style={SDBorderActive ? { color: '#00cec6' } : { color: '#333333' }}>4:3 Safe Area</p>
58
- </SafeAreaBlock>
59
- </div>
60
- <div className="settings-menu-tile">
61
- <PlaybackRateControl actionClick={actionClick} playbackRate={playbackRate} />
62
- </div>
63
- </SettingsMenuContainer>
64
- </Menu>
65
- );
66
- }
67
-
68
- SettingsMenuButton.propTypes = propTypes;
69
- SettingsMenuButton.displayName = 'SettingsMenuButton';
@@ -1,243 +0,0 @@
1
- import { PropTypes } from 'prop-types';
2
- import React, { Component } from 'react';
3
- import { findDOMNode } from 'react-dom';
4
- import styled from 'styled-components';
5
- import colors from '../utils/colors';
6
- import * as Dom from '../utils/dom';
7
-
8
- const propTypes = {
9
- onMouseDown: PropTypes.func,
10
- onMouseMove: PropTypes.func,
11
- stepForward: PropTypes.func,
12
- stepBack: PropTypes.func,
13
- sliderActive: PropTypes.func,
14
- sliderInactive: PropTypes.func,
15
- onMouseUp: PropTypes.func,
16
- onFocus: PropTypes.func,
17
- onBlur: PropTypes.func,
18
- onClick: PropTypes.func,
19
- getPercent: PropTypes.func,
20
- vertical: PropTypes.bool,
21
- children: PropTypes.node,
22
- label: PropTypes.string,
23
- valuenow: PropTypes.string,
24
- valuetext: PropTypes.string
25
- };
26
-
27
- const defaultProps = {
28
- onMouseDown: null,
29
- onMouseMove: null,
30
- stepForward: null,
31
- stepBack: null,
32
- sliderActive: null,
33
- sliderInactive: null,
34
- onMouseUp: null,
35
- onFocus: null,
36
- onBlur: null,
37
- onClick: null,
38
- getPercent: null,
39
- vertical: false,
40
- children: null,
41
- label: '',
42
- valuenow: '',
43
- valuetext: ''
44
- };
45
-
46
- const SliderBlock = styled.div`
47
- position: relative;
48
- z-index: 2;
49
- width: 100%;
50
- height: 100%;
51
- background: ${colors.dark.base};
52
- `;
53
-
54
- export default class Slider extends Component {
55
- constructor(props, context) {
56
- super(props, context);
57
-
58
- this.handleMouseDown = this.handleMouseDown.bind(this);
59
- this.handleMouseMove = this.handleMouseMove.bind(this);
60
- this.handleMouseUp = this.handleMouseUp.bind(this);
61
- this.handleFocus = this.handleFocus.bind(this);
62
- this.handleBlur = this.handleBlur.bind(this);
63
- this.handleClick = this.handleClick.bind(this);
64
- this.handleKeyPress = this.handleKeyPress.bind(this);
65
- this.stepForward = this.stepForward.bind(this);
66
- this.stepBack = this.stepBack.bind(this);
67
- this.calculateDistance = this.calculateDistance.bind(this);
68
- this.getProgress = this.getProgress.bind(this);
69
- this.renderChildren = this.renderChildren.bind(this);
70
-
71
- this.state = {
72
- // active: false,
73
- };
74
- }
75
-
76
- getProgress() {
77
- const { getPercent } = this.props;
78
- if (!getPercent) {
79
- return 0;
80
- }
81
- let progress = getPercent();
82
-
83
- // Protect against no duration and other division issues
84
- if (typeof progress !== 'number' || progress < 0 || progress === Infinity) {
85
- progress = 0;
86
- }
87
- return progress;
88
- }
89
-
90
- handleMouseDown(event) {
91
- const { onMouseDown, sliderActive } = this.props;
92
- /*
93
- * event.preventDefault();
94
- * event.stopPropagation();
95
- */
96
-
97
- document.addEventListener('mousemove', this.handleMouseMove, true);
98
- document.addEventListener('mouseup', this.handleMouseUp, true);
99
- document.addEventListener('touchmove', this.handleMouseMove, true);
100
- document.addEventListener('touchend', this.handleMouseUp, true);
101
-
102
- this.setState({
103
- /*
104
- * active: true,
105
- * distance: 0
106
- */
107
- });
108
-
109
- if (sliderActive) {
110
- sliderActive(event);
111
- }
112
-
113
- this.handleMouseMove(event);
114
-
115
- if (onMouseDown) {
116
- onMouseDown(event);
117
- }
118
- }
119
-
120
- handleMouseMove(event) {
121
- const { onMouseMove } = this.props;
122
-
123
- if (onMouseMove) {
124
- onMouseMove(event);
125
- }
126
- }
127
-
128
- handleMouseUp(event) {
129
- const { onMouseUp, sliderInactive } = this.props;
130
-
131
- document.removeEventListener('mousemove', this.handleMouseMove, true);
132
- document.removeEventListener('mouseup', this.handleMouseUp, true);
133
- document.removeEventListener('touchmove', this.handleMouseMove, true);
134
- document.removeEventListener('touchend', this.handleMouseUp, true);
135
-
136
- this.setState({
137
- // active: false
138
- });
139
-
140
- if (sliderInactive) {
141
- sliderInactive(event);
142
- }
143
-
144
- if (onMouseUp) {
145
- onMouseUp(event);
146
- }
147
- }
148
-
149
- handleFocus(e) {
150
- const { onFocus } = this.props;
151
- document.addEventListener('keydown', this.handleKeyPress, true);
152
- if (onFocus) {
153
- onFocus(e);
154
- }
155
- }
156
-
157
- handleBlur(e) {
158
- const { onBlur } = this.props;
159
- document.removeEventListener('keydown', this.handleKeyPress, true);
160
- if (onBlur) {
161
- onBlur(e);
162
- }
163
- }
164
-
165
- handleClick(event) {
166
- const { onClick } = this.props;
167
- event.preventDefault();
168
- // event.stopPropagation();
169
- if (onClick) {
170
- onClick(event);
171
- }
172
- }
173
-
174
- handleKeyPress(event) {
175
- if (event.which === 37 || event.which === 40) {
176
- // Left and Down Arrows
177
- event.preventDefault();
178
- event.stopPropagation();
179
- this.stepBack();
180
- } else if (event.which === 38 || event.which === 39) {
181
- // Up and Right Arrows
182
- event.preventDefault();
183
- event.stopPropagation();
184
- this.stepForward();
185
- }
186
- }
187
-
188
- stepForward() {
189
- const { stepForward } = this.props;
190
- if (stepForward) {
191
- stepForward();
192
- }
193
- }
194
-
195
- stepBack() {
196
- const { stepBack } = this.props;
197
- if (stepBack) {
198
- stepBack();
199
- }
200
- }
201
-
202
- calculateDistance(event) {
203
- const node = findDOMNode(this);
204
- const position = Dom.getPointerPosition(node, event);
205
- const { vertical } = this.props;
206
- if (vertical) {
207
- return position.y;
208
- }
209
- return position.x;
210
- }
211
-
212
- renderChildren() {
213
- const progress = this.getProgress();
214
- const percentage = `${(progress * 100).toFixed(2)}%`;
215
- const { children } = this.props;
216
- return React.Children.map(children, (child) => React.cloneElement(child, { progress, percentage }));
217
- }
218
-
219
- render() {
220
- const { label, valuenow, valuetext } = this.props;
221
-
222
- return (
223
- <SliderBlock
224
- tabIndex="0"
225
- onMouseDown={this.handleMouseDown}
226
- onTouchStart={this.handleMouseDown}
227
- onFocus={this.handleFocus}
228
- onBlur={this.handleBlur}
229
- onClick={this.handleClick}
230
- aria-label={label || ''}
231
- aria-valuenow={valuenow || ''}
232
- aria-valuetext={valuetext || ''}
233
- aria-valuemin={0}
234
- aria-valuemax={100}>
235
- {this.renderChildren()}
236
- </SliderBlock>
237
- );
238
- }
239
- }
240
-
241
- Slider.propTypes = propTypes;
242
- Slider.defaultProps = defaultProps;
243
- Slider.displayName = 'Slider';