UNPKG

@ckeditor/ckeditor5-table

Version:

Table feature for CKEditor 5.

116 lines (115 loc) 4.03 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ import { isObject } from 'es-toolkit/compat'; /** * Returns a string if all four values of box sides are equal. * * If a string is passed, it is treated as a single value (pass-through). * * ```ts * // Returns 'foo': * getSingleValue( { top: 'foo', right: 'foo', bottom: 'foo', left: 'foo' } ); * getSingleValue( 'foo' ); * * // Returns undefined: * getSingleValue( { top: 'foo', right: 'foo', bottom: 'bar', left: 'foo' } ); * getSingleValue( { top: 'foo', right: 'foo' } ); * ``` */ export function getSingleValue(objectOrString) { if (!objectOrString || !isObject(objectOrString)) { return objectOrString; } const { top, right, bottom, left } = objectOrString; if (top == right && right == bottom && bottom == left) { return top; } } /** * Adds a unit to a value if the value is a number or a string representing a number. * * **Note**: It does nothing to non-numeric values. * * ```ts * getSingleValue( 25, 'px' ); // '25px' * getSingleValue( 25, 'em' ); // '25em' * getSingleValue( '25em', 'px' ); // '25em' * getSingleValue( 'foo', 'px' ); // 'foo' * ``` * * @param defaultUnit A default unit added to a numeric value. */ export function addDefaultUnitToNumericValue(value, defaultUnit) { const numericValue = parseFloat(value); if (Number.isNaN(numericValue)) { return value; } if (String(numericValue) !== String(value)) { return value; } return `${numericValue}${defaultUnit}`; } /** * Returns the normalized configuration. * * @param config The configuration to normalize. * @param options Options used to determine which properties should be added. */ export function getNormalizedDefaultProperties(config, options = {}) { const normalizedConfig = { borderStyle: 'none', borderWidth: '', borderColor: '', backgroundColor: '', width: '', height: '', ...config }; if (options.includeAlignmentProperty && !normalizedConfig.alignment) { normalizedConfig.alignment = 'center'; } if (options.includePaddingProperty && !normalizedConfig.padding) { normalizedConfig.padding = ''; } if (options.includeVerticalAlignmentProperty && !normalizedConfig.verticalAlignment) { normalizedConfig.verticalAlignment = 'middle'; } if (options.includeHorizontalAlignmentProperty && !normalizedConfig.horizontalAlignment) { normalizedConfig.horizontalAlignment = options.isRightToLeftContent ? 'right' : 'left'; } return normalizedConfig; } /** * Returns the normalized default table properties. * * @param config The configuration to normalize. * @param options Options used to determine which properties should be added. */ export function getNormalizedDefaultTableProperties(config, options) { return getNormalizedDefaultProperties({ // It adds support for border none in the table element, keep it in sync with the content styles // See more: https://github.com/ckeditor/ckeditor5/issues/6841#issuecomment-1959195608 borderStyle: 'double', borderColor: 'hsl(0, 0%, 70%)', borderWidth: '1px', ...config }, options); } /** * Returns the normalized default cell properties. * * @param config The configuration to normalize. * @param options Options used to determine which properties should be added. */ export function getNormalizedDefaultCellProperties(config, options) { return getNormalizedDefaultProperties({ // It adds support for border none in the table element, keep it in sync with the content styles // See more: https://github.com/ckeditor/ckeditor5/issues/6841#issuecomment-1959195608 borderStyle: 'solid', borderColor: 'hsl(0, 0%, 75%)', borderWidth: '1px', ...config }, options); }