focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
183 lines (149 loc) • 17.8 kB
JavaScript
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=
;