diff --git a/packages/block-editor/README.md b/packages/block-editor/README.md index a8a19f6f830211..b4eb9c473ceb52 100644 --- a/packages/block-editor/README.md +++ b/packages/block-editor/README.md @@ -382,7 +382,7 @@ _Parameters_ _Returns_ -- `string`: String with the class corresponding to the fontSize passed. The class is generated by appending 'has-' followed by fontSizeSlug and ending with '-font-size'. +- `string`: String with the class corresponding to the fontSize passed. The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'. # **getFontSizeObjectByValue** diff --git a/packages/block-editor/src/components/colors/test/utils.js b/packages/block-editor/src/components/colors/test/utils.js index 6e97a8518be494..30443c359776aa 100644 --- a/packages/block-editor/src/components/colors/test/utils.js +++ b/packages/block-editor/src/components/colors/test/utils.js @@ -109,10 +109,22 @@ describe( 'color utils', () => { ).toBeUndefined(); } ); - it( 'should return a class name with the color slug without spaces', () => { + it( 'should return a class name with the color slug in kebab case', () => { expect( getColorClassName( 'background', 'Light Purple veryDark' ) - ).toBe( 'has-Light-Purple-veryDark-background' ); + ).toBe( 'has-light-purple-very-dark-background' ); + } ); + + it( 'should return the correct class name if the color slug is not a string', () => { + expect( getColorClassName( 'background', 123456 ) ).toBe( + 'has-123456-background' + ); + } ); + + it( 'should return the correct class name if the color slug contains special characters', () => { + expect( getColorClassName( 'background', '#abcdef' ) ).toBe( + 'has-abcdef-background' + ); } ); } ); } ); diff --git a/packages/block-editor/src/components/colors/utils.js b/packages/block-editor/src/components/colors/utils.js index 98b00b62411f05..5c3ede4ad419f5 100644 --- a/packages/block-editor/src/components/colors/utils.js +++ b/packages/block-editor/src/components/colors/utils.js @@ -1,7 +1,7 @@ /** * External dependencies */ -import { find, map } from 'lodash'; +import { find, kebabCase, map } from 'lodash'; import tinycolor from 'tinycolor2'; /** @@ -60,14 +60,7 @@ export function getColorClassName( colorContextName, colorSlug ) { return undefined; } - // We don't want to use kebabCase from lodash here - // see https://github.com/WordPress/gutenberg/issues/32347 - // However, we need to make sure the generated class - // doesn't contain spaces. - return `has-${ colorSlug.replace( - /\s+/g, - '-' - ) }-${ colorContextName.replace( /\s+/g, '-' ) }`; + return `has-${ kebabCase( colorSlug ) }-${ colorContextName }`; } /** diff --git a/packages/block-editor/src/components/font-sizes/test/utils.js b/packages/block-editor/src/components/font-sizes/test/utils.js new file mode 100644 index 00000000000000..1a431bce828110 --- /dev/null +++ b/packages/block-editor/src/components/font-sizes/test/utils.js @@ -0,0 +1,32 @@ +/** + * WordPress dependencies + */ +import { logged } from '@wordpress/deprecated'; + +/** + * Internal dependencies + */ +import { getFontSizeClass } from '../utils'; + +describe( 'getFontSizeClass()', () => { + afterEach( () => { + for ( const key in logged ) { + delete logged[ key ]; + } + } ); + + it( 'Should return the correct font size class when given a string', () => { + const fontSizeClass = getFontSizeClass( '14px' ); + expect( fontSizeClass ).toBe( 'has-14-px-font-size' ); + } ); + + it( 'Should return the correct font size class when given a number', () => { + const fontSizeClass = getFontSizeClass( 16 ); + expect( fontSizeClass ).toBe( 'has-16-font-size' ); + } ); + + it( 'Should return the correct font size class when the given font size contains special characters', () => { + const fontSizeClass = getFontSizeClass( '#abcdef' ); + expect( fontSizeClass ).toBe( 'has-abcdef-font-size' ); + } ); +} ); diff --git a/packages/block-editor/src/components/font-sizes/utils.js b/packages/block-editor/src/components/font-sizes/utils.js index 80782f1753ba2e..1237a13efd7db6 100644 --- a/packages/block-editor/src/components/font-sizes/utils.js +++ b/packages/block-editor/src/components/font-sizes/utils.js @@ -1,7 +1,7 @@ /** * External dependencies */ -import { find } from 'lodash'; +import { find, kebabCase } from 'lodash'; /** * Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values. @@ -55,16 +55,12 @@ export function getFontSizeObjectByValue( fontSizes, value ) { * @param {string} fontSizeSlug Slug of the fontSize. * * @return {string} String with the class corresponding to the fontSize passed. - * The class is generated by appending 'has-' followed by fontSizeSlug and ending with '-font-size'. + * The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'. */ export function getFontSizeClass( fontSizeSlug ) { if ( ! fontSizeSlug ) { return; } - // We don't want to use kebabCase from lodash here - // see https://github.com/WordPress/gutenberg/issues/32347 - // However, we need to make sure the generated class - // doesn't contain spaces. - return `has-${ fontSizeSlug.replace( /\s+/g, '-' ) }-font-size`; + return `has-${ kebabCase( fontSizeSlug ) }-font-size`; } diff --git a/packages/edit-site/src/components/editor/global-styles-renderer.js b/packages/edit-site/src/components/editor/global-styles-renderer.js index bcb26776c22d24..bdc46662fb62fc 100644 --- a/packages/edit-site/src/components/editor/global-styles-renderer.js +++ b/packages/edit-site/src/components/editor/global-styles-renderer.js @@ -89,14 +89,7 @@ function getPresetsClasses( blockSelector, blockPresets = {} ) { if ( presetByOrigin[ origin ] ) { presetByOrigin[ origin ].forEach( ( { slug } ) => { classes.forEach( ( { classSuffix, propertyName } ) => { - // We don't want to use kebabCase from lodash here - // see https://github.com/WordPress/gutenberg/issues/32347 - // However, we need to make sure the generated class - // doesn't contain spaces. - const classSelectorToUse = `.has-${ slug.replace( - /\s+/g, - '-' - ) }-${ classSuffix }`; + const classSelectorToUse = `.has-${ slug }-${ classSuffix }`; const selectorToUse = `${ blockSelector }${ classSelectorToUse }`; const value = `var(--wp--preset--${ cssVarInfix }--${ slug })`; declarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;