Формулы позволяют производить различные вычисления и преобразования данных и выводить результат как в базах данных так и в некоторых других частях системы Yonote.
Синтаксис YFormula - это упрощенный JavaScript код, многие операции из этого языка, такие как конкатинация, математические операции, тернарные выражения и тд можно использоваться в YFormula.
Строковые литералы (или проще - строки) всегда записываются с применением одинарных или двойных кавычек: "Привет Мир!” или ‘Привет Мир!‘
Конкатинация (сложение) строк осуществляется через символ +
'Привет' + 'Мир' = 'Привет Мир!'
Тем же способом, но уже без кавычек, выполняются математические операции:
1 + 1 = 2
Условия можно записывать двумя способами, используя if или с помощью тернарных операторов.
В случае если condition возвращает истину (true) или больше или меньше 0 - возвращается expression, иначе expression2 (если не указан - вернется false)
На пример:
if(10 > 5, 'Вернем текст') = 'Вернем текст'
if(5 > 10, 'Текст не вернется') = false
if(prop('Числа') > 0, 'Больше 0', 'Меньше или равно 0') = 'Меньше или равно 0'
Формулы в Yonote могут работать с различными свойствами и функциями. Ниже приведен список доступных свойств и функций.
Формулы поддерживают почти все типы свойств. Обратите внимание, что типы формул отличаются от типов свойств.
| Название свойства | Пример формулы |
|---|---|
| Заголовок | prop("Title") prop("Title").length() |
| Текст | prop("Text") prop("Text").length() |
| Выбор | prop("Priority") == "High" |
| Множественный выбор | prop("Tags").length() prop("Tags").includes("Finance") |
| Чекбокс | prop("Checkbox") == true!prop("Checkbox") == false |
| Электронная почта, URL, номер телефона | !empty(prop("Phone"))!empty(prop("Email"))link("Call", "tel:" + prop("Phone")) |
| Уникальный идентификатор | prop("Task ID").split("-").first()prop("Task ID").split("-").last() |
| Создано, изменено | prop("Created By").name()prop("Created By").email() |
| Человек | prop("Person")prop("Person").name()prop("Person").map(current.email()) |
| Дата, время создания, время последнего изменения | prop("Due Date") > now()dateBetween(prop("Birthday"), now(), "days") |
| Число | prop("Number") / 2pi() * prop("Radius") ^ 2 |
| Связь | prop("Tasks").length() |
| Сводка | prop("Purchases").length()prop("Average cost") * 12 |
Встроенные функции — это специальные символы и значения, встроенные в язык для обозначения вычислений.
| Оператор | Описание | Пример |
|---|---|---|
+, -, *, % |
Сложение, вычитание, умножение, деление по модулю | 2 * pi()"hello" + "world" |
| Значение | Описание | Пример |
|---|---|---|
true, false |
Логические значения | truefalse |
| Оператор | Описание | Пример |
|---|---|---|
==, >, >=, <, <= |
Сравнение | 123 == 123"Yonote" == "Motion" |
| Оператор | Описание | Пример |
|---|---|---|
&& |
Оператор И | true && false = false |
|| |
Оператор ИЛИ | true || false = true |
! |
Оператор отрицание (НЕ) | !true = false |
| Оператор | Описание | Пример |
|---|---|---|
? : |
Тернарный оператор | X ? Y : Z эквивалентно ifs(X, Y, Z) |
Формулы Yonote поддерживают следующие функции.
| Название | Описание | Пример |
|---|---|---|
if |
Возвращает первое значение, если условие истинно, иначе возвращает false. |
if(true, 1) = 1prop("Checked") == true ? "Complete" : "Incomplete" |
empty |
Возвращает true, если значение пустое. |
empty(0) = trueempty([]) = true |
length |
Возвращает длину текста или списка. | length(“hello“) = 5 "hello".length() = 5[1, 2, 3].length() = 3 |
substring |
Возвращает подстроку текста. | substring("Yonote", 0, 3) = “Yon“substring("Yonote", 3) = “ote“ |
contains |
Возвращает true, если строка поиска присутствует в значении. |
contains("Yonote", "yo") = true |
test |
Возвращает true, если значение соответствует регулярному выражению. |
test("Yonote", "Yo") = truetest("Yonote", "\\d") = false |
match |
Возвращает все совпадения регулярного выражения в виде списка. | match("Yonote Yonote", "Yo")match("Yonote 123 Yonote 456", "\\d+") |
replace |
Заменяет первое совпадение регулярного выражения на новое значение. | replace("Yonote Yonote", "Yo", "Mo") |
replaceAll |
Заменяет все совпадения регулярного выражения на новое значение. | replaceAll("Yonote Yonote", "Yo", "Mo") replaceAll("Yonote 123", "\\d", "") |
lower |
Преобразует текст в нижний регистр. | lower("YONOTE") |
upper |
Преобразует текст в верхний регистр. | upper("yonote") |
style |
Добавляет стили и цвета к тексту. | style("Yonote", "b", "u")style("Yonote", "blue", "gray_background") |
unstyle |
Удаляет стили все форматирования из текста. | unstyle() |
format |
Возвращает значение в виде текста. | format(1234)format(now()) |
add |
Возвращает сумму двух чисел. | add(5, 10)5 + 10 |
subtract |
Возвращает разность двух чисел. | subtract(5, 10)5 - 10 |
multiply |
Возвращает произведение двух чисел. | multiply(5, 10)5 * 10 |
mod |
Возвращает остаток от деления. | mod(5, 10)5 % 10 |
pow |
Возвращает результат возведения числа в степень. | pow(5, 10)5 ^ 10 |
divide |
Возвращает частное двух чисел. | divide(5, 10) <br> 5 / 10 |
min |
Возвращает наименьшее число из аргументов. | min(1, 2, 3) <br> min([1, 2, 3]) |
max |
Возвращает наибольшее число из аргументов. | max(1, 2, 3) <br> max([1, 2, 3]) |
sum |
Возвращает сумму аргументов. | sum(1, 2, 3) <br> sum([1, 2, 3], 4, 5) |
median |
Возвращает медиану аргументов. | median(1, 2, 4) <br> median([1, 2, 3], 4) |
mean |
Возвращает среднее арифметическое аргументов. | mean(1, 2, 3) <br> mean([1, 2, 3], 4, 5) |
abs |
Возвращает абсолютное значение числа. | abs(10) <br> abs(-10) |
round |
Округляет число до ближайшего целого. | round(0.4) <br> round(1.234, 2) |
ceil |
Возвращает наименьшее целое число, большее или равное числу. | ceil(0.4) <br> ceil(-0.6) |
floor |
Возвращает наибольшее целое число, меньшее или равное числу. | floor(0.4) <br> floor(-0.6) |
sqrt |
Возвращает квадратный корень числа. | sqrt(4) <br> sqrt(7) |
cbrt |
Возвращает кубический корень числа. | cbrt(9) <br> cbrt(64) |
exp |
Возвращает e^x, где x — аргумент. | exp(1) <br> exp(-1) |
ln |
Возвращает натуральный логарифм числа. | ln(2.718281828459045) <br> ln(10) |
log10 |
Возвращает логарифм числа по основанию 10. | log10(10) <br> log10(100000) |
log2 |
Возвращает логарифм числа по основанию 2. | log2(4) <br> log2(1024) |
sign |
Возвращает знак числа. | sign(-10) <br> sign(10) |
pi |
Возвращает число π. | pi() |
e |
Возвращает число e. | e() |
toNumber |
Преобразует текст в число. | toNumber("2") <br> toNumber(now()) |
now |
Возвращает текущую дату и время. | now() |
today |
Возвращает текущую дату без времени. | today() |
minute |
Возвращает минуты из даты. | minute(parseDate("2023-07-10T17:35Z")) |
hour |
Возвращает часы из даты. | hour(parseDate("2023-07-10T17:35Z")) |
day |
Возвращает день недели из даты. | day(parseDate("2023-07-10T17:35Z")) |
date |
Возвращает день месяца из даты. | date(parseDate("2023-07-10T17:35Z")) |
week |
Возвращает номер недели в году. | week(parseDate("2023-01-02")) |
month |
Возвращает месяц из даты. | month(parseDate("2023-07-10T17:35Z")) |
year |
Возвращает год из даты. | year(now()) |
dateAdd |
Добавляет время к дате. | dateAdd(now(), 1, "days") <br> dateAdd(now(), 2, "months") |
dateSubtract |
Вычитает время из даты. | dateSubtract(now(), 1, "days") <br> dateSubtract(now(), 2, "months") |
dateBetween |
Возвращает разницу между двумя датами. | dateBetween(now(), parseDate("2022-09-07"), "days") dateBetween(parseDate("2030-01-01"), now(), "years") |
dateRange |
Возвращает диапазон дат. | dateRange(prop("Start Date"), prop("End Date")) |
dateStart |
Возвращает начало диапазона дат. | dateStart(prop("Date Range")) |
dateEnd |
Возвращает конец диапазона дат. | dateEnd(prop("Date range")) |
timestamp |
Возвращает текущий Unix-таймстамп. | timestamp(now()) |
fromTimestamp |
Возвращает дату из Unix-таймстампа. | fromTimestamp(1689024900000) |
formatDate |
Форматирует дату по заданному шаблону. | formatDate(now(), "MMMM D, Y") <br> formatDate(now(), "MM/DD/YYYY") |
parseDate |
Возвращает дату, разобранную по стандарту ISO 8601. | parseDate("2022-01-01") <br> parseDate("2022-01-01T00:00Z") |
name |
Возвращает имя человека. | name(prop("Created By")) prop("Pioneers").map(name(current)).join(", ") |
email |
Возвращает адрес электронной почты человека. | email(prop("Created By")) prop("People").map(email(current)).join(", ") |
at |
Возвращает значение по индексу в списке. | at([1, 2, 3], 1) |
first |
Возвращает первый элемент списка. | first([1, 2, 3]) |
last |
Возвращает последний элемент списка. | last([1, 2, 3]) |
slice |
Возвращает часть списка. | slice([1, 2, 3], 1, 2) <br> slice(["a", "b", "c"], 1) |
concat |
Возвращает объединение списков. | concat([1, 2], [3, 4]) <br> concat(["a", "b"], ["c", "d"]) |
sort |
Возвращает отсортированный список. | |
reverse |
Возвращает список в обратном порядке. | |
join |
Возвращает строку, объединенную из списка. | |
split |
Возвращает список, разделенный по разделителю. | split("apple,pear,orange", ",") |
unique |
Возвращает список уникальных значений. | unique([1, 1, 2]) |
includes |
Возвращает true, если список содержит значение. |
includes(["a", "b", "c"], "b") <br> includes([1, 2, 3], 4) |
find |
Возвращает первый элемент, удовлетворяющий условию. | find(["a", "b", "c"], current == "b") <br> find([1, 2, 3], current > 100) |
findIndex |
Возвращает индекс первого элемента, удовлетворяющего условию. | findIndex(["a", "b", "c"], current == "b") <br> findIndex([1, 2, 3], current > 100) |
filter |
Возвращает элементы списка, удовлетворяющие условию. | filter([1, 2, 3], current > 1) <br> filter(["a", "b", "c"], current == "a") |
some |
Возвращает true, если хотя бы один элемент удовлетворяет условию. |
some([1, 2, 3], current == 2) <br> some(["a", "b", "c"], current.length > 2) |
every |
Возвращает true, если все элементы удовлетворяют условию. |
every([1, 2, 3], current > 0) <br> every(["a", "b", "c"], current == "b") |
map |
Возвращает список, преобразованный по условию. | map([1, 2, 3], current + 1) <br> map([1, 2, 3], current + index) |
flat |
Возвращает упрощенный список. | flat([1, 2, 3]) <br> flat([[1, 2], [3, 4]]) |
id |
Возвращает идентификатор страницы. | id() <br> id(prop("Relation").first()) |
equal |
Возвращает true, если значения равны. |
equal(1, 1) <br> "a" == "b" |
unequal |
Возвращает true, если значения не равны. |
unequal(1, 2) <br> "a" != "a" |
| Название | Описание | Пример |
|---|---|---|
makeArray(from, to?) |
Возвращает массив из указанного диапазона | |
toJson(data) |
Конвертирует переменную в JSON | |
fromJson(data) |
Парсит JSON в объект/строку/число и тд | |
icon(symbol) |
Вставляет эмодзи или иконку | |
$staticПодробнее |
Статическая переменная (только в базах данных) | |
Далее описаны свойства и функции, которые пока находятся в разработке или работают не стабильно, пожалуйста не используйте их в своих формулах, пока они находятся в данном разделе:
let |
Присваивает значение переменной и вычисляет выражение. | let(person, "Alan", "Hello, " + person + "!") let(radius, 4, round(pi() * radius ^ 2)) |
lets |
Присваивает значения нескольким переменным и вычисляет выражение. | lets(a, "Hello", b, "world", a + " " + b) lets(base, 3, height, 8, base * height / 2) |
repeat |
Повторяет текст заданное количество раз. | repeat("0", 4)repeat("~=", 10) |
link |
Создает гиперссылку из текста и URL. | link("Yonote", "https://yonote.ru") |
В YFormula нельзя: