@wordpress/block-editor
Version:
8 lines (7 loc) • 8.5 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/store/get-block-settings.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_PATHS_WITH_OVERRIDE as PATHS_WITH_OVERRIDE,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromObjectPath } from '../utils/object';\nimport { getBlockName, getSettings, getBlockAttributes } from './selectors';\n\nconst blockedPaths = [\n\t'color',\n\t'border',\n\t'dimensions',\n\t'typography',\n\t'spacing',\n];\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) => settings.colors,\n\t'color.gradients': ( settings ) => settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) => settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.lineHeight': ( settings ) => settings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.padding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst prefixedFlags = {\n\t/*\n\t * These were only available in the plugin\n\t * and can be removed when the minimum WordPress version\n\t * for the plugin is 5.9.\n\t */\n\t'border.customColor': 'border.color',\n\t'border.customStyle': 'border.style',\n\t'border.customWidth': 'border.width',\n\t'typography.customFontStyle': 'typography.fontStyle',\n\t'typography.customFontWeight': 'typography.fontWeight',\n\t'typography.customLetterSpacing': 'typography.letterSpacing',\n\t'typography.customTextDecorations': 'typography.textDecoration',\n\t'typography.customTextTransforms': 'typography.textTransform',\n\t/*\n\t * These were part of WordPress 5.8 and we need to keep them.\n\t */\n\t'border.customRadius': 'border.radius',\n\t'spacing.customMargin': 'spacing.margin',\n\t'spacing.customPadding': 'spacing.padding',\n\t'typography.customLineHeight': 'typography.lineHeight',\n};\n\n/**\n * Remove `custom` prefixes for flags that did not land in 5.8.\n *\n * This provides continued support for `custom` prefixed properties. It will\n * be removed once third party devs have had sufficient time to update themes,\n * plugins, etc.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34485\n *\n * @param {string} path Path to desired value in settings.\n * @return {string} The value for defined setting.\n */\nconst removeCustomPrefixes = ( path ) => {\n\treturn prefixedFlags[ path ] || path;\n};\n\nexport function getBlockSettings( state, clientId, ...paths ) {\n\tconst blockName = getBlockName( state, clientId );\n\tconst candidates = [];\n\n\tif ( clientId ) {\n\t\tlet id = clientId;\n\t\tdo {\n\t\t\tconst name = getBlockName( state, id );\n\t\t\tif ( hasBlockSupport( name, '__experimentalSettings', false ) ) {\n\t\t\t\tcandidates.push( id );\n\t\t\t}\n\t\t} while ( ( id = state.blocks.parents.get( id ) ) );\n\t}\n\n\treturn paths.map( ( path ) => {\n\t\tif ( blockedPaths.includes( path ) ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t'Top level useSetting paths are disabled. Please use a subpath to query the information needed.'\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// 0. Allow third parties to filter the block's settings at runtime.\n\t\tlet result = applyFilters(\n\t\t\t'blockEditor.useSetting.before',\n\t\t\tundefined,\n\t\t\tpath,\n\t\t\tclientId,\n\t\t\tblockName\n\t\t);\n\n\t\tif ( undefined !== result ) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst normalizedPath = removeCustomPrefixes( path );\n\n\t\t// 1. Take settings from the block instance or its ancestors.\n\t\t// Start from the current block and work our way up the ancestors.\n\t\tfor ( const candidateClientId of candidates ) {\n\t\t\tconst candidateAtts = getBlockAttributes(\n\t\t\t\tstate,\n\t\t\t\tcandidateClientId\n\t\t\t);\n\t\t\tresult =\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings?.blocks?.[ blockName ],\n\t\t\t\t\tnormalizedPath\n\t\t\t\t) ??\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings,\n\t\t\t\t\tnormalizedPath\n\t\t\t\t);\n\t\t\tif ( result !== undefined ) {\n\t\t\t\t// Stop the search for more distant ancestors and move on.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 2. Fall back to the settings from the block editor store (__experimentalFeatures).\n\t\tconst settings = getSettings( state );\n\t\tif ( result === undefined && blockName ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures?.blocks?.[ blockName ],\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\tif ( result === undefined ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures,\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\t// Return if the setting was found in either the block instance or the store.\n\t\tif ( result !== undefined ) {\n\t\t\tif ( PATHS_WITH_OVERRIDE[ normalizedPath ] ) {\n\t\t\t\treturn result.custom ?? result.theme ?? result.default;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// 3. Otherwise, use deprecated settings.\n\t\tconst deprecatedSettingsValue =\n\t\t\tdeprecatedFlags[ normalizedPath ]?.( settings );\n\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\treturn deprecatedSettingsValue;\n\t\t}\n\n\t\t// 4. Fallback for typography.dropCap:\n\t\t// This is only necessary to support typography.dropCap.\n\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t// To remove when __experimentalFeatures are ported to core.\n\t\treturn normalizedPath === 'typography.dropCap' ? true : undefined;\n\t} );\n}\n"],
"mappings": "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",
"names": []
}