UNPKG

unveil

Version:

A React-based Reactive Presentation Framework

172 lines (125 loc) 13.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _rxjs = require('rxjs'); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Slide = require('./Slide'); var _Slide2 = _interopRequireDefault(_Slide); var _Presenter = require('./Presenter'); var _Presenter2 = _interopRequireDefault(_Presenter); var _KeyControls = require('./KeyControls'); var _KeyControls2 = _interopRequireDefault(_KeyControls); var _UIControls = require('./UIControls'); var _UIControls2 = _interopRequireDefault(_UIControls); var _getDirections = require('../getDirections'); var _getDirections2 = _interopRequireDefault(_getDirections); var _Router = require('./Router'); var _Router2 = _interopRequireDefault(_Router); var _Navigator = require('./Navigator'); var _Navigator2 = _interopRequireDefault(_Navigator); var _History = require('../helpers/History'); var _History2 = _interopRequireDefault(_History); require('../lib/Utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = _react2.default.createClass({ displayName: 'UnveilApp', /* * Recursively build a route map from all the slides. */ buildMap: function buildMap(nodes) { var _this = this; return nodes.map(function (slide, index) { if (_Slide2.default.isSlide(slide)) { var entry = { index: index, name: slide.props.name || false }; if (_this.areSlides(slide.props.children)) entry.children = _this.buildMap(slide.props.children.toList()); return entry; } }).compact(); }, componentWillMount: function componentWillMount() { var controls = this.props.controls || [_UIControls2.default, _KeyControls2.default]; var presenter = this.props.presenter || _Presenter2.default; this.modes = this.props.modes || { default: { controls: controls, presenter: presenter } }; this.history = this.props.history || _History2.default; this.slides = this.props.children.toList(); this.map = this.buildMap(this.slides); this.getDirections = this.props.getDirections || _getDirections2.default; this.routerState = { directions: [], query: {} }; this.router = (0, _Router2.default)({ map: this.map, history: this.history, getDirections: this.getDirections }); this.navigator = (this.props.navigator || _Navigator2.default)({ stateObservable: this.router.asObservable().pluck('directions') }); this.router.asObservable().subscribe(this.updateState); this.navigator.asObservable().subscribe(function (e) { this.router.go(e, this.routerState.query); }.bind(this)); this.router.start(); }, getMode: function getMode() { return this.modes[this.state.mode] || this.modes['default']; }, getInitialState: function getInitialState() { var _this2 = this; var getFirstChildIfSlides = function getFirstChildIfSlides(slide) { if (!_this2.areSlides(slide.props.children)) { return slide; } else { return getFirstChildIfSlides(slide.props.children[0]); } }; return { currentSlide: getFirstChildIfSlides(this.props.children[0]), mode: 'default' }; }, updateState: function updateState(s) { this.routerState = s; this.setState({ mode: s.query.mode || 'default' }); }, areSlides: function areSlides(children) { return children.toList().map(_Slide2.default.isSlide).reduce(function (a, b) { return a && b; }, true); }, controlsElements: function controlsElements() { var _this3 = this; var controls = this.getMode().controls.map(function (control) { var props = { key: control.displayName, navigator: _this3.navigator }; return _react2.default.createElement(control, props); }); return _react2.default.createElement('controls', null, controls); }, presenterElement: function presenterElement() { return _react2.default.createElement(this.getMode().presenter, { routerState: this.routerState, slides: this.slides, ref: 'current-slide' }); }, render: function render() { return _react2.default.createElement( 'div', null, this.controlsElements(), this.presenterElement() ); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1VudmVpbEFwcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBaUJlLGdCQUFNLFdBQU4sQ0FBa0I7Ozs7OztBQUsvQixZQUFVLGtCQUFVLEtBQVYsRUFBaUI7OztBQUN6QixXQUFPLE1BQU0sR0FBTixDQUFXLFVBQUMsS0FBRCxFQUFRLEtBQVIsRUFBa0I7QUFDbEMsVUFBRyxnQkFBTSxPQUFOLENBQWMsS0FBZCxDQUFILEVBQXlCO0FBQ3ZCLFlBQUksUUFBUTtBQUNWLHNCQURVO0FBRVYsZ0JBQU0sTUFBTSxLQUFOLENBQVksSUFBWixJQUFvQixLQUFwQjtTQUZKLENBRG1COztBQU12QixZQUFHLE1BQUssU0FBTCxDQUFlLE1BQU0sS0FBTixDQUFZLFFBQVosQ0FBbEIsRUFDRSxNQUFNLFFBQU4sR0FBaUIsTUFBSyxRQUFMLENBQWMsTUFBTSxLQUFOLENBQVksUUFBWixDQUFxQixNQUFyQixFQUFkLENBQWpCLENBREY7O0FBR0EsZUFBTyxLQUFQLENBVHVCO09BQXpCO0tBRGdCLENBQVgsQ0FZSixPQVpJLEVBQVAsQ0FEeUI7R0FBakI7O0FBZ0JWLHNCQUFvQiw4QkFBWTtBQUM5QixRQUFJLFdBQVksS0FBSyxLQUFMLENBQVcsUUFBWCxJQUF1Qiw2Q0FBdkIsQ0FEYztBQUU5QixRQUFJLFlBQVksS0FBSyxLQUFMLENBQVcsU0FBWCx1QkFBWixDQUYwQjs7QUFJOUIsU0FBSyxLQUFMLEdBQWdCLEtBQUssS0FBTCxDQUFXLEtBQVgsSUFBb0I7QUFDbEMsZUFBUztBQUNQLGtCQUFXLFFBQVg7QUFDQSxtQkFBVyxTQUFYO09BRkY7S0FEYyxDQUpjOztBQVc5QixTQUFLLE9BQUwsR0FBc0IsS0FBSyxLQUFMLENBQVcsT0FBWCxxQkFBdEIsQ0FYOEI7QUFZOUIsU0FBSyxNQUFMLEdBQXNCLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsTUFBcEIsRUFBdEIsQ0FaOEI7QUFhOUIsU0FBSyxHQUFMLEdBQXNCLEtBQUssUUFBTCxDQUFjLEtBQUssTUFBTCxDQUFwQyxDQWI4QjtBQWM5QixTQUFLLGFBQUwsR0FBc0IsS0FBSyxLQUFMLENBQVcsYUFBWCwyQkFBdEIsQ0FkOEI7O0FBZ0I5QixTQUFLLFdBQUwsR0FBbUIsRUFBRSxZQUFZLEVBQVosRUFBZ0IsT0FBTyxFQUFQLEVBQXJDLENBaEI4QjtBQWlCOUIsU0FBSyxNQUFMLEdBQWMsc0JBQWE7QUFDekIsV0FBSyxLQUFLLEdBQUw7QUFDTCxlQUFTLEtBQUssT0FBTDtBQUNULHFCQUFlLEtBQUssYUFBTDtLQUhILENBQWQsQ0FqQjhCOztBQXVCOUIsU0FBSyxTQUFMLEdBQWlCLENBQUMsS0FBSyxLQUFMLENBQVcsU0FBWCx3QkFBRCxDQUEwQztBQUN6RCx1QkFBaUIsS0FBSyxNQUFMLENBQVksWUFBWixHQUEyQixLQUEzQixDQUFpQyxZQUFqQyxDQUFqQjtLQURlLENBQWpCLENBdkI4Qjs7QUEyQjlCLFNBQUssTUFBTCxDQUFZLFlBQVosR0FDRyxTQURILENBQ2EsS0FBSyxXQUFMLENBRGIsQ0EzQjhCOztBQThCOUIsU0FBSyxTQUFMLENBQWUsWUFBZixHQUNHLFNBREgsQ0FDYSxVQUFTLENBQVQsRUFBWTtBQUNyQixXQUFLLE1BQUwsQ0FBWSxFQUFaLENBQWUsQ0FBZixFQUFrQixLQUFLLFdBQUwsQ0FBaUIsS0FBakIsQ0FBbEIsQ0FEcUI7S0FBWixDQUVULElBRlMsQ0FFSixJQUZJLENBRGIsRUE5QjhCOztBQW1DOUIsU0FBSyxNQUFMLENBQVksS0FBWixHQW5DOEI7R0FBWjs7QUFzQ3BCLFdBQVMsbUJBQVk7QUFDbkIsV0FBTyxLQUFLLEtBQUwsQ0FBVyxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQVgsSUFBK0IsS0FBSyxLQUFMLENBQVcsU0FBWCxDQUEvQixDQURZO0dBQVo7O0FBSVQsbUJBQWlCLDJCQUFXOzs7QUFDMUIsUUFBSSx3QkFBd0IsU0FBeEIscUJBQXdCLENBQUMsS0FBRCxFQUFXO0FBQ3JDLFVBQUksQ0FBQyxPQUFLLFNBQUwsQ0FBZSxNQUFNLEtBQU4sQ0FBWSxRQUFaLENBQWhCLEVBQXVDO0FBQ3pDLGVBQU8sS0FBUCxDQUR5QztPQUEzQyxNQUVPO0FBQ0wsZUFBTyxzQkFBc0IsTUFBTSxLQUFOLENBQVksUUFBWixDQUFxQixDQUFyQixDQUF0QixDQUFQLENBREs7T0FGUDtLQUQwQixDQURGOztBQVMxQixXQUFPO0FBQ0wsb0JBQWMsc0JBQXNCLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FBb0IsQ0FBcEIsQ0FBdEIsQ0FBZDtBQUNBLFlBQU0sU0FBTjtLQUZGLENBVDBCO0dBQVg7O0FBZWpCLGVBQWEscUJBQVUsQ0FBVixFQUFhO0FBQ3hCLFNBQUssV0FBTCxHQUFtQixDQUFuQixDQUR3QjtBQUV4QixTQUFLLFFBQUwsQ0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFGLENBQVEsSUFBUixJQUFnQixTQUFoQixFQUF0QixFQUZ3QjtHQUFiOztBQUtiLGFBQVcsbUJBQVUsUUFBVixFQUFvQjtBQUM3QixXQUFPLFNBQVMsTUFBVCxHQUNKLEdBREksQ0FDQSxnQkFBTSxPQUFOLENBREEsQ0FFSixNQUZJLENBRUksVUFBQyxDQUFELEVBQUcsQ0FBSDthQUFVLEtBQUcsQ0FBSDtLQUFWLEVBQWlCLElBRnJCLENBQVAsQ0FENkI7R0FBcEI7O0FBTVgsb0JBQWtCLDRCQUFZOzs7QUFDNUIsUUFBSSxXQUFXLEtBQUssT0FBTCxHQUFlLFFBQWYsQ0FBd0IsR0FBeEIsQ0FBNkIsVUFBQyxPQUFELEVBQWE7QUFDdkQsVUFBTSxRQUFRO0FBQ1osYUFBSyxRQUFRLFdBQVI7QUFDTCxtQkFBVyxPQUFLLFNBQUw7T0FGUCxDQURpRDtBQUt2RCxhQUFPLGdCQUFNLGFBQU4sQ0FBb0IsT0FBcEIsRUFBNkIsS0FBN0IsQ0FBUCxDQUx1RDtLQUFiLENBQXhDLENBRHdCOztBQVM1QixXQUFPLGdCQUFNLGFBQU4sQ0FBb0IsVUFBcEIsRUFBZ0MsSUFBaEMsRUFBc0MsUUFBdEMsQ0FBUCxDQVQ0QjtHQUFaOztBQVlsQixvQkFBa0IsNEJBQVc7QUFDM0IsV0FBTyxnQkFBTSxhQUFOLENBQ0wsS0FBSyxPQUFMLEdBQWUsU0FBZixFQUNBO0FBQ0UsbUJBQWEsS0FBSyxXQUFMO0FBQ2IsY0FBUSxLQUFLLE1BQUw7QUFDUixXQUFLLGVBQUw7S0FMRyxDQUFQLENBRDJCO0dBQVg7O0FBV2xCLFVBQVEsa0JBQVk7QUFDbEIsV0FDRTs7O01BQ0csS0FBSyxnQkFBTCxFQURIO01BRUcsS0FBSyxnQkFBTCxFQUZIO0tBREYsQ0FEa0I7R0FBWjs7Q0FoSEsiLCJmaWxlIjoiVW52ZWlsQXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgU2xpZGUgICAgIGZyb20gJy4vU2xpZGUnO1xuaW1wb3J0IFByZXNlbnRlciBmcm9tICcuL1ByZXNlbnRlcic7XG5cbmltcG9ydCBLZXlDb250cm9scyBmcm9tICcuL0tleUNvbnRyb2xzJztcbmltcG9ydCBVSUNvbnRyb2xzICBmcm9tICcuL1VJQ29udHJvbHMnO1xuXG5pbXBvcnQgZ2V0RGlyZWN0aW9ucyAgICAgICAgZnJvbSAnLi4vZ2V0RGlyZWN0aW9ucyc7XG5pbXBvcnQgY3JlYXRlUm91dGVyICAgICAgICAgZnJvbSAnLi9Sb3V0ZXInO1xuaW1wb3J0IGNyZWF0ZU5hdmlnYXRvciAgICAgIGZyb20gJy4vTmF2aWdhdG9yJztcbmltcG9ydCBoaXN0b3J5ICAgICAgICAgICAgICBmcm9tICcuLi9oZWxwZXJzL0hpc3RvcnknO1xuXG5pbXBvcnQgJy4uL2xpYi9VdGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBidWlsZCBhIHJvdXRlIG1hcCBmcm9tIGFsbCB0aGUgc2xpZGVzLlxuICAgKi9cbiAgYnVpbGRNYXA6IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIHJldHVybiBub2Rlcy5tYXAoIChzbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmKFNsaWRlLmlzU2xpZGUoc2xpZGUpKSB7XG4gICAgICAgIGxldCBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBuYW1lOiBzbGlkZS5wcm9wcy5uYW1lIHx8IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYodGhpcy5hcmVTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW4pKVxuICAgICAgICAgIGVudHJ5LmNoaWxkcmVuID0gdGhpcy5idWlsZE1hcChzbGlkZS5wcm9wcy5jaGlsZHJlbi50b0xpc3QoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH0pLmNvbXBhY3QoKTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgY29udHJvbHMgID0gdGhpcy5wcm9wcy5jb250cm9scyB8fCBbVUlDb250cm9scywgS2V5Q29udHJvbHNdO1xuICAgIGxldCBwcmVzZW50ZXIgPSB0aGlzLnByb3BzLnByZXNlbnRlciB8fCBQcmVzZW50ZXI7XG5cbiAgICB0aGlzLm1vZGVzICAgID0gdGhpcy5wcm9wcy5tb2RlcyB8fCB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnRyb2xzIDogY29udHJvbHMsXG4gICAgICAgIHByZXNlbnRlcjogcHJlc2VudGVyXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaGlzdG9yeSAgICAgICAgPSB0aGlzLnByb3BzLmhpc3RvcnkgfHwgaGlzdG9yeTtcbiAgICB0aGlzLnNsaWRlcyAgICAgICAgID0gdGhpcy5wcm9wcy5jaGlsZHJlbi50b0xpc3QoKTtcbiAgICB0aGlzLm1hcCAgICAgICAgICAgID0gdGhpcy5idWlsZE1hcCh0aGlzLnNsaWRlcyk7XG4gICAgdGhpcy5nZXREaXJlY3Rpb25zICA9IHRoaXMucHJvcHMuZ2V0RGlyZWN0aW9ucyB8fCBnZXREaXJlY3Rpb25zO1xuXG4gICAgdGhpcy5yb3V0ZXJTdGF0ZSA9IHsgZGlyZWN0aW9uczogW10sIHF1ZXJ5OiB7fSB9O1xuICAgIHRoaXMucm91dGVyID0gY3JlYXRlUm91dGVyKHtcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICBoaXN0b3J5OiB0aGlzLmhpc3RvcnksXG4gICAgICBnZXREaXJlY3Rpb25zOiB0aGlzLmdldERpcmVjdGlvbnNcbiAgICB9KTtcblxuICAgIHRoaXMubmF2aWdhdG9yID0gKHRoaXMucHJvcHMubmF2aWdhdG9yIHx8IGNyZWF0ZU5hdmlnYXRvcikoe1xuICAgICAgc3RhdGVPYnNlcnZhYmxlOiB0aGlzLnJvdXRlci5hc09ic2VydmFibGUoKS5wbHVjaygnZGlyZWN0aW9ucycpXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlci5hc09ic2VydmFibGUoKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnVwZGF0ZVN0YXRlKTtcblxuICAgIHRoaXMubmF2aWdhdG9yLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZ28oZSwgdGhpcy5yb3V0ZXJTdGF0ZS5xdWVyeSlcbiAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLnJvdXRlci5zdGFydCgpO1xuICB9LFxuXG4gIGdldE1vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2Rlc1t0aGlzLnN0YXRlLm1vZGVdIHx8IHRoaXMubW9kZXNbJ2RlZmF1bHQnXTtcbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBnZXRGaXJzdENoaWxkSWZTbGlkZXMgPSAoc2xpZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmVTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBzbGlkZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRGaXJzdENoaWxkSWZTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW5bMF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFNsaWRlOiBnZXRGaXJzdENoaWxkSWZTbGlkZXModGhpcy5wcm9wcy5jaGlsZHJlblswXSksXG4gICAgICBtb2RlOiAnZGVmYXVsdCdcbiAgICB9O1xuICB9LFxuXG4gIHVwZGF0ZVN0YXRlOiBmdW5jdGlvbiAocykge1xuICAgIHRoaXMucm91dGVyU3RhdGUgPSBzO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBtb2RlOiBzLnF1ZXJ5Lm1vZGUgfHwgJ2RlZmF1bHQnIH0pO1xuICB9LFxuXG4gIGFyZVNsaWRlczogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnRvTGlzdCgpXG4gICAgICAubWFwKFNsaWRlLmlzU2xpZGUpXG4gICAgICAucmVkdWNlKCAoYSxiKSA9PiAoYSYmYiksIHRydWUgKTtcbiAgfSxcblxuICBjb250cm9sc0VsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGNvbnRyb2xzID0gdGhpcy5nZXRNb2RlKCkuY29udHJvbHMubWFwKCAoY29udHJvbCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIGtleTogY29udHJvbC5kaXNwbGF5TmFtZSxcbiAgICAgICAgbmF2aWdhdG9yOiB0aGlzLm5hdmlnYXRvclxuICAgICAgfTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRyb2wsIHByb3BzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdjb250cm9scycsIG51bGwsIGNvbnRyb2xzKTtcbiAgfSxcblxuICBwcmVzZW50ZXJFbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuZ2V0TW9kZSgpLnByZXNlbnRlcixcbiAgICAgIHtcbiAgICAgICAgcm91dGVyU3RhdGU6IHRoaXMucm91dGVyU3RhdGUsXG4gICAgICAgIHNsaWRlczogdGhpcy5zbGlkZXMsXG4gICAgICAgIHJlZjogJ2N1cnJlbnQtc2xpZGUnXG4gICAgICB9XG4gICAgKTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMuY29udHJvbHNFbGVtZW50cygpfVxuICAgICAgICB7dGhpcy5wcmVzZW50ZXJFbGVtZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbn0pO1xuIl19