carbon/eel

为Neos.io提供的一些Eel助手

安装量: 216 806

依赖项: 30

建议者: 0

安全性: 0

星标: 7

关注者: 4

分支: 2

开放问题: 0

类型:neos-carbon

2.15.2 2024-08-12 14:09 UTC

README

Latest stable version Total downloads License GitHub forks GitHub stars GitHub watchers

Carbon.Eel 包为Neos CMS

BEM 助手

生成 BEM 类。修饰符属性可以是字符串(用于一个修饰符)、数组(例如 ['one', 'two']),或者带有键和值的数组。如果你有一个带有键和值的数组(如 Fusion 数据结构)并且值是 true,则使用键的名称作为修饰符。

  • block (字符串,必需) 块的名称
  • element (字符串) 元素的名称,可选
  • modifiers (字符串|array) 修饰符的名称,可选

BEM.array(block, element, modifiers)

Carbon.Array.BEM(block, element, modifiers) 的快捷方式

BEM.string(block, element, modifiers)

Carbon.String.BEM(block, element, modifiers) 的快捷方式

BEM.modifier(class, modifiers)

生成包含 BEM 类的字符串。修饰符属性可以是字符串(用于一个修饰符)、数组(例如 ['one', 'two']),或者带有键和值的数组。如果你有一个带有键和值的数组(如 Fusion 数据结构)并且值是 true,则使用键的名称作为修饰符。

  • class (字符串,必需) 类的名称
  • modifiers (字符串|array) 修饰符的名称,可选

返回 字符串

数组助手

Carbon.Array.BEM(block, element, modifiers)

生成包含 BEM 类的数组。修饰符属性可以是字符串(用于一个修饰符)、数组(例如 ['one', 'two']),或者带有键和值的数组。如果你有一个带有键和值的数组(如 Fusion 数据结构)并且值是 true,则使用键的名称作为修饰符。

  • block (字符串,必需) 块的名称
  • element (字符串) 元素的名称,可选
  • modifiers (字符串|array) 修饰符的名称,可选

返回 数组

Carbon.Array.chunck(array, length, preserveKeys)

将数组分割成包含 length 个元素的数组。最后一个块可能包含少于 length 个元素。

  • array (数组,必需) 要处理的数组
  • length (整数,必需) 每个块的大小
  • preserveKeys (布尔值) 当设置为 true 时,将保留键。默认为 false,将按数字重新索引块

Carbon.Array.join(array, separator)

使用给定的分隔符递归地连接给定的数组。

${Carbon.Array.join(array, ',')}
  • array (数组) 应处理的数组
  • separator (字符串,可选) 之间的分隔符默认为 ,

返回 转换后的数组作为字符串

Carbon.Array.extractSubElements(array, preserveKeys)

此方法将子元素提取到父级别。

一个类型为的输入数组

