UNPKG

agora-edu-core

Version:

Core APIs for building an online classroom

120 lines (119 loc) 4.61 kB
"use strict"; 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;