unveil
Version:
A React-based Reactive Presentation Framework
172 lines (125 loc) • 13.2 kB
JavaScript
'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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1VudmVpbEFwcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBaUJlLGdCQUFNLFdBQU4sQ0FBa0I7Ozs7OztBQUsvQixZQUFVLGtCQUFVLEtBQVYsRUFBaUI7OztBQUN6QixXQUFPLE1BQU0sR0FBTixDQUFXLFVBQUMsS0FBRCxFQUFRLEtBQVIsRUFBa0I7QUFDbEMsVUFBRyxnQkFBTSxPQUFOLENBQWMsS0FBZCxDQUFILEVBQXlCO0FBQ3ZCLFlBQUksUUFBUTtBQUNWLHNCQURVO0FBRVYsZ0JBQU0sTUFBTSxLQUFOLENBQVksSUFBWixJQUFvQixLQUFwQjtTQUZKLENBRG1COztBQU12QixZQUFHLE1BQUssU0FBTCxDQUFlLE1BQU0sS0FBTixDQUFZLFFBQVosQ0FBbEIsRUFDRSxNQUFNLFFBQU4sR0FBaUIsTUFBSyxRQUFMLENBQWMsTUFBTSxLQUFOLENBQVksUUFBWixDQUFxQixNQUFyQixFQUFkLENBQWpCLENBREY7O0FBR0EsZUFBTyxLQUFQLENBVHVCO09BQXpCO0tBRGdCLENBQVgsQ0FZSixPQVpJLEVBQVAsQ0FEeUI7R0FBakI7O0FBZ0JWLHNCQUFvQiw4QkFBWTtBQUM5QixRQUFJLFdBQVksS0FBSyxLQUFMLENBQVcsUUFBWCxJQUF1Qiw2Q0FBdkIsQ0FEYztBQUU5QixRQUFJLFlBQVksS0FBSyxLQUFMLENBQVcsU0FBWCx1QkFBWixDQUYwQjs7QUFJOUIsU0FBSyxLQUFMLEdBQWdCLEtBQUssS0FBTCxDQUFXLEtBQVgsSUFBb0I7QUFDbEMsZUFBUztBQUNQLGtCQUFXLFFBQVg7QUFDQSxtQkFBVyxTQUFYO09BRkY7S0FEYyxDQUpjOztBQVc5QixTQUFLLE9BQUwsR0FBc0IsS0FBSyxLQUFMLENBQVcsT0FBWCxxQkFBdEIsQ0FYOEI7QUFZOUIsU0FBSyxNQUFMLEdBQXNCLEtBQUssS0FBTCxDQUFXLFFBQVgsQ0FB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OztBQVlsQixvQkFBa0IsNEJBQVc7QUFDM0IsV0FBTyxnQkFBTSxhQUFOLENBQ0wsS0FBSyxPQUFMLEdBQWUsU0FBZixFQUNBO0FBQ0UsbUJBQWEsS0FBSyxXQUFMO0FBQ2IsY0FBUSxLQUFLLE1BQUw7QUFDUixXQUFLLGVBQUw7S0FMRyxDQUFQLENBRDJCO0dBQVg7O0FBV2xCLFVBQVEsa0JBQVk7QUFDbEIsV0FDRTs7O01BQ0csS0FBSyxnQkFBTCxFQURIO01BRUcsS0FBSyxnQkFBTCxFQUZIO0tBREYsQ0FEa0I7R0FBWjs7Q0FoSEsiLCJmaWxlIjoiVW52ZWlsQXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgU2xpZGUgICAgIGZyb20gJy4vU2xpZGUnO1xuaW1wb3J0IFByZXNlbnRlciBmcm9tICcuL1ByZXNlbnRlcic7XG5cbmltcG9ydCBLZXlDb250cm9scyBmcm9tICcuL0tleUNvbnRyb2xzJztcbmltcG9ydCBVSUNvbnRyb2xzICBmcm9tICcuL1VJQ29udHJvbHMnO1xuXG5pbXBvcnQgZ2V0RGlyZWN0aW9ucyAgICAgICAgZnJvbSAnLi4vZ2V0RGlyZWN0aW9ucyc7XG5pbXBvcnQgY3JlYXRlUm91dGVyICAgICAgICAgZnJvbSAnLi9Sb3V0ZXInO1xuaW1wb3J0IGNyZWF0ZU5hdmlnYXRvciAgICAgIGZyb20gJy4vTmF2aWdhdG9yJztcbmltcG9ydCBoaXN0b3J5ICAgICAgICAgICAgICBmcm9tICcuLi9oZWxwZXJzL0hpc3RvcnknO1xuXG5pbXBvcnQgJy4uL2xpYi9VdGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBidWlsZCBhIHJvdXRlIG1hcCBmcm9tIGFsbCB0aGUgc2xpZGVzLlxuICAgKi9cbiAgYnVpbGRNYXA6IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIHJldHVybiBub2Rlcy5tYXAoIChzbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmKFNsaWRlLmlzU2xpZGUoc2xpZGUpKSB7XG4gICAgICAgIGxldCBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBuYW1lOiBzbGlkZS5wcm9wcy5uYW1lIHx8IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYodGhpcy5hcmVTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW4pKVxuICAgICAgICAgIGVudHJ5LmNoaWxkcmVuID0gdGhpcy5idWlsZE1hcChzbGlkZS5wcm9wcy5jaGlsZHJlbi50b0xpc3QoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH0pLmNvbXBhY3QoKTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgY29udHJvbHMgID0gdGhpcy5wcm9wcy5jb250cm9scyB8fCBbVUlDb250cm9scywgS2V5Q29udHJvbHNdO1xuICAgIGxldCBwcmVzZW50ZXIgPSB0aGlzLnByb3BzLnByZXNlbnRlciB8fCBQcmVzZW50ZXI7XG5cbiAgICB0aGlzLm1vZGVzICAgID0gdGhpcy5wcm9wcy5tb2RlcyB8fCB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnRyb2xzIDogY29udHJvbHMsXG4gICAgICAgIHByZXNlbnRlcjogcHJlc2VudGVyXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaGlzdG9yeSAgICAgICAgPSB0aGlzLnByb3BzLmhpc3RvcnkgfHwgaGlzdG9yeTtcbiAgICB0aGlzLnNsaWRlcyAgICAgICAgID0gdGhpcy5wcm9wcy5jaGlsZHJlbi50b0xpc3QoKTtcbiAgICB0aGlzLm1hcCAgICAgICAgICAgID0gdGhpcy5idWlsZE1hcCh0aGlzLnNsaWRlcyk7XG4gICAgdGhpcy5nZXREaXJlY3Rpb25zICA9IHRoaXMucHJvcHMuZ2V0RGlyZWN0aW9ucyB8fCBnZXREaXJlY3Rpb25zO1xuXG4gICAgdGhpcy5yb3V0ZXJTdGF0ZSA9IHsgZGlyZWN0aW9uczogW10sIHF1ZXJ5OiB7fSB9O1xuICAgIHRoaXMucm91dGVyID0gY3JlYXRlUm91dGVyKHtcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICBoaXN0b3J5OiB0aGlzLmhpc3RvcnksXG4gICAgICBnZXREaXJlY3Rpb25zOiB0aGlzLmdldERpcmVjdGlvbnNcbiAgICB9KTtcblxuICAgIHRoaXMubmF2aWdhdG9yID0gKHRoaXMucHJvcHMubmF2aWdhdG9yIHx8IGNyZWF0ZU5hdmlnYXRvcikoe1xuICAgICAgc3RhdGVPYnNlcnZhYmxlOiB0aGlzLnJvdXRlci5hc09ic2VydmFibGUoKS5wbHVjaygnZGlyZWN0aW9ucycpXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlci5hc09ic2VydmFibGUoKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnVwZGF0ZVN0YXRlKTtcblxuICAgIHRoaXMubmF2aWdhdG9yLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZ28oZSwgdGhpcy5yb3V0ZXJTdGF0ZS5xdWVyeSlcbiAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLnJvdXRlci5zdGFydCgpO1xuICB9LFxuXG4gIGdldE1vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2Rlc1t0aGlzLnN0YXRlLm1vZGVdIHx8IHRoaXMubW9kZXNbJ2RlZmF1bHQnXTtcbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBnZXRGaXJzdENoaWxkSWZTbGlkZXMgPSAoc2xpZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmVTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBzbGlkZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRGaXJzdENoaWxkSWZTbGlkZXMoc2xpZGUucHJvcHMuY2hpbGRyZW5bMF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFNsaWRlOiBnZXRGaXJzdENoaWxkSWZTbGlkZXModGhpcy5wcm9wcy5jaGlsZHJlblswXSksXG4gICAgICBtb2RlOiAnZGVmYXVsdCdcbiAgICB9O1xuICB9LFxuXG4gIHVwZGF0ZVN0YXRlOiBmdW5jdGlvbiAocykge1xuICAgIHRoaXMucm91dGVyU3RhdGUgPSBzO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBtb2RlOiBzLnF1ZXJ5Lm1vZGUgfHwgJ2RlZmF1bHQnIH0pO1xuICB9LFxuXG4gIGFyZVNsaWRlczogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnRvTGlzdCgpXG4gICAgICAubWFwKFNsaWRlLmlzU2xpZGUpXG4gICAgICAucmVkdWNlKCAoYSxiKSA9PiAoYSYmYiksIHRydWUgKTtcbiAgfSxcblxuICBjb250cm9sc0VsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGNvbnRyb2xzID0gdGhpcy5nZXRNb2RlKCkuY29udHJvbHMubWFwKCAoY29udHJvbCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIGtleTogY29udHJvbC5kaXNwbGF5TmFtZSxcbiAgICAgICAgbmF2aWdhdG9yOiB0aGlzLm5hdmlnYXRvclxuICAgICAgfTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRyb2wsIHByb3BzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdjb250cm9scycsIG51bGwsIGNvbnRyb2xzKTtcbiAgfSxcblxuICBwcmVzZW50ZXJFbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuZ2V0TW9kZSgpLnByZXNlbnRlcixcbiAgICAgIHtcbiAgICAgICAgcm91dGVyU3RhdGU6IHRoaXMucm91dGVyU3RhdGUsXG4gICAgICAgIHNsaWRlczogdGhpcy5zbGlkZXMsXG4gICAgICAgIHJlZjogJ2N1cnJlbnQtc2xpZGUnXG4gICAgICB9XG4gICAgKTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMuY29udHJvbHNFbGVtZW50cygpfVxuICAgICAgICB7dGhpcy5wcmVzZW50ZXJFbGVtZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbn0pO1xuIl19