diff --git a/src/components/delete-button/delete-button.css b/src/components/delete-button/delete-button.css
index 6abca7ec0..b8f937eff 100644
--- a/src/components/delete-button/delete-button.css
+++ b/src/components/delete-button/delete-button.css
@@ -6,11 +6,17 @@
display: flex;
align-items: center;
justify-content: center;
+ border-radius: 50%;
user-select: none;
cursor: pointer;
transition: all 0.15s ease-out;
}
+.delete-button:focus {
+ outline: none;
+ box-shadow: 0px 0px 0px 4px $motion-transparent;
+}
+
.delete-button-visible {
display: flex;
align-items: center;
diff --git a/src/components/delete-button/delete-button.jsx b/src/components/delete-button/delete-button.jsx
index 6e84fb983..c4618d43f 100644
--- a/src/components/delete-button/delete-button.jsx
+++ b/src/components/delete-button/delete-button.jsx
@@ -1,39 +1,60 @@
import PropTypes from 'prop-types';
import React from 'react';
import classNames from 'classnames';
+import {defineMessages, injectIntl, intlShape} from 'react-intl';
import styles from './delete-button.css';
import deleteIcon from './icon--delete.svg';
-const DeleteButton = props => (
+const messages = defineMessages({
+ delete: {
+ id: 'gui.deleteButton.delete',
+ description: 'Title of the button to delete a sprite, costume or sound',
+ defaultMessage: 'Delete'
+ }
+});
+
+const DeleteButtonComponent = ({
+ className,
+ intl,
+ onClick,
+ setRef,
+ tabIndex,
+ ...props
+}) => (
-
);
-DeleteButton.propTypes = {
+
+DeleteButtonComponent.propTypes = {
className: PropTypes.string,
+ intl: intlShape,
onClick: PropTypes.func.isRequired,
+ setRef: PropTypes.func.isRequired,
tabIndex: PropTypes.number
};
-DeleteButton.defaultProps = {
+DeleteButtonComponent.defaultProps = {
tabIndex: 0
};
-export default DeleteButton;
+export default injectIntl(DeleteButtonComponent);
diff --git a/src/components/sprite-selector-item/sprite-selector-item.jsx b/src/components/sprite-selector-item/sprite-selector-item.jsx
index 458df186f..e3ed71735 100644
--- a/src/components/sprite-selector-item/sprite-selector-item.jsx
+++ b/src/components/sprite-selector-item/sprite-selector-item.jsx
@@ -2,7 +2,7 @@ import classNames from 'classnames';
import PropTypes from 'prop-types';
import React from 'react';
-import DeleteButton from '../delete-button/delete-button.jsx';
+import DeleteButton from '../../containers/delete-button.jsx';
import styles from './sprite-selector-item.css';
import {ContextMenuTrigger} from 'react-contextmenu';
import {DangerousMenuItem, ContextMenu, MenuItem} from '../context-menu/context-menu.jsx';
diff --git a/src/containers/delete-button.jsx b/src/containers/delete-button.jsx
new file mode 100644
index 000000000..600fbcdee
--- /dev/null
+++ b/src/containers/delete-button.jsx
@@ -0,0 +1,52 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import bindAll from 'lodash.bindall';
+
+import DeleteButtonComponent from '../components/delete-button/delete-button.jsx';
+
+class DeleteButton extends React.Component {
+ constructor (props) {
+ super(props);
+ bindAll(this, [
+ 'handleKeyPress',
+ 'setRef'
+ ]);
+ }
+ componentDidMount () {
+ document.addEventListener('keydown', this.handleKeyPress);
+ }
+ componentWillUnmount () {
+ document.removeEventListener('keydown', this.handleKeyPress);
+ }
+ setRef (ref) {
+ this.ref = ref;
+ }
+ handleKeyPress (event) {
+ if (this.ref === event.currentTarget.activeElement && (event.key === 'Enter' || event.key === ' ')) {
+ this.props.onClick(event);
+ event.preventDefault();
+ }
+ }
+ render () {
+ return (
+
+ );
+ }
+}
+
+DeleteButton.propTypes = {
+ className: PropTypes.string,
+ onClick: PropTypes.func.isRequired,
+ tabIndex: PropTypes.number
+};
+
+DeleteButton.defaultProps = {
+ tabIndex: 0
+};
+
+export default DeleteButton;
diff --git a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap b/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap
index f7f19434a..36e144933 100644
--- a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap
+++ b/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap
@@ -57,6 +57,7 @@ exports[`SpriteSelectorItemComponent matches snapshot when given a number and de
>
@@ -141,6 +142,7 @@ exports[`SpriteSelectorItemComponent matches snapshot when selected 1`] = `
>
diff --git a/test/unit/components/sprite-selector-item.test.jsx b/test/unit/components/sprite-selector-item.test.jsx
index fb103b4ef..b274d967b 100644
--- a/test/unit/components/sprite-selector-item.test.jsx
+++ b/test/unit/components/sprite-selector-item.test.jsx
@@ -1,7 +1,7 @@
import React from 'react';
import {mountWithIntl, shallowWithIntl, componentWithIntl} from '../../helpers/intl-helpers.jsx';
import SpriteSelectorItemComponent from '../../../src/components/sprite-selector-item/sprite-selector-item';
-import DeleteButton from '../../../src/components/delete-button/delete-button';
+import DeleteButton from '../../../src/containers/delete-button.jsx';
describe('SpriteSelectorItemComponent', () => {
let className;