feeles-ide
Version:
The hackable and serializable IDE to make learning material
282 lines (257 loc) • 8.83 kB
JavaScript
import _extends from 'babel-runtime/helpers/extends';
import _Object$keys from 'babel-runtime/core-js/object/keys';
import _defineProperty from 'babel-runtime/helpers/defineProperty';
import _Object$assign from 'babel-runtime/core-js/object/assign';
import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';
import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
import _createClass from 'babel-runtime/helpers/createClass';
import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
import _inherits from 'babel-runtime/helpers/inherits';
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import Card from '../CardWindow';
import { CardActions, CardText } from 'material-ui/Card';
import Popover from 'material-ui/Popover';
import Paper from 'material-ui/Paper';
import { convertColorToString } from 'material-ui/utils/colorManipulator';
import { transparent, fullWhite } from 'material-ui/styles/colors';
import ImagePalette from 'material-ui/svg-icons/image/palette';
import { ChromePicker, TwitterPicker } from 'react-color';
import LayeredStyle from './LayeredStyle';
var getStyles = function getStyles(props, context) {
var _context$muiTheme = context.muiTheme,
palette = _context$muiTheme.palette,
spacing = _context$muiTheme.spacing;
var bodyColor = getComputedStyle(document.body)['background-color'];
var boxSize = 60;
return {
html: {
display: 'flex',
flexDirection: 'column',
backgroundColor: fullWhite
},
body: {
backgroundColor: bodyColor
},
overlay: {
padding: spacing.desktopGutterMore,
backgroundColor: palette.backgroundColor
},
canvas: {
display: 'flex',
alignItems: 'center',
height: boxSize + 32,
backgroundColor: palette.canvasColor
},
primary: {
flex: '1 1 auto',
marginLeft: spacing.desktopGutterMore,
height: boxSize,
backgroundColor: palette.primary1Color
},
secondary: {
flex: '1 1 auto',
marginLeft: spacing.desktopGutterMore,
height: boxSize * 0.8,
backgroundColor: palette.accent1Color
},
blank: {
flex: '1 1 auto',
marginLeft: spacing.desktopGutterMore,
height: boxSize,
backgroundColor: transparent
},
container: {
textAlign: 'center',
overflow: 'hidden'
},
item: {
flex: '0 0 auto',
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-end',
maxWidth: 200,
margin: spacing.desktopGutterMini + 'px auto'
},
label: {
color: palette.textColor
},
rect: {
boxSizing: 'border-box',
marginLeft: spacing.desktopGutter,
padding: '.5rem',
border: '1px solid ' + palette.textColor
}
};
};
var PaletteCard = function (_PureComponent) {
_inherits(PaletteCard, _PureComponent);
function PaletteCard() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, PaletteCard);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PaletteCard.__proto__ || _Object$getPrototypeOf(PaletteCard)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
palette: _this.props.getConfig('palette'),
open: false,
key: null,
anchorEl: null,
limited: false
}, _this.handleRectClick = function (event, key) {
var limited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
event.stopPropagation();
var anchorEl = event.target;
var color = _this.state.palette[key];
_this.setState({ open: true, key: key, anchorEl: anchorEl, color: color, limited: limited });
}, _this.handleChangeComplete = function (structure) {
var key = _this.state.key;
var setConfig = _this.props.setConfig;
var _structure$rgb = structure.rgb,
r = _structure$rgb.r,
g = _structure$rgb.g,
b = _structure$rgb.b,
a = _structure$rgb.a;
var color = {
type: 'rgba',
values: [r, g, b, a]
};
var palette = _Object$assign({}, _this.state.palette, _defineProperty({}, key, convertColorToString(color)));
setConfig('palette', palette).then(function (file) {
return file.json;
}).then(function (palette) {
return _this.setState({ palette: palette });
});
}, _this.closePopover = function () {
_this.setState({ open: false });
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(PaletteCard, [{
key: 'renderItem',
value: function renderItem(key, styles) {
var _this2 = this;
var _context$muiTheme2 = this.context.muiTheme,
palette = _context$muiTheme2.palette,
prepareStyles = _context$muiTheme2.prepareStyles;
var rectStyle = _Object$assign({}, styles.rect, {
backgroundColor: palette[key]
});
return React.createElement(
'div',
{ key: key, style: styles.item },
React.createElement(
'span',
{ style: styles.label },
key
),
React.createElement('span', {
style: prepareStyles(rectStyle),
onClick: function onClick(event) {
return _this2.handleRectClick(event, key);
}
})
);
}
}, {
key: 'render',
value: function render() {
var _this3 = this;
var _state = this.state,
open = _state.open,
key = _state.key,
anchorEl = _state.anchorEl,
limited = _state.limited;
var _context$muiTheme3 = this.context.muiTheme,
palette = _context$muiTheme3.palette,
prepareStyles = _context$muiTheme3.prepareStyles;
var styles = getStyles(this.props, this.context);
styles.item = prepareStyles(styles.item);
styles.label = prepareStyles(styles.label);
return React.createElement(
Card,
_extends({ icon: PaletteCard.icon() }, this.props.cardPropsBag),
React.createElement(
CardActions,
null,
React.createElement(
LayeredStyle,
{
styles: [prepareStyles(styles.html), prepareStyles(styles.body), prepareStyles(styles.overlay)],
onClick: function onClick(e) {
return _this3.handleRectClick(e, 'backgroundColor');
}
},
React.createElement(
Paper,
{
style: styles.canvas,
onClick: function onClick(e) {
return _this3.handleRectClick(e, 'canvasColor');
}
},
React.createElement(Paper, {
style: styles.primary,
onClick: function onClick(e) {
return _this3.handleRectClick(e, 'primary1Color', true);
}
}),
React.createElement(Paper, {
style: styles.secondary,
onClick: function onClick(e) {
return _this3.handleRectClick(e, 'accent1Color', true);
}
}),
React.createElement('div', { style: prepareStyles(styles.blank) })
)
)
),
React.createElement(
CardText,
{ expandable: true, style: styles.container },
_Object$keys(palette).map(function (key) {
return _this3.renderItem(key, styles);
})
),
React.createElement(
Popover,
{
open: open,
anchorEl: anchorEl,
anchorOrigin: {
horizontal: 'left',
vertical: 'top'
},
targetOrigin: {
horizontal: 'left',
vertical: 'bottom'
},
onRequestClose: this.closePopover
},
limited ? React.createElement(TwitterPicker, {
color: key && palette[key],
onChangeComplete: this.handleChangeComplete
}) : React.createElement(ChromePicker, {
color: key && palette[key],
onChangeComplete: this.handleChangeComplete
})
)
);
}
}], [{
key: 'icon',
value: function icon() {
return React.createElement(ImagePalette, null);
}
}]);
return PaletteCard;
}(PureComponent);
PaletteCard.propTypes = {
cardPropsBag: PropTypes.object.isRequired,
getConfig: PropTypes.func.isRequired,
setConfig: PropTypes.func.isRequired
};
PaletteCard.contextTypes = {
muiTheme: PropTypes.object.isRequired
};
export default PaletteCard;