Фильтры позволяют изменять [[Переменные|переменные]] в [[Obsidian Web Clipper/Шаблоны|шаблонах Web Clipper]]. Фильтры применяются к переменным с помощью синтаксиса `{{variable|filter}}`. - Фильтры работают с любыми типами [[Переменные|переменных]], включая переменные `prompt`, `meta`, `selector` и `schema`. - Фильтры можно объединять в цепочки, например `{{variable|filter1|filter2}}`, и они применяются в порядке добавления. ## Даты Преобразование и изменение дат. ### `date` Преобразует дату в указанный формат, [см. справку](https://day.js.org/docs/en/display/format). - `{{date|date:"YYYY-MM-DD"}}` преобразует текущую дату в формат "YYYY-MM-DD". - Используйте `date:("outputFormat", "inputFormat")` для указания входного формата, например `"12/01/2024"|date:("YYYY-MM-DD", "MM/DD/YYYY")` разбирает "12/01/2024" и возвращает `"2024-12-01"`. ### `date_modify` Изменяет дату, добавляя или вычитая указанное количество времени, [см. справку](https://day.js.org/docs/en/manipulate/add). - `"2024-12-01"|date_modify:"+1 year"` возвращает `"2025-12-01"` - `"2024-12-01"|date_modify:"- 2 months"` возвращает `"2024-10-01"` ### `duration` Преобразует строки длительности в формате ISO 8601 или секунды в форматированные строки времени. Использует токены: `HH` (часы с ведущим нулём), `H` (часы), `mm` (минуты с ведущим нулём), `m` (минуты), `ss` (секунды с ведущим нулём), `s` (секунды). - `"PT1H30M"|duration:"HH:mm:ss"` возвращает `"01:30:00"`. - `"3665"|duration:"H:mm:ss"` возвращает `"1:01:05"`. - При использовании `duration` без параметров применяется формат `HH:mm:ss` для значений более 1 часа и `mm:ss` для значений менее 1 часа. - Поддерживаются как строки длительности ISO 8601 (например, `PT6702S`, `PT1H30M`), так и простые секунды. ## Преобразование и регистр текста Преобразование текстовых строк из одного формата в другой. ### `camel` Преобразует текст в `camelCase`. ### `capitalize` Делает первый символ заглавным, а остальные преобразует в нижний регистр, например `"hELLO wORLD"|capitalize` возвращает `"Hello world"`. ### `decode_uri` Декодирует строку, закодированную в формате URI, например `"%E4%BD%A0%E5%A5%BD"|decode_uri` возвращает `"你好"`. - `"hello%20world"|decode_uri` возвращает `"hello world"`. - Возвращает исходную строку, если декодирование не удалось (например, при некорректных URI-последовательностях). ### `kebab` Преобразует текст в `kebab-case`. ### `lower` Преобразует текст в `нижний регистр`. ### `pascal` Преобразует текст в `PascalCase`. ### `replace` Заменяет вхождения указанного текста: - Простая замена: `"hello!"|replace:",":""` удаляет все запятые. - Множественная замена: `"hello world"|replace:("e":"a","o":"0")` возвращает `"hall0 w0rld"`. - Замены применяются в порядке их указания. - Для удаления указанного текста используйте `""` в качестве значения замены. - Специальные символы, включая `: | { } ( ) ' "`, должны быть экранированы обратной косой чертой при использовании в поисковом запросе, например `\:` для поиска буквального двоеточия. Поддерживаются регулярные выражения с использованием синтаксиса JavaScript: - Замена всех гласных: `"hello world"|replace:"/[aeiou]/g":"*"` → `"h*ll* w*rld".` - Без учёта регистра: `"HELLO world"|replace:"/hello/i":"hi"` → `"hi world".` - Множественные регулярные выражения: `"hello world"|replace:("/[aeiou]/g":"*","/\s+/":"-")` → `"h*ll*-w*rld"`. - Доступные флаги: `g` (глобальный), `i` (без учёта регистра), `m` (многострочный), `s` (dotAll), `u` (юникод), `y` (привязка). ### `safe_name` Преобразует текст в безопасное имя файла. - По умолчанию `safe_name` применяет наиболее консервативные правила очистки. - Правила для конкретной ОС можно применить с помощью `safe_name:os`, где `os` может быть `windows`, `mac` или `linux`, чтобы применить правила только для данной операционной системы. ### `snake` Преобразует текст в `snake_case`. ### `title` Преобразует текст в `Title Case`, например `"hello world"|title` возвращает `"Hello World"`. ### `trim` Удаляет пробелы с обоих концов строки. - `" hello world "|trim` возвращает `"hello world"`. ### `uncamel` Преобразует camelCase или PascalCase в слова, разделённые пробелами, которые затем можно дополнительно отформатировать другими фильтрами, например `title` или `capitalize`. - `"camelCase"|uncamel` возвращает `"camel case"`. - `"PascalCase"|uncamel` возвращает `"pascal case"`. ### `upper` Преобразует значение в верхний регистр, например `"hello world"|upper` возвращает `"HELLO WORLD"`. ## Форматирование текста Применение [[Основной синтаксис форматирования|основного]] и [[Расширенный синтаксис форматирования|расширенного синтаксиса форматирования]] к тексту. ### `blockquote` Добавляет префикс цитаты Markdown (`> `) к каждой строке входных данных. ### `callout` Создаёт [[Выноски|выноску]] с необязательными параметрами: `{{variable|callout:("type", "title", foldState)}}` - `type` — тип выноски, по умолчанию "info" - `title` — заголовок выноски, по умолчанию пустой - `foldState` — булево значение для состояния сворачивания (true — свёрнуто, false — развёрнуто, null — без возможности сворачивания) ### `footnote` Преобразует массив или объект в список сносок Markdown. - Для массивов: `["first item","second item"]|footnote` возвращает: `[^1]: first item` и т.д. - Для объектов: `{"First Note": "Content 1", "Second Note": "Content 2"}|footnote` возвращает: `[^first-note]: Content 1` и т.д. ### `fragment_link` Преобразует строки и массивы в ссылки на [текстовые фрагменты](https://developer.mozilla.org/en-US/docs/Web/URI/Fragment/Text_fragments). По умолчанию текстом ссылки является "link". - `highlights|fragment_link` возвращает `Highlight content [link](text-fragment-url)` - `highlights|fragment_link:"custom title"` возвращает `Highlight content [custom title](text-fragment-url)` ### `image` Преобразует строки, массивы или объекты в синтаксис изображений Markdown. - Для строк: `"image.jpg"|image:"alt text"` возвращает `![alt text](image.jpg)`. - Для массивов: `["image1.jpg","image2.jpg"]|image:"alt text"` возвращает массив строк изображений Markdown с одинаковым альтернативным текстом для всех изображений. - Для объектов: `{"image1.jpg": "Alt 1", "image2.jpg": "Alt 2"}|image` возвращает строки изображений Markdown с альтернативным текстом из ключей объекта. ### `link` Преобразует строки, массивы или объекты в синтаксис ссылок Markdown (не путать с [[Фильтры#`wikilink`|wikilink]]). - Для строк: `"url"|link:"author"` возвращает `[author](url)`. - Для массивов: `["url1","url2"]|link:"author"` возвращает массив ссылок Markdown с одинаковым текстом для всех ссылок. - Для объектов: `{"url1": "Author 1", "url2": "Author 2"}|link` возвращает ссылки Markdown с текстом, соответствующим ключам объекта. ### `list` Преобразует массив в список Markdown. - `list` для преобразования в маркированный список. - `list:task` для преобразования в список задач. - `list:numbered` для преобразования в нумерованный список. - `list:numbered-task` для преобразования в список задач с нумерацией. ### `table` Преобразует массив или массив объектов в [[Расширенный синтаксис форматирования#Таблицы|таблицу Markdown]]: - Для массива объектов ключи объекта используются в качестве заголовков. - Для массива массивов создаётся таблица, где каждый вложенный массив является строкой. - Для простого массива создаётся таблица с одним столбцом и заголовком "Value". - Пользовательские заголовки столбцов можно указать с помощью: `table:("Column 1", "Column 2", "Column 3")`. При использовании с простым массивом данные автоматически разбиваются на строки в соответствии с указанным количеством столбцов. ### `wikilink` Преобразует строки, массивы или объекты в синтаксис [[Связывание заметок|wiki-ссылок]] Obsidian. - Для строк: `"page"|wikilink` возвращает `[[page]]`. - Для строк с псевдонимом: `"page"|wikilink:"alias"` возвращает `[[page|alias]]`. - Для массивов: `["page1","page2"]|wikilink` возвращает массив wiki-ссылок без псевдонимов. - Для массивов с псевдонимом: `["page1","page2"]|wikilink:"alias"` возвращает массив wiki-ссылок с одинаковым псевдонимом для всех ссылок. - Для объектов: `{"page1": "alias1", "page2": "alias2"}|wikilink` возвращает wiki-ссылки, где ключи являются именами страниц, а значения — псевдонимами. ## Числа ### `calc` Выполняет базовые арифметические операции с числами. - Поддерживаемые операторы: `+`, `-`, `*`, `/`, `**` (или `^`) для возведения в степень. - Пример: `5|calc:"+10"` возвращает `15`. - Пример: `2|calc:"**3"` возвращает `8` (2 в кубе). - Возвращает исходную строку, если входные данные не являются числом. ### `length` Возвращает длину строк, массивов или количество ключей в объектах. - Для строк: `"hello"|length` возвращает `5`. - Для массивов: `["a","b","c"]|length` возвращает `3`. - Для объектов: `{"a":1,"b":2}|length` возвращает `2`. ### `round` Округляет число до ближайшего целого или до указанного количества знаков после запятой. - Без параметров: `3.7|round` возвращает `4`. - С указанием количества знаков: `3.14159|round:2` возвращает `3.14`. ## Обработка HTML Обработка HTML-содержимого и преобразование HTML в Markdown. Обратите внимание, что входная [[Переменные|переменная]] должна содержать HTML-содержимое, например, с использованием `{{fullHtml}}`, `{{contentHtml}}` или переменной `{{selectorHtml:}}`. ### `markdown` Преобразует строку в формат [[Obsidian Flavored Markdown]]. - Полезен в сочетании с переменными, возвращающими HTML, такими как `{{contentHtml}}`, `{{fullHtml}}` и переменные-селекторы вроде `{{selectorHtml:cssSelector}}`. ### `remove_attr` Удаляет только указанные HTML-атрибуты из тегов. - Пример: `"<div class="test" id="example">Content</div>"|remove_attr:"class"` возвращает `<div id="example">Content</div>`. - Несколько атрибутов: `{{fullHtml|remove_attr:("class,style,id")}}` ### `remove_html` Удаляет указанные HTML-элементы и их содержимое из строки. - Поддерживает имя тега, класс или id, например `{{fullHtml|remove_html:("img,.class-name,#element-id")}}` - Для удаления только HTML-тегов или атрибутов без удаления содержимого используйте фильтры `strip_tags` или `strip_attr`. ### `remove_tags` Удаляет только указанные HTML-теги. Содержимое тегов сохраняется. - Пример: `"<p>Hello <b>world</b>!</p>"|remove_tags:"b"` возвращает `"<p>Hello world!</p>"`. - Несколько тегов: `{{fullHtml|remove_tags:("a,em,strong")}}` ### `replace_tags` Заменяет HTML-теги, сохраняя содержимое и атрибуты тега. - `{{fullHtml|replace_tags:"strong":"h2"}}` заменяет все теги `<strong>` на `<h2>`. ### `strip_attr` Удаляет **все** HTML-атрибуты из строки. - Используйте `strip_attr:("class, id")`, чтобы сохранить определённые атрибуты. - Пример: `"<div class="test" id="example">Content</div>"|strip_attr:("class")` возвращает `<div id="example">Content</div>`. ### `strip_md` Удаляет **всё** форматирование Markdown и возвращает строку в виде обычного текста, например преобразуя `**text**` в `text`. - Превращает форматированный текст в неформатированный обычный текст, включая жирный, курсив, выделение, заголовки, код, блочные цитаты, таблицы, списки задач и wiki-ссылки. - Полностью удаляет таблицы, сноски, изображения и HTML-элементы. ### `strip_tags` Удаляет **все** HTML-теги из строки. Содержимое внутри тегов сохраняется. - Используйте `strip_tags:("p,strong,em")`, чтобы сохранить определённые теги. - Пример: `"<p>Hello <b>world</b>!</p>"|strip_tags:("b")` возвращает `Hello <b>world</b>!`. ## Массивы и объекты Обработка массивов и объектов. ### `first` Возвращает первый элемент массива в виде строки. - `["a","b","c"]|first` возвращает `"a"`. - Если входные данные не являются массивом, возвращает их без изменений. ### `join` Объединяет элементы массива в строку. - `["a","b","c"]|join` возвращает `"a,b,c"`. - Можно указать пользовательский разделитель: `["a","b","c"]|join:" "` возвращает `"a b c"`. Используйте `join:"\n"`, чтобы разделить элементы переносом строки. - Полезен после `split` или `slice`: `"a,b,c,d"|split:","|slice:1,3|join:" "` возвращает `"b c"`. ### `last` Возвращает последний элемент массива в виде строки. - `["a","b","c"]|last` возвращает `"c"`. - Если входные данные не являются массивом, возвращает их без изменений. ### `map` Применяет преобразование к каждому элементу массива с использованием синтаксиса `map:item => item.property` или `map:item => item.nested.property` для вложенных свойств. - `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => item.gem` возвращает `["obsidian", "amethyst"]`. - Используйте скобки для объектных литералов и сложных выражений: `map:item => ({key: value})`, например: `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => ({name: item.gem, color: item.color})` возвращает `[{name: "obsidian", color: "black"}, {name: "amethyst", color: "purple"}]`. Также поддерживаются строковые литералы, например `["rock", "pop"]|map:item => "genres/${item}"` возвращает `["genres/rock", "genres/pop"]`. Комбинируйте `map` с фильтром `template`, например `map:item => ({name: ${item.gem}, color: item.color})|template:"- ${name} is ${color}\n"`. Для строковых литералов в map используйте `${str}` в шаблоне, например `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"`. Примечание: встроенные фильтры нельзя использовать внутри `map`. Это означает, что, например, обрезку каждого значения массива нельзя выполнить с помощью `map`. ### `merge` Добавляет новые значения в массив. - Для массивов: `["a","b"]|merge:("c","d")` возвращает `["a","b","c","d"]`. - Одно значение: `["a","b"]|merge:"c"` возвращает `["a","b","c"]`. - Если входные данные не являются массивом, создаётся новый массив: `"a"|merge:("b","c")` возвращает `["a","b","c"]`. - Значения можно заключать в кавычки: `["a"]|merge:('b,"c,d",e')` возвращает `["a","b","c,d","e"]`. ### `nth` Сохраняет каждый n-й элемент массива, используя синтаксис в стиле CSS nth-child и групповые шаблоны. Все позиции начинаются с 1 (первый элемент — позиция 1). - `array|nth:3` сохраняет только 3-й элемент. - `array|nth:3n` сохраняет каждый 3-й элемент (3, 6, 9 и т.д.). - `array|nth:n+3` сохраняет 3-й и все последующие элементы. Синтаксис групповых шаблонов для повторяющихся структур: - `array|nth:1,2,3:5` сохраняет позиции 1, 2, 3 из каждой группы по 5 элементов. Пример: `[1,2,3,4,5,6,7,8,9,10]|nth:1,2,3:5` возвращает `[1,2,3,6,7,8]`. ### `object` Управляет данными объектов: - `object:array` преобразует объект в массив пар ключ-значение. - `object:keys` возвращает массив ключей объекта. - `object:values` возвращает массив значений объекта. - Пример: `{"a":1,"b":2}|object:array` возвращает `[["a",1],["b",2]]`. ### `slice` Извлекает часть строки или массива. - Для строк: `"hello"|slice:1,4` возвращает `"ell"`. - Для массивов: `["a","b","c","d"]|slice:1,3` возвращает `["b","c"]`. - Если указан только один параметр, извлечение выполняется от этого индекса до конца: `"hello"|slice:2` возвращает `"llo"`. - Отрицательные индексы отсчитываются с конца: `"hello"|slice:-3` возвращает `"llo"`. - Второй параметр является исключающим: `"hello"|slice:1,4` включает символы с индексами 1, 2 и 3. - Отрицательный второй параметр исключает элементы с конца: `"hello"|slice:0,-2` возвращает `"hel"`. ### `split` Разделяет строку на массив подстрок. - `"a,b,c"|split:","` возвращает `["a","b","c"]`. - `"hello world"|split:" "` возвращает `["hello","world"]`. - Если разделитель не указан, строка разбивается по каждому символу: `"hello"|split` возвращает `["h","e","l","l","o"]`. - В качестве разделителей можно использовать регулярные выражения: `"a1b2c3"|split:[0-9]` возвращает `["a","b","c"]`. ### `template` Применяет строку шаблона к объекту или массиву объектов с использованием синтаксиса `object|template:"Template with ${variable}"`. - Доступ к вложенным свойствам: `{"gem":{"name":"Obsidian"}}|template:"${gem.name}"` возвращает `"Obsidian"`. - Для объектов: `{"gem":"obsidian","hardness":5}|template:"${gem} has a hardness of ${hardness}"` возвращает `"obsidian has a hardness of 5"`. - Для массивов: `[{"gem":"obsidian","hardness":5},{"gem":"amethyst","hardness":7}]|template:"- ${gem} has a hardness of ${hardness}\n"` возвращает форматированный список. Работает со строковыми литералами из `map` с использованием `${str}`: - Пример: `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"` возвращает форматированный список. ### `unique` Удаляет дублирующиеся значения из массивов и объектов. - Для массивов примитивов: `[1,2,2,3,3]|unique` возвращает `[1,2,3]`. - Для массивов объектов: `[{"a":1},{"b":2},{"a":1}]|unique` возвращает `[{"a":1},{"b":2}]`. - Для объектов удаляет свойства с дублирующимися значениями, сохраняя ключ последнего вхождения. - Для строк возвращает входные данные без изменений.