tandem-front-end
Version:
Visual editor for web components
79 lines • 3.04 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var ReactDOM = require("react-dom");
var tandem_common_1 = require("tandem-common");
var recompose_1 = require("recompose");
exports.default = recompose_1.compose(recompose_1.pure, recompose_1.withState("anchorRect", "setAnchorRect", null), recompose_1.lifecycle({
componentWillUpdate: function (_a) {
var open = _a.open;
if (!this.props.open && open) {
var anchor = ReactDOM.findDOMNode(this);
var rect = getRealElementBounds(anchor);
this.props.setAnchorRect(rect);
}
}
}), function (Base) { return function (_a) {
var open = _a.open, onEmptySpaceClick = _a.onEmptySpaceClick, anchorRect = _a.anchorRect, rest = __rest(_a, ["open", "onEmptySpaceClick", "anchorRect"]);
var overrideProps = {};
if (!open) {
overrideProps = {
contentProps: {
children: []
}
};
}
else if (anchorRect) {
overrideProps = {
contentProps: {
onEmptySpaceClick: onEmptySpaceClick,
anchorRect: anchorRect,
style: {
display: "block",
position: "fixed"
}
}
};
}
return React.createElement(Base, __assign({}, rest, overrideProps));
}; });
var getRealElementBounds = function (element) {
var parentIframes = [];
var current = element;
var _loop_1 = function () {
var ownerDocument = current.ownerDocument;
if (ownerDocument === document) {
return "break";
}
var iframe = Array.prototype.find.call(ownerDocument.defaultView.parent.document.querySelectorAll("iframe"), function (iframe) {
return iframe.contentDocument === ownerDocument;
});
current = iframe;
parentIframes.push(iframe);
};
while (1) {
var state_1 = _loop_1();
if (state_1 === "break")
break;
}
var offset = parentIframes.reduce(function (point, iframe) { return tandem_common_1.shiftPoint(point, iframe.getBoundingClientRect()); }, { left: 0, top: 0 });
return tandem_common_1.shiftBounds(element.getBoundingClientRect(), offset);
};
//# sourceMappingURL=controller.js.map