Fix setting aspect ratio in percentage (#2289)

* Fix setting aspect ratio in percentage

* Use endsWith

* Fix invalid test
This commit is contained in:
Paulus Schoutsen 2018-12-13 23:36:01 +01:00 committed by GitHub
parent 71ed83ef07
commit b3b9ca9c3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 21 deletions

View File

@ -1,24 +1,30 @@
export default function parseAspectRatio(input) {
// Handle 16x9, 16:9, 1.78x1, 1.78:1, 1.78
// Ignore everything else
function parseOrThrow(num) {
const parsed = parseFloat(num);
if (isNaN(parsed)) {
throw new Error(`${num} is not a number`);
}
return parsed;
// Handle 16x9, 16:9, 1.78x1, 1.78:1, 1.78
// Ignore everything else
const parseOrThrow = (num) => {
const parsed = parseFloat(num);
if (isNaN(parsed)) {
throw new Error(`${num} is not a number`);
}
return parsed;
};
export default function parseAspectRatio(input: string) {
if (!input) {
return null;
}
try {
if (input) {
const arr = input.replace(":", "x").split("x");
if (arr.length === 0) {
return null;
}
return arr.length === 1
? { w: parseOrThrow(arr[0]), h: 1 }
: { w: parseOrThrow(arr[0]), h: parseOrThrow(arr[1]) };
if (input.endsWith("%")) {
return { w: 100, h: parseOrThrow(input.substr(0, input.length - 1)) };
}
const arr = input.replace(":", "x").split("x");
if (arr.length === 0) {
return null;
}
return arr.length === 1
? { w: parseOrThrow(arr[0]), h: 1 }
: { w: parseOrThrow(arr[0]), h: parseOrThrow(arr[1]) };
} catch (err) {
// Ignore the error
}

View File

@ -31,9 +31,9 @@ describe("parseAspectRatio", () => {
assert.deepEqual(r, ratio178);
});
it("Skips null states", () => {
const r = parseAspectRatio(null);
assert.equal(r, null);
it("Parses 23%", () => {
const r = parseAspectRatio("23%");
assert.deepEqual(r, { w: 100, h: 23 });
});
it("Skips empty states", () => {