feeles-ide
Version:
The hackable and serializable IDE to make learning material
205 lines (191 loc) • 6.28 kB
JavaScript
import _extends from 'babel-runtime/helpers/extends';
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 Paper from 'material-ui/Paper';
import Popover from 'material-ui/Popover';
import RaisedButton from 'material-ui/RaisedButton';
import FloatingActionButton from 'material-ui/FloatingActionButton';
import { emphasize } from 'material-ui/utils/colorManipulator';
import ContentAdd from 'material-ui/svg-icons/content/add';
import ContentReply from 'material-ui/svg-icons/content/reply';
import ActionOpenInNew from 'material-ui/svg-icons/action/open-in-new';
var AssetButton = function (_PureComponent) {
_inherits(AssetButton, _PureComponent);
function AssetButton() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, AssetButton);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AssetButton.__proto__ || _Object$getPrototypeOf(AssetButton)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
open: false
}, _this.handleOpen = function (event) {
_this.setState({ open: true, anchorEl: event.currentTarget });
}, _this.handleInsert = function () {
_this.props.onClick(_this.props);
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(AssetButton, [{
key: 'render',
value: function render() {
var _this2 = this;
var localization = this.props.localization;
var palette = this.context.muiTheme.palette;
var styles = {
root: {
position: 'relative',
width: 80,
height: 80,
margin: '8px 30px 0px 8px',
textAlign: 'center',
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
border: '4px outset ' + palette.primary1Color,
cursor: 'pointer'
},
popover: {
padding: 8,
maxWidth: 500
},
box: {
display: 'flex',
alignItems: 'baseline',
justifyContent: 'space-between',
marginBottom: 4
},
label: {
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
fontSize: 10,
fontWeight: 600
},
headerLabel: {
fontSize: 18,
fontWeight: 600
},
description: {
marginTop: 8,
fontSize: '.7rem'
},
code: {
display: 'block',
padding: '0 .5rem',
backgroundColor: emphasize(palette.canvasColor, 0.07),
borderRadius: 2
},
pre: {
fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace'
},
button: {
position: 'absolute',
right: -34,
bottom: -4,
cursor: 'pointer'
},
icon: {
transform: 'rotateX(180deg) rotateZ(180deg)'
}
};
if (this.props.image) {
var file = this.props.findFile(this.props.image);
if (file) {
styles.root = _extends({}, styles.root, {
backgroundImage: 'url(' + file.blobURL + ')',
backgroundSize: 'contain',
backgroundPosition: '50% 50%',
backgroundRepeat: 'no-repeat'
});
}
}
return React.createElement(
Paper,
{ style: styles.root, onClick: this.handleOpen },
React.createElement(
'span',
{ style: styles.label },
this.props.label
),
React.createElement(
Popover,
{
open: this.state.open,
anchorEl: this.state.anchorEl,
style: styles.popover,
onRequestClose: function onRequestClose() {
return _this2.setState({ open: false });
}
},
React.createElement(
'div',
{ style: styles.box },
React.createElement(
'span',
{ style: styles.headerLabel },
this.props.label,
this.props.descriptionMoreURL ? React.createElement(
'a',
{ href: this.props.descriptionMoreURL, target: '_blank' },
React.createElement(ActionOpenInNew, null)
) : null
),
React.createElement(RaisedButton, {
primary: true,
label: localization.editorCard.insert,
icon: React.createElement(ContentAdd, null),
onClick: this.handleInsert
})
),
React.createElement(
'div',
{ style: styles.description },
this.props.description
),
React.createElement(
'code',
{ style: styles.code },
React.createElement(
'pre',
{ style: styles.pre },
this.props.code
)
)
),
React.createElement(
FloatingActionButton,
{
mini: true,
style: styles.button,
onClick: this.handleInsert
},
React.createElement(ContentReply, { style: styles.icon })
)
);
}
}]);
return AssetButton;
}(PureComponent);
AssetButton.propTypes = {
code: PropTypes.string.isRequired,
description: PropTypes.string.isRequired,
descriptionMoreURL: PropTypes.string,
label: PropTypes.string,
image: PropTypes.string,
onClick: PropTypes.func.isRequired,
findFile: PropTypes.func.isRequired,
localization: PropTypes.object.isRequired
};
AssetButton.defaultProps = {
description: ''
};
AssetButton.contextTypes = {
muiTheme: PropTypes.object.isRequired
};
export default AssetButton;