1
- import React from 'react' ;
2
- import ReactDOM from 'react-dom' ;
3
- import PropTypes from 'prop-types' ;
4
- import Draggable from 'react-draggable' ;
5
- import { FormattedMessage } from 'react-intl' ;
6
- import { ContextMenuTrigger } from 'react-contextmenu' ;
7
- import { BorderedMenuItem , ContextMenu , MenuItem } from '../context-menu/context-menu.jsx' ;
8
- import Box from '../box/box.jsx' ;
9
- import DefaultMonitor from './default-monitor.jsx' ;
10
- import LargeMonitor from './large-monitor.jsx' ;
11
- import SliderMonitor from '../../containers/slider-monitor.jsx' ;
12
- import ListMonitor from '../../containers/list-monitor.jsx' ;
13
- import { getColorsForTheme } from '../../lib/themes/index.js' ;
1
+ import React from "react" ;
2
+ import ReactDOM from "react-dom" ;
3
+ import PropTypes from "prop-types" ;
4
+ import Draggable from "react-draggable" ;
5
+ import { FormattedMessage } from "react-intl" ;
6
+ import { ContextMenuTrigger } from "react-contextmenu" ;
7
+ import {
8
+ BorderedMenuItem ,
9
+ ContextMenu ,
10
+ MenuItem ,
11
+ } from "../context-menu/context-menu.jsx" ;
12
+ import Box from "../box/box.jsx" ;
13
+ import DefaultMonitor from "./default-monitor.jsx" ;
14
+ import LargeMonitor from "./large-monitor.jsx" ;
15
+ import SliderMonitor from "../../containers/slider-monitor.jsx" ;
16
+ import ListMonitor from "../../containers/list-monitor.jsx" ;
17
+ import { getColorsForTheme } from "../../lib/themes/index.js" ;
14
18
15
- import styles from ' ./monitor.css' ;
19
+ import styles from " ./monitor.css" ;
16
20
17
- // Map category name to color name used in scratch-blocks Blockly.Colours
21
+ // Map category name to color name used in scratch-blocks Blockly.Colours. Note
22
+ // that Blockly uses the UK spelling of "colour", so fields that interact
23
+ // directly with Blockly follow that convention, while Scratch code uses the US
24
+ // spelling of "color".
18
25
const categoryColorMap = {
19
- data : ' data' ,
20
- sensing : ' sensing' ,
21
- sound : ' sounds' ,
22
- looks : ' looks' ,
23
- motion : ' motion' ,
24
- list : ' data_lists' ,
25
- extension : ' pen'
26
+ data : " data" ,
27
+ sensing : " sensing" ,
28
+ sound : " sounds" ,
29
+ looks : " looks" ,
30
+ motion : " motion" ,
31
+ list : " data_lists" ,
32
+ extension : " pen" ,
26
33
} ;
27
34
28
35
const modes = {
29
36
default : DefaultMonitor ,
30
37
large : LargeMonitor ,
31
38
slider : SliderMonitor ,
32
- list : ListMonitor
39
+ list : ListMonitor ,
33
40
} ;
34
41
35
42
const getCategoryColor = ( theme , category ) => {
36
43
const colors = getColorsForTheme ( theme ) ;
37
44
return {
38
- background : colors [ categoryColorMap [ category ] ] . primary ,
39
- text : colors . text
45
+ background : colors [ categoryColorMap [ category ] ] . colourPrimary ,
46
+ text : colors . text ,
40
47
} ;
41
48
} ;
42
49
43
- const MonitorComponent = props => (
50
+ const MonitorComponent = ( props ) => (
44
51
< ContextMenuTrigger
45
52
disable = { ! props . draggable }
46
- holdToDisplay = { props . mode === ' slider' ? - 1 : 1000 }
53
+ holdToDisplay = { props . mode === " slider" ? - 1 : 1000 }
47
54
id = { `monitor-${ props . label } ` }
48
55
>
49
56
< Draggable
@@ -56,80 +63,94 @@ const MonitorComponent = props => (
56
63
< Box
57
64
className = { styles . monitorContainer }
58
65
componentRef = { props . componentRef }
59
- onDoubleClick = { props . mode === 'list' || ! props . draggable ? null : props . onNextMode }
66
+ onDoubleClick = {
67
+ props . mode === "list" || ! props . draggable
68
+ ? null
69
+ : props . onNextMode
70
+ }
60
71
>
61
72
{ React . createElement ( modes [ props . mode ] , {
62
- categoryColor : getCategoryColor ( props . theme , props . category ) ,
63
- ...props
73
+ categoryColor : getCategoryColor (
74
+ props . theme ,
75
+ props . category
76
+ ) ,
77
+ ...props ,
64
78
} ) }
65
79
</ Box >
66
80
</ Draggable >
67
- { ReactDOM . createPortal ( (
81
+ { ReactDOM . createPortal (
68
82
// Use a portal to render the context menu outside the flow to avoid
69
83
// positioning conflicts between the monitors `transform: scale` and
70
84
// the context menus `position: fixed`. For more details, see
71
85
// http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/
72
86
< ContextMenu id = { `monitor-${ props . label } ` } >
73
- { props . onSetModeToDefault &&
87
+ { props . onSetModeToDefault && (
74
88
< MenuItem onClick = { props . onSetModeToDefault } >
75
89
< FormattedMessage
76
90
defaultMessage = "normal readout"
77
91
description = "Menu item to switch to the default monitor"
78
92
id = "gui.monitor.contextMenu.default"
79
93
/>
80
- </ MenuItem > }
81
- { props . onSetModeToLarge &&
94
+ </ MenuItem >
95
+ ) }
96
+ { props . onSetModeToLarge && (
82
97
< MenuItem onClick = { props . onSetModeToLarge } >
83
98
< FormattedMessage
84
99
defaultMessage = "large readout"
85
100
description = "Menu item to switch to the large monitor"
86
101
id = "gui.monitor.contextMenu.large"
87
102
/>
88
- </ MenuItem > }
89
- { props . onSetModeToSlider &&
103
+ </ MenuItem >
104
+ ) }
105
+ { props . onSetModeToSlider && (
90
106
< MenuItem onClick = { props . onSetModeToSlider } >
91
107
< FormattedMessage
92
108
defaultMessage = "slider"
93
109
description = "Menu item to switch to the slider monitor"
94
110
id = "gui.monitor.contextMenu.slider"
95
111
/>
96
- </ MenuItem > }
97
- { props . onSliderPromptOpen && props . mode === 'slider' &&
112
+ </ MenuItem >
113
+ ) }
114
+ { props . onSliderPromptOpen && props . mode === "slider" && (
98
115
< BorderedMenuItem onClick = { props . onSliderPromptOpen } >
99
116
< FormattedMessage
100
117
defaultMessage = "change slider range"
101
118
description = "Menu item to change the slider range"
102
119
id = "gui.monitor.contextMenu.sliderRange"
103
120
/>
104
- </ BorderedMenuItem > }
105
- { props . onImport &&
121
+ </ BorderedMenuItem >
122
+ ) }
123
+ { props . onImport && (
106
124
< MenuItem onClick = { props . onImport } >
107
125
< FormattedMessage
108
126
defaultMessage = "import"
109
127
description = "Menu item to import into list monitors"
110
128
id = "gui.monitor.contextMenu.import"
111
129
/>
112
- </ MenuItem > }
113
- { props . onExport &&
130
+ </ MenuItem >
131
+ ) }
132
+ { props . onExport && (
114
133
< MenuItem onClick = { props . onExport } >
115
134
< FormattedMessage
116
135
defaultMessage = "export"
117
136
description = "Menu item to export from list monitors"
118
137
id = "gui.monitor.contextMenu.export"
119
138
/>
120
- </ MenuItem > }
121
- { props . onHide &&
139
+ </ MenuItem >
140
+ ) }
141
+ { props . onHide && (
122
142
< BorderedMenuItem onClick = { props . onHide } >
123
143
< FormattedMessage
124
144
defaultMessage = "hide"
125
145
description = "Menu item to hide the monitor"
126
146
id = "gui.monitor.contextMenu.hide"
127
147
/>
128
- </ BorderedMenuItem > }
129
- </ ContextMenu >
130
- ) , document . body ) }
148
+ </ BorderedMenuItem >
149
+ ) }
150
+ </ ContextMenu > ,
151
+ document . body
152
+ ) }
131
153
</ ContextMenuTrigger >
132
-
133
154
) ;
134
155
135
156
const monitorModes = Object . keys ( modes ) ;
@@ -149,15 +170,12 @@ MonitorComponent.propTypes = {
149
170
onSetModeToLarge : PropTypes . func ,
150
171
onSetModeToSlider : PropTypes . func ,
151
172
onSliderPromptOpen : PropTypes . func ,
152
- theme : PropTypes . string . isRequired
173
+ theme : PropTypes . string . isRequired ,
153
174
} ;
154
175
155
176
MonitorComponent . defaultProps = {
156
- category : ' extension' ,
157
- mode : ' default'
177
+ category : " extension" ,
178
+ mode : " default" ,
158
179
} ;
159
180
160
- export {
161
- MonitorComponent as default ,
162
- monitorModes
163
- } ;
181
+ export { MonitorComponent as default , monitorModes } ;
0 commit comments