You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
canvassed/src/calculate-origin-offsets.js

54 lines
1.0 KiB
JavaScript

'use strict';
const defaultValue = require("default-value");
const validateSync = require("./validate-sync");
let originAliases = {
top: 0,
left: 0,
center: "50%",
bottom: "100%",
right: "100%"
}
function tryAlias(value) {
if (originAliases[value] != null) {
return originAliases[value];
} else {
return value;
}
}
function calculateOffset(value, origin) {
if (typeof origin === "number") {
return -origin;
} else {
let match = /^(-?[0-9]+(?:\.[0-9]+)?)%$/.exec(origin);
if (match == null) {
throw new Error(`Encountered invalid origin value: ${origin}`);
} else {
let percentage = match[1];
return -(value * (parseFloat(percentage) / 100));
}
}
}
module.exports = function calculateOriginOffsets(options) {
validateSync(options, {
width: "required",
height: "required",
originX: "required",
originY: "required"
});
let originX = tryAlias(options.originX);
let originY = tryAlias(options.originY);
return {
x: calculateOffset(options.width, originX),
y: calculateOffset(options.height, originY)
}
}