mirror of
https://github.com/iconify/iconify.git
synced 2024-12-12 13:47:49 +00:00
fix: incorrect custom icon size detection in utils
This commit is contained in:
parent
f17693900b
commit
9d93ba8272
@ -2,8 +2,8 @@ import type { Awaitable } from '@antfu/utils';
|
|||||||
import { isUnsetKeyword } from '../svg/build';
|
import { isUnsetKeyword } from '../svg/build';
|
||||||
import type { IconifyLoaderOptions } from './types';
|
import type { IconifyLoaderOptions } from './types';
|
||||||
|
|
||||||
const svgWidthRegex = /width\s*=\s*["'](\w+)["']/;
|
const svgWidthRegex = /\swidth\s*=\s*["'](\w+)["']/;
|
||||||
const svgHeightRegex = /height\s*=\s*["'](\w+)["']/;
|
const svgHeightRegex = /\sheight\s*=\s*["'](\w+)["']/;
|
||||||
const svgTagRegex = /<svg\s+/;
|
const svgTagRegex = /<svg\s+/;
|
||||||
|
|
||||||
function configureSvgSize(
|
function configureSvgSize(
|
||||||
@ -15,35 +15,23 @@ function configureSvgSize(
|
|||||||
|
|
||||||
const check = (prop: 'width' | 'height', regex: RegExp): boolean => {
|
const check = (prop: 'width' | 'height', regex: RegExp): boolean => {
|
||||||
const result = regex.exec(svgNode);
|
const result = regex.exec(svgNode);
|
||||||
const w = result != null;
|
const isSet = result != null;
|
||||||
|
|
||||||
const propValue = props[prop];
|
const propValue = props[prop];
|
||||||
let value: string | undefined;
|
|
||||||
|
|
||||||
if (!isUnsetKeyword(propValue)) {
|
|
||||||
if (propValue) {
|
|
||||||
// Do not change it
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!propValue && !isUnsetKeyword(propValue)) {
|
||||||
if (typeof scale === 'number') {
|
if (typeof scale === 'number') {
|
||||||
// Scale icon, unless scale is 0
|
// Scale icon, unless scale is 0
|
||||||
if (scale) {
|
if (scale > 0) {
|
||||||
value = `${scale}em`;
|
props[prop] = `${scale}em`;
|
||||||
}
|
}
|
||||||
} else if (result) {
|
} else if (result) {
|
||||||
// Use result from iconToSVG()
|
// Use result from iconToSVG()
|
||||||
value = result[1];
|
props[prop] = result[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change / unset
|
return isSet;
|
||||||
if (!value) {
|
|
||||||
delete props[prop];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
props[prop] = value;
|
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return [check('width', svgWidthRegex), check('height', svgHeightRegex)];
|
return [check('width', svgWidthRegex), check('height', svgHeightRegex)];
|
||||||
|
@ -81,7 +81,7 @@ describe('Testing getCustomIcon', () => {
|
|||||||
expect(usedProps.height).toEqual('4em');
|
expect(usedProps.height).toEqual('4em');
|
||||||
});
|
});
|
||||||
|
|
||||||
test.skip('Icon with XML heading', async () => {
|
test('Icon with XML heading', async () => {
|
||||||
// Intercept console.warn
|
// Intercept console.warn
|
||||||
let warned = false;
|
let warned = false;
|
||||||
const warn = console.warn;
|
const warn = console.warn;
|
||||||
@ -96,7 +96,27 @@ describe('Testing getCustomIcon', () => {
|
|||||||
// Restore console.warn
|
// Restore console.warn
|
||||||
console.warn = warn;
|
console.warn = warn;
|
||||||
|
|
||||||
expect(svg).toEqual(result);
|
expect(result).toEqual(
|
||||||
expect(warned).toEqual(true);
|
svg.replace(
|
||||||
|
'<?xml version="1.0" encoding="UTF-8" standalone="no"?>',
|
||||||
|
''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
expect(warned).toEqual(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Scale custom icon', async () => {
|
||||||
|
const svg = `<?xml version="1.0" standalone="no"?>
|
||||||
|
<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor">
|
||||||
|
<path d="M12 14V20M10 12L4 10M14 12L20 10M21 12a9 9 0 11-18 0 9 9 0 0118 0zM14 12a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||||
|
</svg>`;
|
||||||
|
|
||||||
|
const options: IconifyLoaderOptions = {
|
||||||
|
scale: 1.2,
|
||||||
|
};
|
||||||
|
const result = await getCustomIcon(() => svg, 'a', 'b', options);
|
||||||
|
expect(result && result.indexOf(' width="1.2em"') > -1).toBeTruthy();
|
||||||
|
expect(result && result.indexOf(' height="1.2em"') > -1).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user