datocms-plugin-sdk
Version:
129 lines • 4.53 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
export function pick(obj, keys) {
var result = {};
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
if (key in obj) {
result[key] = obj[key];
}
}
return result;
}
export function omit(obj, keys) {
var result = __assign({}, obj);
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
var key = keys_2[_i];
delete result[key];
}
return result;
}
export function fromOneFieldIntoMultipleAndResultsById(fn) {
return function (fields, ctx) {
if (!fn) {
return undefined;
}
var result = {};
for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {
var field = fields_1[_i];
var itemType = ctx.itemTypes[field.relationships.item_type.data.id];
result[field.id] = fn(field, __assign(__assign({}, ctx), { itemType: itemType }));
}
return result;
};
}
export function containedRenderModeBootstrapper(mode, callConfigurationMethod) {
var bootstrapper = function (connectConfiguration, methods, initialProperties) {
if (initialProperties.mode !== mode) {
return undefined;
}
var sizingUtilities = buildSizingUtilities(methods);
var render = function (properties) {
callConfigurationMethod(connectConfiguration, __assign(__assign(__assign({}, methods), properties), sizingUtilities));
};
render(initialProperties);
return render;
};
bootstrapper.mode = mode;
return bootstrapper;
}
export function fullScreenRenderModeBootstrapper(mode, callConfigurationMethod) {
var bootstrapper = function (connectConfiguration, methods, initialProperties) {
if (initialProperties.mode !== mode) {
return undefined;
}
var render = function (properties) {
callConfigurationMethod(connectConfiguration, __assign(__assign({}, methods), properties));
};
render(initialProperties);
return render;
};
bootstrapper.mode = mode;
return bootstrapper;
}
function getMaxScrollHeight() {
var elements = document.querySelectorAll('body *');
var maxVal = 0;
for (var i = 0; i < elements.length; i++) {
maxVal = Math.max(elements[i].getBoundingClientRect().bottom, maxVal);
}
return maxVal;
}
var buildSizingUtilities = function (methods) {
var oldHeight = null;
var updateHeight = function (height) {
var realHeight = height === undefined
? Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.getBoundingClientRect().height, getMaxScrollHeight())
: height;
if (realHeight !== oldHeight) {
methods.setHeight(realHeight);
oldHeight = realHeight;
}
};
var resizeObserver = null;
var mutationObserver = null;
var onMutation = function () { return updateHeight(); };
var startAutoResizer = function () {
updateHeight();
if (!resizeObserver) {
resizeObserver = new ResizeObserver(onMutation);
resizeObserver.observe(document.documentElement);
}
if (!mutationObserver) {
mutationObserver = new MutationObserver(onMutation);
mutationObserver.observe(window.document.body, {
attributes: true,
childList: true,
subtree: true,
characterData: true,
});
}
};
var stopAutoResizer = function () {
if (resizeObserver) {
resizeObserver.disconnect();
resizeObserver = null;
}
if (mutationObserver) {
mutationObserver.disconnect();
mutationObserver = null;
}
};
var isAutoResizerActive = function () { return Boolean(resizeObserver); };
return {
updateHeight: updateHeight,
startAutoResizer: startAutoResizer,
stopAutoResizer: stopAutoResizer,
isAutoResizerActive: isAutoResizerActive,
};
};
//# sourceMappingURL=utils.js.map