@jlongster/spectacle
Version:
ReactJS Powered Presentation Framework
256 lines (199 loc) • 7.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getOwnPropertyDescriptor = require("babel-runtime/core-js/object/get-own-property-descriptor");
var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor);
var _jsx2 = require("babel-runtime/helpers/jsx");
var _jsx3 = _interopRequireDefault(_jsx2);
var _extends2 = require("babel-runtime/helpers/extends");
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _desc, _value, _class2;
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _isUndefined = require("lodash/isUndefined");
var _isUndefined2 = _interopRequireDefault(_isUndefined);
var _base = require("../utils/base");
var _radium = require("radium");
var _radium2 = _interopRequireDefault(_radium);
var _actions = require("../actions");
var _transitionable = require("./transitionable");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
var Slide = (0, _transitionable.Transitionable)(_class = (0, _radium2.default)(_class = (_class2 = function (_Component) {
(0, _inherits3.default)(Slide, _Component);
function Slide() {
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, Slide);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {
contentScale: 1,
transitioning: true,
z: 1,
zoom: 1
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
Slide.prototype.componentDidMount = function componentDidMount() {
var _this2 = this;
this.setZoom();
var slide = this.slideRef;
var frags = slide.querySelectorAll(".fragment");
if (frags && frags.length && !this.context.overview) {
Array.prototype.slice.call(frags, 0).forEach(function (frag, i) {
frag.dataset.fid = i;
return _this2.props.dispatch && _this2.props.dispatch((0, _actions.addFragment)({
slide: _this2.props.hash,
id: i,
visible: _this2.props.lastSlide > _this2.props.slideIndex
}));
});
}
window.addEventListener("load", this.setZoom);
window.addEventListener("resize", this.setZoom);
};
Slide.prototype.componentWillUnmount = function componentWillUnmount() {
window.removeEventListener("resize", this.setZoom);
};
Slide.prototype.setZoom = function setZoom() {
var mobile = window.matchMedia("(max-width: 628px)").matches;
var content = this.contentRef;
if (content) {
var zoom = this.props.viewerScaleMode ? 1 : content.offsetWidth / 1000;
var contentScaleY = content.parentNode.offsetHeight / 700;
var contentScaleX = this.props.viewerScaleMode ? content.parentNode.offsetWidth / 1000 : content.parentNode.offsetWidth / 700;
var minScale = Math.min(contentScaleY, contentScaleX);
var contentScale = minScale < 1 ? minScale : 1;
if (mobile && this.props.viewerScaleMode !== true) {
contentScale = 1;
}
this.setState({
zoom: zoom > 0.6 ? zoom : 0.6,
contentScale: contentScale
});
}
};
Slide.prototype.allStyles = function allStyles() {
var _props = this.props,
align = _props.align,
print = _props.print;
var styles = {
outer: (0, _extends3.default)({
position: this.props.export ? "relative" : "absolute",
top: 0,
left: 0,
width: "100%",
height: "100%",
display: "flex",
overflow: "hidden",
backgroundColor: this.context.styles.global.body.background ? this.context.styles.global.body.background : ""
}, this.props.style),
inner: {
display: "flex",
position: "relative",
flex: 1,
alignItems: align ? align.split(" ")[1] : "center",
justifyContent: align ? align.split(" ")[0] : "center"
},
content: {
flex: 1,
maxHeight: this.props.maxHeight || 700,
maxWidth: this.props.maxWidth || 1000,
transform: "scale(" + this.state.contentScale + ")",
padding: this.state.zoom > 0.6 ? this.props.margin || 40 : 10
}
};
var overViewStyles = {
inner: {
flexDirection: "column"
},
content: {
width: "100%"
}
};
var printStyles = print ? {
backgroundColor: "white",
backgroundImage: "none"
} : {};
return { styles: styles, overViewStyles: overViewStyles, printStyles: printStyles };
};
Slide.prototype.render = function render() {
var _this3 = this;
var _props2 = this.props,
presenterStyle = _props2.presenterStyle,
children = _props2.children;
var _allStyles = this.allStyles(),
styles = _allStyles.styles,
overViewStyles = _allStyles.overViewStyles,
printStyles = _allStyles.printStyles;
if (!this.props.viewerScaleMode) {
document.documentElement.style.fontSize = 16 * this.state.zoom + "px";
}
var contentClass = (0, _isUndefined2.default)(this.props.className) ? "" : this.props.className;
return _react2.default.createElement(
"div",
{ className: "spectacle-slide",
ref: function ref(s) {
_this3.slideRef = s;
},
style: [styles.outer, _base.getStyles.call(this), printStyles, presenterStyle]
},
(0, _jsx3.default)("div", {
style: [styles.inner, this.context.overview && overViewStyles.inner]
}, void 0, _react2.default.createElement(
"div",
{ ref: function ref(c) {
_this3.contentRef = c;
},
className: contentClass + " spectacle-content",
style: [styles.content, this.context.styles.components.content, this.context.overview && overViewStyles.content]
},
children
))
);
};
return Slide;
}(_react.Component), (_applyDecoratedDescriptor(_class2.prototype, "render", [_transitionable.renderTransition], (0, _getOwnPropertyDescriptor2.default)(_class2.prototype, "render"), _class2.prototype)), _class2)) || _class) || _class;
Slide.defaultProps = {
align: "center center",
presenterStyle: {},
style: {},
viewerScaleMode: false
};
Slide.contextTypes = {
styles: _react.PropTypes.object,
export: _react.PropTypes.bool,
print: _react.PropTypes.object,
overview: _react.PropTypes.bool,
store: _react.PropTypes.object
};
exports.default = Slide;