p5.js-web-editor/client/modules/IDE/components/Preferences.js

129 lines
4.5 KiB
JavaScript
Raw Normal View History

import React, { PropTypes } from 'react';
2016-06-24 00:29:55 +02:00
const Isvg = require('react-inlinesvg');
const exitUrl = require('../../../images/exit.svg');
const plusUrl = require('../../../images/plus.svg');
const minusUrl = require('../../../images/minus.svg');
const classNames = require('classnames');
function Preferences(props) {
const preferencesContainerClass = classNames({
preferences: true,
'preferences--selected': props.isVisible
});
2016-07-11 04:52:48 +02:00
let preferencesTabOptionClass = classNames({
preference__option: true,
'preference__option--selected': props.isTabIndent
});
let preferencesSpaceOptionClass = classNames({
preference__option: true,
'preference__option--selected': !props.isTabIndent
});
return (
2016-07-14 23:20:44 +02:00
<section className={preferencesContainerClass} tabIndex="0" title="preference-menu">
<div className="preferences__heading">
<h2 className="preferences__title">Preferences</h2>
2016-07-15 22:47:12 +02:00
<button
className="preferences__exit-button"
onClick={props.closePreferences}
title="exit"
>
<Isvg src={exitUrl} alt="Exit Preferences" />
</button>
2016-06-24 00:29:55 +02:00
</div>
2016-07-06 17:27:39 +02:00
<div className="preference">
2016-07-06 17:27:39 +02:00
<h4 className="preference__title">Text Size</h4>
2016-07-15 22:47:12 +02:00
<button
className="preference__plus-button"
onClick={props.decreaseFont}
id="preference-decrease-font-size"
>
<Isvg src={minusUrl} alt="Decrease Font Size" />
2016-07-11 04:52:48 +02:00
<h6 className="preference__label">Decrease</h6>
</button>
2016-07-15 22:47:12 +02:00
<label htmlFor="preference-decrease-font-size" className="preference__button-label">
Decrease Font Size
</label>
2016-07-13 21:23:48 +02:00
<input
className="preference__value"
aria-live="status"
aria-live="polite"
role="status"
value={props.fontSize}
onChange={props.updateFont}
>
</input>
2016-07-15 22:47:12 +02:00
<button
className="preference__minus-button"
onClick={props.increaseFont}
id="preference-increase-font-size"
>
<Isvg src={plusUrl} alt="Increase Font Size" />
2016-07-11 04:52:48 +02:00
<h6 className="preference__label">Increase</h6>
</button>
2016-07-15 22:47:12 +02:00
<label htmlFor="preference-increase-font-size" className="preference__button-label">
Increase Font Size
</label>
</div>
2016-07-06 17:27:39 +02:00
<div className="preference">
<h4 className="preference__title">Indentation Amount</h4>
2016-07-15 22:47:12 +02:00
<button
className="preference__plus-button"
onClick={props.decreaseIndentation}
id="preference-decrease-indentation"
>
2016-07-06 17:27:39 +02:00
<Isvg src={minusUrl} alt="DecreaseIndentation Amount" />
2016-07-11 04:52:48 +02:00
<h6 className="preference__label">Decrease</h6>
2016-07-06 17:27:39 +02:00
</button>
2016-07-15 22:47:12 +02:00
<label htmlFor="preference-decrease-indentation" className="preference__button-label">
Decrease Indentation Amount
</label>
2016-07-13 21:23:48 +02:00
<input
className="preference__value"
aria-live="status"
aria-live="polite"
role="status"
value={props.indentationAmount}
onChange={props.updateIndentation}
>
</input>
2016-07-15 22:47:12 +02:00
<button
className="preference__minus-button"
onClick={props.increaseIndentation}
id="preference-increase-indentation"
>
2016-07-06 17:27:39 +02:00
<Isvg src={plusUrl} alt="IncreaseIndentation Amount" />
2016-07-11 04:52:48 +02:00
<h6 className="preference__label">Increase</h6>
2016-07-06 17:27:39 +02:00
</button>
2016-07-15 22:47:12 +02:00
<label htmlFor="preference-increase-indentation" className="preference__button-label">
Increase Indentation Amount
</label>
2016-07-11 14:44:27 +02:00
<div className="preference__vertical-list">
<button className={preferencesSpaceOptionClass} onClick={props.indentWithSpace}>Spaces</button>
<button className={preferencesTabOptionClass} onClick={props.indentWithTab}>Tabs</button>
</div>
2016-07-06 17:27:39 +02:00
</div>
2016-07-14 23:20:44 +02:00
</section>
);
2016-06-24 00:29:55 +02:00
}
Preferences.propTypes = {
isVisible: PropTypes.bool.isRequired,
closePreferences: PropTypes.func.isRequired,
decreaseFont: PropTypes.func.isRequired,
2016-07-11 02:13:37 +02:00
updateFont: PropTypes.func.isRequired,
fontSize: PropTypes.number.isRequired,
2016-07-06 17:27:39 +02:00
increaseFont: PropTypes.func.isRequired,
indentationAmount: PropTypes.number.isRequired,
decreaseIndentation: PropTypes.func.isRequired,
2016-07-11 02:13:37 +02:00
increaseIndentation: PropTypes.func.isRequired,
2016-07-11 04:52:48 +02:00
updateIndentation: PropTypes.func.isRequired,
indentWithSpace: PropTypes.func.isRequired,
indentWithTab: PropTypes.func.isRequired,
isTabIndent: PropTypes.bool.isRequired
};
2016-06-24 00:29:55 +02:00
export default Preferences;