UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

183 lines (149 loc) 17.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } var DraggableIframe = function (_Component) { _inherits(DraggableIframe, _Component); function DraggableIframe(props) { _classCallCheck(this, DraggableIframe); var _this = _possibleConstructorReturn(this, _Component.call(this, props)); _this.dragInit = function (e) { e.preventDefault(); document.onmousemove = _this.moveElem; document.onmouseup = _this.destroy; _this.setState({ xPos: e.pageX, yPos: e.pageY, selected: _this.refs.helpFrame, xElem: e.pageX - _this.refs.helpFrame.offsetLeft, yElem: e.pageY - _this.refs.helpFrame.offsetTop }); }; _this.moveElem = function (e) { var _this$state = _this.state, xPos = _this$state.xPos, yPos = _this$state.yPos, xElem = _this$state.xElem, yElem = _this$state.yElem, selected = _this$state.selected; _this.setState({ xPos: e.pageX, yPos: e.pageY }); if (selected !== null) { selected.style.left = xPos - xElem + 'px'; selected.style.top = yPos - yElem + 'px'; } }; _this.destroy = function (e) { e.preventDefault(); document.onmousemove = null; document.onmouseup = null; _this.setState({ selected: null }); }; _this.toggle = function () { for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { params[_key] = arguments[_key]; } var _this$state2 = _this.state, oldPos = _this$state2.yPos, isShown = _this$state2.isShown, yElem = _this$state2.yElem; var _window = window, pageYOffset = _window.pageYOffset, outerHeight = _window.outerHeight; var yPos = isShown ? oldPos : pageYOffset > oldPos ? pageYOffset + 50 : pageYOffset + outerHeight < oldPos ? pageYOffset + outerHeight - _this.props.height - 100 : oldPos; _this.setState({ isShown: !_this.state.isShown, params: params, yPos: yPos }); _this.refs.helpFrame.style.top = yPos - yElem + 'px'; }; if (props.toggleFunctionName) { window[props.toggleFunctionName] = _this.toggle; } _this.state = { isShown: false, params: [], xPos: 0, yPos: 0, xElem: 0, yElem: 0, selected: null }; return _this; } DraggableIframe.prototype.render = function render() { var _props = this.props, title = _props.title, iframeUrl = _props.iframeUrl, width = _props.width, height = _props.height, queryUrl = _props.queryUrl; var _state = this.state, selected = _state.selected, isShown = _state.isShown, params = _state.params; var url = iframeUrl + params.map(function (param, i) { return typeof queryUrl[i] === 'string' ? queryUrl[i] + param : ''; }).join(''); return _react2.default.createElement( 'div', { className: 'help-frame ' + (selected ? 'is-dragging' : ''), onMouseDown: this.dragInit, ref: 'helpFrame', style: { width: width, display: isShown ? 'block' : 'none' } }, _react2.default.createElement( 'span', { className: 'help-center-title' }, _i18next2.default.t(title) ), _react2.default.createElement( 'div', { className: 'mdl-button mdl-js-button mdl-button--icon mdl-js-ripple-effect close-icon', onClick: this.toggle }, _react2.default.createElement( 'i', { className: 'material-icons' }, 'close' ) ), _react2.default.createElement('br', null), _react2.default.createElement(IFrame, { height: height, src: url, width: width }) ); }; return DraggableIframe; }(_react.Component); DraggableIframe.displayName = 'DraggableIframe'; DraggableIframe.propTypes = { iframeUrl: _react.PropTypes.string.isRequired, width: _react.PropTypes.number.isRequired, height: _react.PropTypes.number.isRequired, title: _react.PropTypes.string.isRequired, toggleFunctionName: _react.PropTypes.string.isRequired, queryUrl: _react.PropTypes.array }; exports.default = DraggableIframe; var IFrame = function (_Component2) { _inherits(IFrame, _Component2); function IFrame() { _classCallCheck(this, IFrame); return _possibleConstructorReturn(this, _Component2.apply(this, arguments)); } IFrame.prototype.shouldComponentUpdate = function shouldComponentUpdate(_ref) { var src = _ref.src; return src !== this.props.src; }; IFrame.prototype.render = function render() { var _props2 = this.props, height = _props2.height, src = _props2.src, width = _props2.width; return _react2.default.createElement('iframe', { frameBorder: 0, height: height, src: src, width: width }); }; return IFrame; }(_react.Component); module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIkRyYWdnYWJsZUlmcmFtZSIsInByb3BzIiwiZHJhZ0luaXQiLCJlIiwicHJldmVudERlZmF1bHQiLCJkb2N1bWVudCIsIm9ubW91c2Vtb3ZlIiwibW92ZUVsZW0iLCJvbm1vdXNldXAiLCJkZXN0cm95Iiwic2V0U3RhdGUiLCJ4UG9zIiwicGFnZVgiLCJ5UG9zIiwicGFnZVkiLCJzZWxlY3RlZCIsInJlZnMiLCJoZWxwRnJhbWUiLCJ4RWxlbSIsIm9mZnNldExlZnQiLCJ5RWxlbSIsIm9mZnNldFRvcCIsInN0YXRlIiwic3R5bGUiLCJsZWZ0IiwidG9wIiwidG9nZ2xlIiwicGFyYW1zIiwib2xkUG9zIiwiaXNTaG93biIsIndpbmRvdyIsInBhZ2VZT2Zmc2V0Iiwib3V0ZXJIZWlnaHQiLCJoZWlnaHQiLCJ0b2dnbGVGdW5jdGlvbk5hbWUiLCJyZW5kZXIiLCJ0aXRsZSIsImlmcmFtZVVybCIsIndpZHRoIiwicXVlcnlVcmwiLCJ1cmwiLCJtYXAiLCJwYXJhbSIsImkiLCJqb2luIiwiZGlzcGxheSIsInQiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJhcnJheSIsIklGcmFtZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInNyYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUFFTUEsZTtjQUFBQSxlOztBQUNGLGFBREVBLGVBQ0YsQ0FBWUMsS0FBWixFQUFtQjtBQUFBLDhCQURqQkQsZUFDaUI7O0FBQUEscURBQ2Ysc0JBQU1DLEtBQU4sQ0FEZTs7QUFBQSxjQWlCbkJDLFFBakJtQixHQWlCUixVQUFDQyxDQUFELEVBQU87QUFDZEEsY0FBRUMsY0FBRjtBQUNBQyxxQkFBU0MsV0FBVCxHQUF1QixNQUFLQyxRQUE1QjtBQUNBRixxQkFBU0csU0FBVCxHQUFxQixNQUFLQyxPQUExQjtBQUNBLGtCQUFLQyxRQUFMLENBQWM7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QjtBQUNBL0MsZ0JBQWdCZ0QsU0FBaEIsR0FBNEI7QUFDeEJYLGVBQVcsaUJBQVVZLE1BQVYsQ0FBaUJDLFVBREo7QUFFeEJaLFdBQU8saUJBQVVhLE1BQVYsQ0FBaUJELFVBRkE7QUFHeEJqQixZQUFRLGlCQUFVa0IsTUFBVixDQUFpQkQsVUFIRDtBQUl4QmQsV0FBTyxpQkFBVWEsTUFBVixDQUFpQkMsVUFKQTtBQUt4QmhCLHdCQUFvQixpQkFBVWUsTUFBVixDQUFpQkMsVUFMYjtBQU14QlgsY0FBVSxpQkFBVWE7QUFOSSxDQUE1QjtrQkFRZXBELGU7O0lBRVRxRCxNO2NBQUFBLE07O2FBQUFBLE07OEJBQUFBLE07Ozs7O0FBQUFBLFUsV0FDRkMscUIsd0NBQTZCO0FBQUEsWUFBTkMsR0FBTSxRQUFOQSxHQUFNOztBQUN6QixlQUFPQSxRQUFRLEtBQUt0RCxLQUFMLENBQVdzRCxHQUExQjtBQUNILEs7O0FBSENGLFUsV0FLRmxCLE0scUJBQVM7QUFBQSxzQkFDd0IsS0FBS2xDLEtBRDdCO0FBQUEsWUFDRWdDLE1BREYsV0FDRUEsTUFERjtBQUFBLFlBQ1VzQixHQURWLFdBQ1VBLEdBRFY7QUFBQSxZQUNlakIsS0FEZixXQUNlQSxLQURmOztBQUVMLGVBQU8sMENBQVEsYUFBYSxDQUFyQixFQUF3QixRQUFRTCxNQUFoQyxFQUF3QyxLQUFLc0IsR0FBN0MsRUFBa0QsT0FBT2pCLEtBQXpELEdBQVA7QUFDSCxLOztXQVJDZSxNIiwiZmlsZSI6ImZyLUZSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBQcm9wVHlwZXN9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XHJcblxyXG5jbGFzcyBEcmFnZ2FibGVJZnJhbWUgZXh0ZW5kcyBDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKHByb3BzLnRvZ2dsZUZ1bmN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICB3aW5kb3dbcHJvcHMudG9nZ2xlRnVuY3Rpb25OYW1lXSA9IHRoaXMudG9nZ2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpc1Nob3duOiBmYWxzZSxcclxuICAgICAgICAgICAgcGFyYW1zOiBbXSxcclxuICAgICAgICAgICAgeFBvczogMCxcclxuICAgICAgICAgICAgeVBvczogMCxcclxuICAgICAgICAgICAgeEVsZW06IDAsXHJcbiAgICAgICAgICAgIHlFbGVtOiAwLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBkcmFnSW5pdCA9IChlKSA9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdGhpcy5tb3ZlRWxlbTtcclxuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSB0aGlzLmRlc3Ryb3k7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHhQb3M6IGUucGFnZVgsXHJcbiAgICAgICAgICAgIHlQb3M6IGUucGFnZVksXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnJlZnMuaGVscEZyYW1lLFxyXG4gICAgICAgICAgICB4RWxlbTogZS5wYWdlWCAtIHRoaXMucmVmcy5oZWxwRnJhbWUub2Zmc2V0TGVmdCxcclxuICAgICAgICAgICAgeUVsZW06IGUucGFnZVkgLSB0aGlzLnJlZnMuaGVscEZyYW1lLm9mZnNldFRvcFxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb3ZlRWxlbSA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc3Qge3hQb3MsIHlQb3MsIHhFbGVtLCB5RWxlbSwgc2VsZWN0ZWR9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgeFBvczogZS5wYWdlWCxcclxuICAgICAgICAgICAgeVBvczogZS5wYWdlWVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZC5zdHlsZS5sZWZ0ID0gKHhQb3MgLSB4RWxlbSkgKyAncHgnO1xyXG4gICAgICAgICAgICBzZWxlY3RlZC5zdHlsZS50b3AgPSAoeVBvcyAtIHlFbGVtKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBkZXN0cm95ID0gKGUpID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xyXG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWQ6IG51bGx9KTtcclxuICAgIH07XHJcblxyXG4gICAgdG9nZ2xlID0gKC4uLnBhcmFtcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHt5UG9zOiBvbGRQb3MsIGlzU2hvd24sIHlFbGVtfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgY29uc3Qge3BhZ2VZT2Zmc2V0LCBvdXRlckhlaWdodH0gPSB3aW5kb3c7XHJcbiAgICAgICAgY29uc3QgeVBvcyA9IGlzU2hvd24gPyBvbGRQb3MgOiBwYWdlWU9mZnNldCA+IG9sZFBvcyA/IHBhZ2VZT2Zmc2V0ICsgNTAgOiBwYWdlWU9mZnNldCArIG91dGVySGVpZ2h0IDwgb2xkUG9zID8gcGFnZVlPZmZzZXQgKyBvdXRlckhlaWdodCAtIHRoaXMucHJvcHMuaGVpZ2h0IC0gMTAwIDogb2xkUG9zO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzU2hvd246ICF0aGlzLnN0YXRlLmlzU2hvd24sIHBhcmFtcywgeVBvc30pO1xyXG4gICAgICAgIHRoaXMucmVmcy5oZWxwRnJhbWUuc3R5bGUudG9wID0gKHlQb3MgLSB5RWxlbSkgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGl0bGUsIGlmcmFtZVVybCwgd2lkdGgsIGhlaWdodCwgcXVlcnlVcmx9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCB7c2VsZWN0ZWQsIGlzU2hvd24sIHBhcmFtc30gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGlmcmFtZVVybCArIHBhcmFtcy5tYXAoKHBhcmFtLCBpKSA9PiB0eXBlb2YgcXVlcnlVcmxbaV0gPT09ICdzdHJpbmcnID8gcXVlcnlVcmxbaV0gKyBwYXJhbSA6ICcnKS5qb2luKCcnKTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGhlbHAtZnJhbWUgJHtzZWxlY3RlZCA/ICdpcy1kcmFnZ2luZycgOiAnJ31gfSBvbk1vdXNlRG93bj17dGhpcy5kcmFnSW5pdH0gcmVmPSdoZWxwRnJhbWUnIHN0eWxlPXt7d2lkdGgsIGRpc3BsYXk6IGlzU2hvd24gPyAnYmxvY2snIDogJ25vbmUnfX0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2hlbHAtY2VudGVyLXRpdGxlJz57aTE4bmV4dC50KHRpdGxlKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLWljb24gbWRsLWpzLXJpcHBsZS1lZmZlY3QgY2xvc2UtaWNvbicgb25DbGljaz17dGhpcy50b2dnbGV9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT0nbWF0ZXJpYWwtaWNvbnMnPmNsb3NlPC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxJRnJhbWUgaGVpZ2h0PXtoZWlnaHR9IHNyYz17dXJsfSB3aWR0aD17d2lkdGh9IC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuRHJhZ2dhYmxlSWZyYW1lLmRpc3BsYXlOYW1lID0gJ0RyYWdnYWJsZUlmcmFtZSc7XHJcbkRyYWdnYWJsZUlmcmFtZS5wcm9wVHlwZXMgPSB7XHJcbiAgICBpZnJhbWVVcmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcclxuICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXHJcbiAgICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcclxuICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXHJcbiAgICB0b2dnbGVGdW5jdGlvbk5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcclxuICAgIHF1ZXJ5VXJsOiBQcm9wVHlwZXMuYXJyYXlcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRHJhZ2dhYmxlSWZyYW1lO1xyXG5cclxuY2xhc3MgSUZyYW1lIGV4dGVuZHMgQ29tcG9uZW50IHtcclxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZSh7c3JjfSkge1xyXG4gICAgICAgIHJldHVybiBzcmMgIT09IHRoaXMucHJvcHMuc3JjO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7aGVpZ2h0LCBzcmMsIHdpZHRofSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIDxpZnJhbWUgZnJhbWVCb3JkZXI9ezB9IGhlaWdodD17aGVpZ2h0fSBzcmM9e3NyY30gd2lkdGg9e3dpZHRofSAvPjtcclxuICAgIH1cclxufVxyXG4iXX0=