agora-edu-core
Version:
Core APIs for building an online classroom
120 lines (119 loc) • 4.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createClosure = exports.convertRatioToLocalWithFixedDimensions = exports.convertRatioToLocalPositionWithFixedDimensions = exports.convertRatioToLocalPosition = exports.convertRatioToLocalDimensions = exports.convertRatioToLocal = exports.convertLocalToRatio = exports.convertLocalPositionToRatio = exports.convertLocalDimensionsToRatio = void 0;
var _clamp = _interopRequireDefault(require("lodash/clamp"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const createClosure = () => {
const cacheRegistry = {};
return {
prev(key) {
return cacheRegistry[key];
},
next(key, value) {
cacheRegistry[key] = value;
}
};
};
exports.createClosure = createClosure;
const convertRatioToLocal = (diffRatio, sizeRatio, outerSize, resizeBounds) => {
const {
position
} = convertRatioToLocalPosition(diffRatio, sizeRatio, outerSize, resizeBounds);
const {
dimensions
} = convertRatioToLocalDimensions(sizeRatio, outerSize, resizeBounds);
return {
position,
dimensions
};
};
exports.convertRatioToLocal = convertRatioToLocal;
const convertRatioToLocalWithFixedDimensions = (diffRatio, dimensions, outerSize, resizeBounds) => {
const {
position
} = convertRatioToLocalPositionWithFixedDimensions(diffRatio, dimensions, outerSize, resizeBounds);
return {
position,
dimensions
};
};
exports.convertRatioToLocalWithFixedDimensions = convertRatioToLocalWithFixedDimensions;
const convertRatioToLocalPosition = (diffRatio, sizeRatio, outerSize, resizeBounds) => {
const dimensions = {
width: sizeRatio.ratioWidth * outerSize.width,
height: sizeRatio.ratioHeight * outerSize.height
};
dimensions.width = (0, _clamp.default)(dimensions.width, resizeBounds.minWidth, resizeBounds.maxWidth);
dimensions.height = (0, _clamp.default)(dimensions.height, resizeBounds.minHeight, resizeBounds.maxHeight);
const medX = outerSize.width - dimensions.width;
const medY = outerSize.height - dimensions.height;
return {
position: {
x: medX * diffRatio.ratioX,
y: medY * diffRatio.ratioY
}
};
};
exports.convertRatioToLocalPosition = convertRatioToLocalPosition;
const convertRatioToLocalPositionWithFixedDimensions = (diffRatio, dimensions, outerSize, resizeBounds) => {
dimensions.width = (0, _clamp.default)(dimensions.width, resizeBounds.minWidth, resizeBounds.maxWidth);
dimensions.height = (0, _clamp.default)(dimensions.height, resizeBounds.minHeight, resizeBounds.maxHeight);
const medX = outerSize.width - dimensions.width;
const medY = outerSize.height - dimensions.height;
return {
position: {
x: medX * diffRatio.ratioX,
y: medY * diffRatio.ratioY
}
};
};
exports.convertRatioToLocalPositionWithFixedDimensions = convertRatioToLocalPositionWithFixedDimensions;
const convertRatioToLocalDimensions = (sizeRatio, outerSize, resizeBounds) => {
const dimensions = {
width: sizeRatio.ratioWidth * outerSize.width,
height: sizeRatio.ratioHeight * outerSize.height
};
dimensions.width = (0, _clamp.default)(dimensions.width, resizeBounds.minWidth, resizeBounds.maxWidth);
dimensions.height = (0, _clamp.default)(dimensions.height, resizeBounds.minHeight, resizeBounds.maxHeight);
return {
dimensions
};
};
exports.convertRatioToLocalDimensions = convertRatioToLocalDimensions;
const convertLocalToRatio = (position, dimensions, medX, medY, outerSize) => {
const {
ratioPosition
} = convertLocalPositionToRatio(position, medX, medY);
const {
ratioDimensions
} = convertLocalDimensionsToRatio(dimensions, outerSize);
return {
ratioPosition,
ratioDimensions
};
};
exports.convertLocalToRatio = convertLocalToRatio;
const convertLocalPositionToRatio = (position, medX, medY) => {
const diffRatioX = (0, _clamp.default)(medX === 0 ? 0 : position.x / medX, 0, 1);
const diffRatioY = (0, _clamp.default)(medY === 0 ? 0 : position.y / medY, 0, 1);
return {
ratioPosition: {
x: diffRatioX,
y: diffRatioY
}
};
};
exports.convertLocalPositionToRatio = convertLocalPositionToRatio;
const convertLocalDimensionsToRatio = (dimensions, outerSize) => {
const ratioWidth = (0, _clamp.default)(dimensions.width / outerSize.width, 0, 1);
const ratioHeight = (0, _clamp.default)(dimensions.height / outerSize.height, 0, 1);
return {
ratioDimensions: {
width: ratioWidth,
height: ratioHeight
}
};
};
exports.convertLocalDimensionsToRatio = convertLocalDimensionsToRatio;