[
 element1 => [
   0 => 'value1'
 ],
 element2 => [
   0 => 'value2'
   1 => 'value3'
 ],

将被转换为

[
   0 => 'value1'
   1 => 'value2'
   2 => 'value3'
]
  • array (数组) 应处理的数组
  • preserveKeys (布尔值,可选) 选项是否保留键,默认为 false

返回 转换后的数组

Carbon.Array.intersect(array1, array2, array_)

  • array1 (可迭代|混合) 第一个数组或值
  • array2 (可迭代|混合) 第二个数组或值
  • array_ (可迭代|混合,可选) 可选的变量列表,包含额外的数组/值

返回一个数组,包含所有在所有参数中出现的 array1 的值。

Carbon.Array.length(array)

此方法计算给定数组或可计数对象中的元素数量。如果不是可计数对象,则返回 0

count = ${Carbon.Array.length(countable)}

Carbon.Array.hasKey(array, key)

返回一个布尔值,表示数组是否包含指定的键

bool = ${Carbon.Array.hasKey(array, key)}

Carbon.Array.hasValue(array, value)

返回一个布尔值,表示数组是否包含指定的值

bool = ${Carbon.Array.hasValue(array, value)}

Carbon.Array.getValueByPath(array, path)

通过指定的路径返回嵌套数组的值。

value = ${Carbon.Array.getValueByPath(array, path)}

Carbon.Array.setValueByPath(array, path, value)

通过指定的路径在嵌套数组或对象中设置给定的值。

array = ${Carbon.Array.setValueByPath(subject, path, value)}

Carbon.Array.check(variable)

检查一个变量是否可迭代且有项目

返回 变量或 null(如果它是空的或不可迭代的)

Carbon.Array.isCountable(variable)

检查给定的变量是否可计数

返回 truefalse

Carbon.Array.sortByItem(array, key, direction)

  • array (iterable|mixed) 要排序的数组
  • key (string) 要排序数组的键
  • direction (string, optional) ASCDESC。排序方向

返回 排序后的数组

日期助手

Carbon.Date.secondsUntil(string)

返回给定偏移量之前的秒数。在 @cache 条目的 maximumLifetime 中非常有用。

  • string (string) 从午夜开始的时间偏移量,格式为 DateInterval
  • dateinerval (boolean, optional) 如果应该使用区间或解析 $offset,则默认为 true

在这个例子中,我们通过添加 0 小时的偏移量在午夜清除缓存。

@cache {
    mode = 'cached'
    maximumLifetime = ${Carbon.Date.secondsUntil('PT0H')}
    ...
}

要获取到下一年的秒数,可以这样做

secondUntilNextYear = ${Carbon.Date.secondsUntil('first day of January next year', false)}

返回 秒数间隔(整数)

Carbon.Date.timeToDateInterval(string)

将时间持续时间(1:00)转换为 DateInterval

返回 作为 DateInterval 的持续时间

文件内容助手

Carbon.FileContent.path(string)

返回路径的文件内容。静默失败。

示例

Carbon.FileContent.path('resource://Foo.Bar/Private/Assets/Logo.svg')
Carbon.FileContent.path('Foo.Bar/Private/Assets/Logo.svg')
  • string (string) 文件的路径

返回 文件的内容

Carbon.FileContent.pathHash(string, length)

从路径的文件内容中返回哈希值。静默失败。

示例

Carbon.FileContent.pathHash('resource://Foo.Bar/Private/Assets/Logo.svg') == 1d62f5a5
Carbon.FileContent.pathHash('Foo.Bar/Private/Assets/Logo.svg', 20) == 1d62f5a55ad5e304d60d
  • string (string) 文件的路径
  • length (integer, optional) 哈希值的长度,默认为 8。最大值为 40

返回 文件内容的哈希值

Carbon.FileContent.resource(resource)

返回持久化资源的文件内容。静默失败。

示例

Carbon.FileContent.resource(q(node).property('file'))
  • resource (resource) 要读取的持久化资源

返回 文件的内容

Carbon.FileContent.resourceHash(resource, length)

从持久化资源的文件内容中返回哈希值。静默失败。

示例

  • resource (resource) 要读取的持久化资源
  • length (integer, optional) 哈希值的长度,默认为 8。最大值为 40

返回 文件内容的哈希值

Tailwind 助手

Tailwind.merge(mixed1, mixed2, mixedN)

此助手允许您合并多个 Tailwind CSS 类,并自动解决它们之间的冲突而无需烦恼。将所有参数评估为 className 并根据需要应用条件。将字符串和数组合并为一个字符串,用空格分隔唯一值。

评估 eel 助手的所有参数并应用以下规则

  • 假值:(null''[]{})不会被渲染
  • 数组:所有标量且为真值的项都会被渲染为 className
  • 对象:具有为真值的键会被渲染为 className
  • 标量:被转换为字符串并渲染为 class-name

它基于 tailwind-merge-php

示例

返回 合并后的字符串

配置

如果您未进行任何额外配置即使用Tailwind CSS,您可以直接使用Eel辅助工具。此处请停止阅读。

如果您正在使用自定义Tailwind配置,可能还需要配置Eel辅助工具以正确合并类。

默认情况下,它已配置为,如果以下所有条件都适用于您的Tailwind配置,您仍然可以使用它

  • 仅使用不与其他Tailwind类名冲突的颜色名称
  • 仅通过基于数字的Tailwind类名进行数值上的偏差
  • 仅使用不与默认字体重量类冲突的字体族类
  • 对于其他所有内容,坚持使用默认Tailwind配置

如果这些点中的某些不适用于您,您需要自定义配置。

以下示例展示了如何添加自定义的very-large字体大小

Carbon:
  Eel:
    tailwindMergeConfig:
      classGroups:
        'font-size':
          - text: ['very-large']

您还可以启用不同的验证器,以使一切更加简便。例如,如果您使用Tailwind OKLCH 插件,您可以设置如下

Carbon:
  Eel:
    tailwindMergeConfig:
      classGroups:
        'fill-lightness':
          - 'fill-lightness-offset': ['INTEGER_VALIDATOR', 'ARBITRARY_NUMBER_VALIDATOR']
        'border-lightness':
          - 'border-lightness-offset': ['INTEGER_VALIDATOR', 'ARBITRARY_NUMBER_VALIDATOR']
        'text-lightness':
          - 'text-lightness-offset': ['INTEGER_VALIDATOR', 'ARBITRARY_NUMBER_VALIDATOR']
        'bg-lightness':
          - 'bg-lightness-offset': ['INTEGER_VALIDATOR', 'ARBITRARY_NUMBER_VALIDATOR']

如果您想使用某个验证器,只需将其更改为大写常量并将其作为字符串添加。例如,如果您想使用TshirtSizeValidator,只需将TSHIRT_SIZE_VALIDATOR添加到列表中。

合并服务使用其自己的缓存Carbon_Eel_Tailwind。确保在修改配置时清除缓存。

AlpineJS 辅助工具

AlpineJS.object(arg1, arg2, ..argN)

为AlpineJS指令x-data生成对象。支持嵌套数组。您也可以使用Json.stringify()做到同样的事情,但这个函数更短,因为AlpineJS接受对象,并且更容易编写和阅读。

示例

  • ...arguments 数组

返回 作为字符串的JavaScript对象

AlpineJS.function(name, arg1, arg2, ..argN)

为AlpineJS生成函数调用。更多信息。支持嵌套数组。在命名数组({first:1,second:null})中,null将被过滤掉,但在列表数组([1,null])和平值中则会保留。

示例

  • name (字符串) 函数的名称(例如 x-datax-on:click 等)
  • ...arguments (混合) 函数的选项

返回 x-data函数调用的字符串

AlpineJS.magic(name, arg1, arg2, ..argN)

为AlpineJS生成魔法函数调用。支持嵌套数组。在命名数组({first:1,second:null})中,null将被过滤掉,但在列表数组([1,null])和平值中则会保留。

示例

  • name (字符串) 魔法的名称。如果没有以$开头,它将自动添加前缀。
  • ...arguments (混合) 函数的选项

返回 魔法函数调用的字符串

AlpineJS.expression(value)

使用此方法在AlpineJS.objectAlpineJS.functionAlpineJS.magic辅助工具中传递JavaScript表达式。

示例

字符串辅助工具

Carbon.String.BEM(block, element, modifiers)

生成包含 BEM 类的字符串。修饰符属性可以是字符串(用于一个修饰符)、数组(例如 ['one', 'two']),或者带有键和值的数组。如果你有一个带有键和值的数组(如 Fusion 数据结构)并且值是 true,则使用键的名称作为修饰符。

  • block (字符串,必需) 块的名称
  • element (字符串) 元素的名称,可选
  • modifiers (字符串|array) 修饰符的名称,可选

返回 字符串

Carbon.String.urlize(string)

生成给定字符串的缩略名

示例

  • string (字符串) 要转换的字符串

返回 转换后的字符串

Carbon.String.minifyJS(javascript)

压缩JavaScript以便更快地交付给客户端。

  • javascript (字符串,必需) 要压缩的JavaScript

返回 压缩后的JavaScript

Carbon.String.minifyCSS(css)

压缩CSS以便更快地交付给客户端。

  • css (字符串,必需) 要压缩的CSS

返回 压缩后的CSS

Carbon.String.toPascalCase(string)

将字符串转换为 PascalCase

示例

  • string (字符串) 要转换的字符串

返回 转换后的字符串

Carbon.String.toCamelCase(string)

将字符串转换为 camelCase

示例

  • string (字符串) 要转换的字符串

返回 转换后的字符串

Carbon.String.convertCamelCase(string, separator)

CamelCaseStrings 转换为 hyphen-case-strings

示例

  • string (字符串) 要转换的字符串
  • separator(字符串,可选)单词之间的分隔符默认为 -

返回 转换后的字符串

Carbon.String.convertToString(input, separator)

辅助函数,确保返回一个字符串。

示例

  • input(字符串,数组)要转换的字符串或数组
  • separator(字符串,可选)单词之间的分隔符,默认为空白字符

返回 转换后的字符串

Carbon.String.nl2br(string, separator)

将所有换行符替换为 <br>

示例

  • string(字符串)要转换的字符串
  • separator(字符串,可选)单词之间的分隔符,默认为 <br>

返回 转换后的字符串

Carbon.String.removeNbsp(string)

将非换行空格和双空格替换为普通空格。

示例

  • string(字符串)要转换的字符串

返回 转换后的字符串

Carbon.String.classNames(mixed1, mixed2, mixedN)

将所有参数作为 classNames 渲染,如果需要则应用条件。将字符串和数组合并为一个字符串,具有唯一值,用空格分隔。

评估 eel 助手的所有参数并应用以下规则

  • 假值:(null''[]{})不会被渲染
  • 数组:所有标量且为真值的项都会被渲染为 className
  • 对象:具有为真值的键会被渲染为 className
  • 标量:被转换为字符串并渲染为 class-name

示例

返回 合并后的字符串

Carbon.String.splitIntegerAndString(string)

将字符串拆分为整数和字符串数组。对动画很有用。

示例

  • string(字符串)要拆分的字符串

返回 将字符串拆分为整数和字符串的数组

Carbon.String.phone(phoneNumber, defaultCountryCode, prefix)

辅助函数,将电话号码转换为适用于链接的兼容格式

示例

  • phoneNumber(字符串)要转换的电话号码
  • defaultCountryCode(字符串,可选)默认国家代码,例如 '+41'
  • prefix(字符串,可选)电话号码前缀,默认为 'tel:'

返回 优化后的电话号码

Carbon.String.isValidEmail(emailAddress)

检查字符串是否为有效的电子邮件地址

示例

  • emailAddress(字符串)要检查的字符串

Carbon.String.replaceOnce(string, search, replace)

辅助函数,替换字符串的第一个出现。

示例

  • string(字符串)正在搜索和替换的字符串
  • search(字符串)要搜索的值
  • replace(字符串,可选)替换找到的搜索值的替换值

返回替换一次后的字符串

数字辅助函数

Carbon.Number.format(number, decimals, dec_point, thousands_sep)

使用分组千位格式化数字。如果 decimals 设置为 null,则返回所需的小数位数。

  • number(浮点数,必需)正在格式化的数字
  • decimals(整数,可选)设置小数位数,默认为 null
  • dec_point(字符串,可选)修饰符的名称默认为 .
  • thousands_sep(字符串,可选)修饰符的名称默认为 ,

Carbon.Number.formatLocale(number, decimals, locale)

使用分组千位格式化本地化数字。如果 decimals 设置为 null,则返回所需的小数位数。

  • number(浮点数,必需)正在格式化的数字
  • decimals(整数,可选)设置小数位数,默认为 null
  • locale(字符串,可选)字符串区域 - 例如(de_DE|en|ru_RU)

Carbon.Number.decimalDigits(number)

获取小数位数。

  • number(浮点数,必需)正在格式化的数字

Carbon.Number.pxToRem(value, fallback)

将像素值转换为 rem

  • value(数字 | 字符串,必需)要转换的值
  • fallback(数字 | 字符串,可选)如果 valuefalsenull,则返回回退值

示例

返回一个包含转换值的字符串

后端辅助函数

Carbon.Backend.language()

返回界面语言

Carbon.Backend.translate(id, originalLabel, arguments, source, package, quantity, locale)

获取 id 或原始标签的翻译值(界面语言)。如果仅设置了 id 且包含翻译简写字符串,则根据该简写进行翻译。

在其他所有情况下:如果翻译标签中存在占位符,则替换所有占位符与相应值。

  • id(字符串)用于查找翻译的 id(XLIFF 中的 trans-unit id)
  • originalLabel(字符串,可选)原始翻译值(未翻译的源字符串)
  • arguments(数组,可选)要插入到占位符中的数值索引或命名字符串的数组
  • source(字符串,可选)包含翻译的文件名
  • package(字符串,可选)目标包密钥
  • quantity(混合,可选)用于查找复数形式的数字(浮点数或整数),使用null不使用复数形式
  • locale(字符串,可选)要使用的区域标识符(使用接口语言则为NULL)

返回翻译后的标签或源标签/ID密钥

安装

Carbon.Eel可以通过packagist获取。只需运行

composer require carbon/eel

致谢

一些Eel辅助函数受到了punkt.de的启发或复制