unveil
Version:
A React-based Reactive Presentation Framework
104 lines (78 loc) • 8.08 kB
JavaScript
'use strict';
var _isNan = require('babel-runtime/core-js/number/is-nan');
var _isNan2 = _interopRequireDefault(_isNan);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
Object.defineProperty(exports, "__esModule", {
value: true
});
var _rxjs = require('rxjs');
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _marked = require('marked');
var _marked2 = _interopRequireDefault(_marked);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _react2.default.createClass({
displayName: 'Slide',
scale: 1,
propTypes: {
name: _react2.default.PropTypes.string
},
statics: {
isSlide: function isSlide(e) {
return _react2.default.isValidElement(e) && e.type.displayName === 'Slide';
}
},
defaults: function defaults(overrides) {
return (0, _assign2.default)({
className: 'slide-content'
}, overrides);
},
fromMarkdown: function fromMarkdown() {
return (0, _marked2.default)(this.props.children).trim();
},
shouldUseMarkdown: function shouldUseMarkdown() {
return this.props.markdown && !Array.isArray(this.props.children);
},
componentDidUpdate: function componentDidUpdate() {
var scale = this.getScale();
if ((0, _isNan2.default)(scale) || (0, _isNan2.default)(this.scale)) return;
if (this.scale !== scale) {
this.scale = scale;
this.forceUpdate();
}
},
getScale: function getScale() {
var verticalScale = this.refs['slide-container'].offsetHeight / this.refs.slide.offsetHeight;
var horizontalScale = this.refs['slide-container'].offsetWidth / this.refs.slide.offsetWidth;
var scale = Math.min(verticalScale, horizontalScale);
return scale > 1 && 1 || scale;
},
componentDidMount: function componentDidMount() {
['load', 'resize'].forEach(function (event) {
_rxjs.Observable.fromEvent(window, event).subscribe(function () {
this.scale = this.getScale();
this.forceUpdate();
}.bind(this));
}.bind(this));
},
options: function options() {
var opts = {
ref: 'slide',
id: this.props.name || "",
style: {
transform: 'translate(-50%, -50%) scale(' + this.scale + ')'
}
};
if (this.shouldUseMarkdown()) opts.dangerouslySetInnerHTML = { __html: this.fromMarkdown() };else opts.children = this.props.children;
return this.defaults(opts);
},
render: function render() {
return _react2.default.createElement(
'section',
{ ref: 'slide-container', className: 'slide' },
_react2.default.createElement('section', this.options())
);
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1NsaWRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQU1lLGdCQUFNLFdBQU4sQ0FBa0I7OztBQUUvQixTQUFPLENBQVA7O0FBRUEsYUFBVztBQUNULFVBQU0sZ0JBQU0sU0FBTixDQUFnQixNQUFoQjtHQURSOztBQUlBLFdBQVM7QUFDUCxhQUFTLGlCQUFVLENBQVYsRUFBYTtBQUNwQixhQUFPLGdCQUFNLGNBQU4sQ0FBcUIsQ0FBckIsS0FBMkIsRUFBRSxJQUFGLENBQU8sV0FBUCxLQUF1QixPQUF2QixDQURkO0tBQWI7R0FEWDs7QUFNQSxZQUFVLGtCQUFDLFNBQUQ7V0FBZ0Isc0JBQWM7QUFDdEMsaUJBQVcsZUFBWDtLQUR3QixFQUV2QixTQUZ1QjtHQUFoQjs7QUFJVixnQkFBYyx3QkFBWTtBQUN4QixXQUFPLHNCQUFPLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBUCxDQUE0QixJQUE1QixFQUFQLENBRHdCO0dBQVo7O0FBSWQscUJBQW1CLDZCQUFZO0FBQzdCLFdBQU8sS0FBSyxLQUFMLENBQVcsUUFBWCxJQUF1QixDQUFDLE1BQU0sT0FBTixDQUFjLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBZixDQUREO0dBQVo7O0FBSW5CLHNCQUFvQiw4QkFBWTtBQUM5QixRQUFJLFFBQVEsS0FBSyxRQUFMLEVBQVIsQ0FEMEI7O0FBRzlCLFFBQUcscUJBQWEsS0FBYixLQUF1QixxQkFBYSxLQUFLLEtBQUwsQ0FBcEMsRUFDRCxPQURGOztBQUdBLFFBQUcsS0FBSyxLQUFMLEtBQWUsS0FBZixFQUFzQjtBQUN2QixXQUFLLEtBQUwsR0FBYSxLQUFiLENBRHVCO0FBRXZCLFdBQUssV0FBTCxHQUZ1QjtLQUF6QjtHQU5rQjs7QUFZcEIsWUFBVSxvQkFBWTtBQUNwQixRQUFJLGdCQUFrQixLQUFLLElBQUwsQ0FBVSxpQkFBVixFQUE2QixZQUE3QixHQUE0QyxLQUFLLElBQUwsQ0FBVSxLQUFWLENBQWdCLFlBQWhCLENBRDlDO0FBRXBCLFFBQUksa0JBQWtCLEtBQUssSUFBTCxDQUFVLGlCQUFWLEVBQTZCLFdBQTdCLEdBQTRDLEtBQUssSUFBTCxDQUFVLEtBQVYsQ0FBZ0IsV0FBaEIsQ0FGOUM7QUFHcEIsUUFBSSxRQUFRLEtBQUssR0FBTCxDQUFTLGFBQVQsRUFBd0IsZUFBeEIsQ0FBUixDQUhnQjtBQUlwQixXQUFPLFFBQVEsQ0FBUixJQUFhLENBQWIsSUFBa0IsS0FBbEIsQ0FKYTtHQUFaOztBQU9WLHFCQUFtQiw2QkFBWTtBQUM3QixLQUFDLE1BQUQsRUFBUyxRQUFULEVBQW1CLE9BQW5CLENBQTRCLFVBQVUsS0FBVixFQUFpQjtBQUMzQyx1QkFBVyxTQUFYLENBQXFCLE1BQXJCLEVBQTZCLEtBQTdCLEVBQ0MsU0FERCxDQUNZLFlBQVk7QUFDdEIsYUFBSyxLQUFMLEdBQWEsS0FBSyxRQUFMLEVBQWIsQ0FEc0I7QUFFdEIsYUFBSyxXQUFMLEdBRnNCO09BQVosQ0FHVixJQUhVLENBR0wsSUFISyxDQURaLEVBRDJDO0tBQWpCLENBTTFCLElBTjBCLENBTXJCLElBTnFCLENBQTVCLEVBRDZCO0dBQVo7O0FBVW5CLFdBQVMsbUJBQVk7QUFDbkIsUUFBSSxPQUFPO0FBQ1QsV0FBSyxPQUFMO0FBQ0EsVUFBSSxLQUFLLEtBQUwsQ0FBVyxJQUFYLElBQW1CLEVBQW5CO0FBQ0osYUFBTztBQUNMLG9EQUEwQyxLQUFLLEtBQUwsTUFBMUM7T0FERjtLQUhFLENBRGU7QUFRbkIsUUFBRyxLQUFLLGlCQUFMLEVBQUgsRUFDRSxLQUFLLHVCQUFMLEdBQStCLEVBQUMsUUFBUSxLQUFLLFlBQUwsRUFBUixFQUFoQyxDQURGLEtBR0UsS0FBSyxRQUFMLEdBQWdCLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FIbEI7QUFJQSxXQUFPLEtBQUssUUFBTCxDQUFjLElBQWQsQ0FBUCxDQVptQjtHQUFaOztBQWVULFVBQVEsa0JBQVk7QUFDbEIsV0FBUTs7UUFBUyxLQUFJLGlCQUFKLEVBQXNCLFdBQVUsT0FBVixFQUEvQjtNQUNOLHlDQUFhLEtBQUssT0FBTCxFQUFiLENBRE07S0FBUixDQURrQjtHQUFaOztDQXRFSyIsImZpbGUiOiJTbGlkZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IG1hcmtlZCBmcm9tICdtYXJrZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgc2NhbGU6IDEsXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgbmFtZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZ1xuICB9LFxuXG4gIHN0YXRpY3M6IHtcbiAgICBpc1NsaWRlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIFJlYWN0LmlzVmFsaWRFbGVtZW50KGUpICYmIGUudHlwZS5kaXNwbGF5TmFtZSA9PT0gJ1NsaWRlJztcbiAgICB9XG4gIH0sXG5cbiAgZGVmYXVsdHM6IChvdmVycmlkZXMpID0+IChPYmplY3QuYXNzaWduKHtcbiAgICBjbGFzc05hbWU6ICdzbGlkZS1jb250ZW50J1xuICB9LCBvdmVycmlkZXMpKSxcblxuICBmcm9tTWFya2Rvd246IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWFya2VkKHRoaXMucHJvcHMuY2hpbGRyZW4pLnRyaW0oKTtcbiAgfSxcblxuICBzaG91bGRVc2VNYXJrZG93bjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1hcmtkb3duICYmICFBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIGxldCBzY2FsZSA9IHRoaXMuZ2V0U2NhbGUoKTtcblxuICAgIGlmKE51bWJlci5pc05hTihzY2FsZSkgfHwgTnVtYmVyLmlzTmFOKHRoaXMuc2NhbGUpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgaWYodGhpcy5zY2FsZSAhPT0gc2NhbGUpIHtcbiAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9XG4gIH0sXG5cbiAgZ2V0U2NhbGU6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgdmVydGljYWxTY2FsZSAgID0gdGhpcy5yZWZzWydzbGlkZS1jb250YWluZXInXS5vZmZzZXRIZWlnaHQgLyB0aGlzLnJlZnMuc2xpZGUub2Zmc2V0SGVpZ2h0O1xuICAgIGxldCBob3Jpem9udGFsU2NhbGUgPSB0aGlzLnJlZnNbJ3NsaWRlLWNvbnRhaW5lciddLm9mZnNldFdpZHRoICAvIHRoaXMucmVmcy5zbGlkZS5vZmZzZXRXaWR0aDtcbiAgICBsZXQgc2NhbGUgPSBNYXRoLm1pbih2ZXJ0aWNhbFNjYWxlLCBob3Jpem9udGFsU2NhbGUpO1xuICAgIHJldHVybiBzY2FsZSA+IDEgJiYgMSB8fCBzY2FsZTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkge1xuICAgIFsnbG9hZCcsICdyZXNpemUnXS5mb3JFYWNoKCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIE9ic2VydmFibGUuZnJvbUV2ZW50KHdpbmRvdywgZXZlbnQpXG4gICAgICAuc3Vic2NyaWJlKCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSB0aGlzLmdldFNjYWxlKCk7XG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfSxcblxuICBvcHRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG9wdHMgPSB7XG4gICAgICByZWY6ICdzbGlkZScsXG4gICAgICBpZDogdGhpcy5wcm9wcy5uYW1lIHx8IFwiXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoJHt0aGlzLnNjYWxlfSlgXG4gICAgICB9XG4gICAgfTtcbiAgICBpZih0aGlzLnNob3VsZFVzZU1hcmtkb3duKCkpXG4gICAgICBvcHRzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge19faHRtbDogdGhpcy5mcm9tTWFya2Rvd24oKX07XG4gICAgZWxzZVxuICAgICAgb3B0cy5jaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdHMob3B0cyk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICg8c2VjdGlvbiByZWY9XCJzbGlkZS1jb250YWluZXJcIiBjbGFzc05hbWU9XCJzbGlkZVwiPlxuICAgICAgPHNlY3Rpb24gey4uLnRoaXMub3B0aW9ucygpfSAvPlxuICAgIDwvc2VjdGlvbj4pO1xuICB9XG5cbn0pO1xuIl19