تُستخدم الدوال في [[مقدمة إلى قواعد البيانات|قواعد البيانات]] لمعالجة البيانات من [[الخصائص|الخصائص]] في [[العروض#التصفية|التصفية]] و[[المعادلات|المعادلات]]. راجع مرجع [[صيغة قواعد البيانات|صياغة قواعد البيانات]] لتعلم المزيد حول كيفية استخدام الدوال.
بخلاف الدوال [[الدوال#عامة|العامة]]، تعتمد معظم الدوال على نوع القيمة التي تريد تعديلها:
- [[الدوال#أي نوع|أي نوع]]
- [[الدوال#تاريخ|تاريخ]]
- [[الدوال#نص|نص]]
- [[الدوال#رقم|رقم]]
- [[الدوال#قائمة|قائمة]]
- [[الدوال#رابط|رابط]]
- [[الدوال#ملف|ملف]]
- [[الدوال#كائن|كائن]]
- [[الدوال#تعبير نمطي|تعبير نمطي]]
## عامة
تُستخدم الدوال العامة بدون نوع محدد.
### `escapeHTML()`
`escapeHTML(html: string): string`
- يُهرّب الأحرف الخاصة في نص لجعله آمنًا للتضمين في HTML.
### `date()`
`date(date: string): date`
- `date(string): date` تحلل النص المقدم وتُرجع كائن تاريخ.
- يجب أن يكون نص `date` بتنسيق `YYYY-MM-DD HH:mm:ss`.
### `duration()`
`duration(value: string): duration`
- تحلل نصًا كمدة زمنية. راجع [[صيغة قواعد البيانات#العمليات الحسابية على التواريخ|قسم العمليات الحسابية على التواريخ]] لمعرفة تنسيق نص `value`.
- لا تحتاج المدد الزمنية إلى تحليل صريح عند إجراء عمليات حسابية على التواريخ (مثلًا، `now() + '1d'`)، لكنها تحتاج ذلك عند إجراء عمليات حسابية على المدد الزمنية (مثلًا، `now() + (duration('1d') * 2)`).
- عند إجراء عمليات حسابية على المدد الزمنية مع قيم عددية، يجب أن تكون المدة الزمنية على اليسار. مثلًا `duration('5h') * 2`، بدلًا من `2 * duration('5h')`.
### `file()`
`file(path: string | file | url): file`
- تُرجع كائن ملف للملف أو المسار المعطى.
- مثال: `file(link("[[filename]]"))` أو `file("path to file")`.
### `html()`
`html(html: string): html`
- تحول نصًا إلى مقتطف شيفرة مصدرية يُعرض كـ HTML.
### `if()`
`if(condition: any, trueResult: any, falseResult?: any): any`
- `condition` هو الشرط المراد تقييمه.
- `trueResult` هو الناتج إذا كان الشرط صحيحًا.
- `falseResult` هو الناتج الاختياري إذا كان الشرط خاطئًا. إذا لم يُعطَ، يُفترض أنه `null`.
- تُرجع `trueResult` إذا كان `condition` صحيحًا، أو قيمة صادقة، أو `falseResult` في الحالات الأخرى.
- مثال: `if(isModified, "Modified", "Unmodified")`
### `image()`
`image(path: string | file | url): image`
- تُرجع كائن صورة يعرض الصورة في العرض.
- مثال: `image(image-property)` أو `image("https://obsidian.md/images/obsidian-logo-gradient.svg")`
### `icon()`
`icon(name: string): icon`
- تُرجع قيمة تُعرض كأيقونة في العرض. يجب أن يتطابق اسم الأيقونة مع أيقونة Lucide مدعومة.
- مثال: `icon("arrow-right")`.
### `link()`
`link(path: string | file, display?: value): Link`
- تحلل نص `path` وتُرجع كائن رابط يُعرض كرابط إلى المسار المعطى.
- يمكنك اختياريًا تقديم معامل `display` لتغيير النص الذي يعرضه الرابط.
### `list()`
`list(element: any): List`
- إذا كان العنصر المقدم قائمة، تُرجعه بدون تعديل.
- وإلا، تغلف العنصر `element` المقدم في قائمة، مما يُنشئ قائمة بعنصر واحد.
- يمكن أن تكون هذه الدالة مفيدة عندما تحتوي خاصية على مزيج من النصوص أو القوائم عبر الخزنة.
- مثال: `list("value")` تُرجع `["value"]`.
### `max()`
`max(value1: number, value2: number...): number`
- تُرجع أكبر قيمة من جميع الأرقام المقدمة.
### `min()`
`min(value1: number, value2: number...): number`
- تُرجع أصغر قيمة من جميع الأرقام المقدمة.
### `now()`
`now(): date`
- `now()` تُرجع كائن تاريخ يمثل اللحظة الحالية.
### `number()`
`number(input: any): number`
- تحاول إرجاع القيمة المقدمة كرقم.
- كائنات التاريخ تُرجع كميلي ثانية منذ حقبة يونكس.
- القيم المنطقية تُرجع 1 أو 0.
- النصوص تُحلل إلى رقم وتُرجع خطأ إذا كانت النتيجة غير صالحة.
- مثال، `number("3.4")` تُرجع `3.4`.
### `duration()`
`duration(value: string): duration`
- تحلل نصًا كمدة زمنية. راجع [[صيغة قواعد البيانات#العمليات الحسابية على التواريخ|قسم العمليات الحسابية على التواريخ]] لمعرفة تنسيق نص `value`.
- لا تحتاج المدد الزمنية إلى تحليل صريح عند إجراء عمليات حسابية على التواريخ (مثلًا، `now() + '1d'`)، لكنها تحتاج ذلك عند إجراء عمليات حسابية على المدد الزمنية (مثلًا، `now() + (duration('1d') * 2)`).
- عند إجراء عمليات حسابية على المدد الزمنية مع قيم عددية، يجب أن تكون المدة الزمنية على اليسار. مثلًا `duration('5h') * 2`، بدلًا من `2 * duration('5h')`.
### `today()`
`today(): date`
- `today()` تُرجع كائن تاريخ يمثل التاريخ الحالي. يُضبط جزء الوقت على صفر.
### `random()`
`random(): number`
- `random()` تُرجع رقمًا عشوائيًا بين 0 و1.
- يتم تحديث توليد الأرقام عند تحميل أي عرض. التنقل بين العروض يغير الرقم العشوائي.
## أي نوع
دوال يمكنك استخدامها مع أي قيمة. يشمل ذلك النصوص (مثل `"hello"`)، والأرقام (مثل `42`)، والقوائم (مثل `[1,2,3]`)، والكائنات، والمزيد.
### `isTruthy()`
`any.isTruthy(): boolean`
- تُرجع القيمة محولة إلى قيمة منطقية.
- مثال: `1.isTruthy()` تُرجع `true`.
### `isType()`
`any.isType(type: string): boolean`
- تُرجع true إذا كانت القيمة من النوع المقدم.
- مثال: `"example".isType("string")` و `true.isType("boolean")` كلاهما يُرجع true.
### `toString()`
`any.toString(): string`
- تُرجع التمثيل النصي لأي قيمة.
- مثال: `123.toString()` تُرجع `"123"`.
## تاريخ
دوال يمكنك استخدامها مع التاريخ والوقت مثل `date("2025-05-27")`. يمكن إجراء مقارنات التواريخ باستخدام [[صيغة قواعد البيانات#العمليات الحسابية على التواريخ|العمليات الحسابية على التواريخ]].
### الحقول
الحقول التالية متاحة للتواريخ:
| الحقل | النوع | الوصف |
| ------------------ | -------- | ------------------------------ |
| `date.year` | `number` | سنة التاريخ |
| `date.month` | `number` | شهر التاريخ (1–12) |
| `date.day` | `number` | يوم الشهر |
| `date.hour` | `number` | الساعة (0–23) |
| `date.minute` | `number` | الدقيقة (0–59) |
| `date.second` | `number` | الثانية (0–59) |
| `date.millisecond` | `number` | الميلي ثانية (0–999) |
### `date()`
`date.date(): date`
- تُرجع كائن تاريخ مع إزالة الوقت.
- مثال: `now().date().format("YYYY-MM-DD HH:mm:ss")` تُرجع نصًا مثل "2025-12-31 00:00:00"
### `format()`
`date.format(format: string): string`
- `format` هو نص التنسيق (مثل `"YYYY-MM-DD"`).
- تُرجع التاريخ منسقًا وفقًا لنص تنسيق Moment.js.
- مثال: `date.format("YYYY-MM-DD")` تُرجع `"2025-05-27"`.
### `time()`
`date.time(): string`
- تُرجع الوقت.
- مثال: `now().time()` تُرجع نصًا مثل "23:59:59"
### `relative()`
`date.relative(): string`
- تُرجع مقارنة مقروءة للتاريخ مع التاريخ والوقت الحاليين.
- مثال: `file.mtime.relative()` تُرجع قيمة مثل `3 days ago`.
### `isEmpty()`
`date.isEmpty(): boolean`
- تُرجع false.
## نص
دوال يمكنك استخدامها مع تسلسل من الأحرف مثل `"hello"`.
### الحقول
| الحقل | النوع | الوصف |
| --------------- | -------- | ------------------------------ |
| `string.length` | `number` | عدد الأحرف في النص |
### `contains()`
`string.contains(value: string): boolean`
- `value` هو النص الفرعي المراد البحث عنه.
- تُرجع true إذا كان النص يحتوي على `value`.
- مثال: `"hello".contains("ell")` تُرجع `true`.
### `containsAll()`
`string.containsAll(...values: string): boolean`
- `values` هي نص فرعي واحد أو أكثر للبحث عنها.
- تُرجع true إذا كان النص يحتوي على جميع `values`.
- مثال: `"hello".containsAll("h", "e")` تُرجع `true`.
### `containsAny()`
`string.containsAny(...values: string): boolean`
- `values` هي نص فرعي واحد أو أكثر للبحث عنها.
- تُرجع true إذا كان النص يحتوي على واحد على الأقل من `values`.
- مثال: `"hello".containsAny("x", "y", "e")` تُرجع `true`.
### `endsWith()`
`string.endsWith(query: string): boolean`
- `query` هو النص المراد التحقق منه في النهاية.
- تُرجع true إذا كان هذا النص ينتهي بـ `query`.
- مثال: `"hello".endsWith("lo")` تُرجع `true`.
### `isEmpty()`
`string.isEmpty(): boolean`
- تُرجع true إذا كان النص لا يحتوي على أحرف، أو غير موجود.
- مثال: `"Hello world".isEmpty()` تُرجع `false`.
- مثال: `"".isEmpty()` تُرجع `true`.
### `lower()`
`string.lower(): string`
- تُرجع النص محولًا إلى أحرف صغيرة.
### `replace()`
`string.replace(pattern: string | Regexp, replacement: string): string`
- `pattern` هي القيمة المراد البحث عنها في النص الهدف.
- `replacement` هي القيمة التي تحل محل الأنماط الموجودة.
- إذا كان `pattern` نصًا، سيتم استبدال جميع التكرارات.
- إذا كان `pattern` تعبيرًا نمطيًا، يحدد العلم `g` ما إذا كان سيتم استبدال التكرار الأول فقط أو جميع التكرارات.
- مثال: `""a:b:c:d".replace(/:/, "-")` تُرجع `"a-b,c,d"`، بينما `"a:b:c:d".replace(/:/g, "-")` تُرجع `"a-b-c-d"`.
### `repeat()`
`string.repeat(count: number): string`
- `count` هو عدد مرات تكرار النص.
- مثال: `"123".repeat(2)` تُرجع `"123123"`
### `reverse()`
`string.reverse(): string`
- تعكس النص.
- مثال: `"hello".reverse()` تُرجع `"olleh"`.
### `slice()`
`string.slice(start: number, end?: number): string`
- `start` هو فهرس البداية الشامل.
- `end` هو فهرس النهاية الحصري الاختياري.
- تُرجع نصًا فرعيًا من `start` (شامل) إلى `end` (حصري).
- مثال: `"hello".slice(1, 4)` تُرجع `"ell"`.
- إذا تم حذف `end`، يتم القص حتى نهاية النص.
### `split()`
`string.split(separator: string | Regexp, n?: number): list`
- `separator` هو الفاصل لتقسيم النص.
- `n` هو رقم اختياري. إذا تم تقديمه، ستحتوي النتيجة على أول `n` عناصر.
- تُرجع قائمة من النصوص الفرعية.
- مثال: `"a,b,c,d".split(",", 3)` أو `"a,b,c,d".split(/,/, 3)` تُرجع `["a", "b", "c"]`.
### `startsWith()`
`string.startsWith(query: string): boolean`
- `query` هو النص المراد التحقق منه في البداية.
- تُرجع true إذا كان هذا النص يبدأ بـ `query`.
- مثال: `"hello".startsWith("he")` تُرجع `true`.
### `title()`
`string.title(): string`
- تحول النص إلى حالة العنوان (الحرف الأول من كل كلمة كبير).
- مثال: `"hello world".title()` تُرجع `"Hello World"`.
### `trim()`
`string.trim(): string`
- تزيل المسافات البيضاء من طرفي النص.
- مثال: `" hi ".trim()` تُرجع `"hi"`.
## رقم
دوال يمكنك استخدامها مع القيم الرقمية مثل `42`، `3.14`.
### `abs()`
`number.abs(): number`
- تُرجع القيمة المطلقة للرقم.
- مثال: `(-5).abs()` تُرجع `5`.
### `ceil()`
`number.ceil(): number`
- تقرب الرقم لأعلى إلى أقرب عدد صحيح.
- مثال: `(2.1).ceil()` تُرجع `3`.
### `floor()`
`number.floor(): number`
- تقرب الرقم لأسفل إلى أقرب عدد صحيح.
- مثال: `(2.9).floor()` تُرجع `2`.
### `isEmpty()`
`number.isEmpty(): boolean`
- تُرجع true إذا كان الرقم غير موجود.
- مثال: `5.isEmpty()` تُرجع `false`.
### `round()`
`number.round(digits: number): number`
- تقرب الرقم إلى أقرب عدد صحيح.
- اختياريًا، قدم معامل `digits` للتقريب إلى عدد معين من المنازل العشرية.
- مثال: `(2.5).round()` تُرجع `3`، و `(2.3333).round(2)` تُرجع `2.33`.
### `toFixed()`
`number.toFixed(precision: number): string`
- `precision` هو عدد المنازل العشرية.
- تُرجع نصًا يحتوي على الرقم بتنسيق النقطة الثابتة.
- مثال: `(3.14159).toFixed(2)` تُرجع `"3.14"`.
## قائمة
دوال يمكنك استخدامها مع قائمة مرتبة من العناصر مثل `[1, 2, 3]`.
### الحقول
| الحقل | النوع | الوصف |
| ------------- | -------- | ------------------------------ |
| `list.length` | `number` | عدد العناصر في القائمة |
### `contains()`
`list.contains(value: any): boolean`
- `value` هو العنصر المراد البحث عنه.
- تُرجع true إذا كانت القائمة تحتوي على `value`.
- مثال: `[1,2,3].contains(2)` تُرجع `true`.
### `containsAll()`
`list.containsAll(...values: any): boolean`
- `values` هي عنصر واحد أو أكثر للبحث عنها.
- تُرجع true إذا كانت القائمة تحتوي على جميع `values`.
- مثال: `[1,2,3].containsAll(2,3)` تُرجع `true`.
### `containsAny()`
`list.containsAny(...values: any): boolean`
- `values` هي عنصر واحد أو أكثر للبحث عنها.
- تُرجع true إذا كانت القائمة تحتوي على واحد على الأقل من `values`.
- مثال: `[1,2,3].containsAny(3,4)` تُرجع `true`.
### `filter()`
`list.filter(value: Boolean): list`
- تصفي عناصر هذه القائمة عن طريق استدعاء دالة تصفية، تستخدم المتغيرات `index` و `value`، وتُرجع قيمة منطقية لتحديد ما إذا كان يجب الاحتفاظ بالعنصر.
- `value` هي قيمة عنصر في القائمة.
- `index` هو فهرس القيمة الحالية.
- مثال: `[1,2,3,4].filter(value > 2)` تُرجع `[3,4]`.
### `flat()`
`list.flat(): list`
- تسطح القوائم المتداخلة إلى قائمة واحدة.
- مثال: `[1,[2,3]].flat()` تُرجع `[1,2,3]`.
### `isEmpty()`
`list.isEmpty(): boolean`
- تُرجع true إذا كانت القائمة لا تحتوي على عناصر.
- مثال: `[1,2,3].isEmpty()` تُرجع `false`.
### `join()`
`list.join(separator: string): string`
- `separator` هو النص المراد إدراجه بين العناصر.
- تجمع جميع عناصر القائمة في نص واحد.
- مثال: `[1,2,3].join(",")` تُرجع `"1,2,3"`.
### `map()`
`list.map(value: Any): list`
- تحول كل عنصر من هذه القائمة عن طريق استدعاء دالة تحويل، تستخدم المتغيرات `index` و `value`، وتُرجع القيمة الجديدة التي ستوضع في القائمة.
- `value` هي قيمة عنصر في القائمة.
- `index` هو فهرس القيمة الحالية.
- مثال: `[1,2,3,4].map(value + 1)` تُرجع `[2,3,4,5]`.
### `reduce()`
`list.reduce(expression: Any, acc: Any): Any`
- تختزل عناصر هذه القائمة إلى قيمة واحدة عن طريق تشغيل تعبير لكل عنصر. يمكن للتعبير استخدام المتغيرات `index` و `value` و `acc` (المراكم)، ويجب أن يُرجع قيمة المراكم التالية.
- `expression` يُقيّم لكل عنصر في القائمة.
- `value` هي قيمة العنصر الحالي في القائمة.
- `index` هو فهرس العنصر الحالي.
- `acc` هي القيمة المتراكمة حتى الآن.
- مثال (مجموع): `[1,2,3].reduce(acc + value, 0)` تُرجع `6`.
- مثال (أكبر قيمة): `values.filter(value.isType("number")).reduce(if(acc == null || value > acc, value, acc), null)` تُرجع أكبر رقم، أو `null` إذا لم يوجد.
### `reverse()`
`list.reverse(): list`
- تعكس القائمة في مكانها.
- مثال: `[1,2,3].reverse()` تُرجع `[3,2,1]`.
### `slice()`
`list.slice(start: number, end?: number): list`
- `start` هو فهرس البداية الشامل.
- `end` هو فهرس النهاية الحصري الاختياري.
- تُرجع نسخة سطحية من جزء من القائمة من `start` (شامل) إلى `end` (حصري).
- مثال: `[1,2,3,4].slice(1,3)` تُرجع `[2,3]`.
- إذا تم حذف `end`، يتم القص حتى نهاية القائمة.
### `sort()`
`list.sort(): list`
- تفرز عناصر القائمة من الأصغر إلى الأكبر.
- مثال: `[3, 1, 2].sort()` تُرجع `[1, 2, 3]`.
- مثال: `["c", "a", "b"].sort()` تُرجع `["a", "b", "c"]`.
### `unique()`
`list.unique(): list`
- تزيل العناصر المكررة.
- مثال: `[1,2,2,3].unique()` تُرجع `[1,2,3]`.
## رابط
دوال يمكنك استخدامها على رابط. يمكن إنشاء الروابط من ملف (`file.asLink()`) أو مسار (`link("path")`).
### `asFile()`
`link.asFile(): file`
- تُرجع كائن ملف إذا كان الرابط يشير إلى ملف محلي صالح.
- مثال: `link("[[filename]]").asFile()`
### `linksTo()`
`link.linksTo(file): boolean`
- تُرجع ما إذا كان الملف الذي يمثله `link` يحتوي على رابط إلى `file`.
## ملف
دوال يمكنك استخدامها مع الملفات في الخزنة.
### الحقول
الحقول التالية متاحة للملفات:
| الحقل | النوع | الوصف |
| ----------------- | -------- | ------------------------------------------------------- |
| `file.name` | `string` | اسم هذا الملف. |
| `file.basename` | `string` | اسم هذا الملف بدون امتداد الملف. |
| `file.path` | `string` | المسار الكامل لهذا الملف، نسبةً إلى جذر الخزنة. |
| `file.folder` | `string` | المسار الكامل للمجلد الأب. |
| `file.ext` | `string` | امتداد الملف لهذا الملف. |
| `file.size` | `number` | حجم هذا الملف، بالبايت. |
| `file.properties` | `object` | خصائص الملاحظة لهذا الملف. |
| `file.tags` | `list` | وسوم هذا الملف. يشمل الوسوم المضمنة في النص. |
| `file.links` | `list` | الروابط الداخلية داخل هذا الملف. |
| `file.ctime` | `date` | الطابع الزمني لوقت إنشاء هذا الملف. |
| `file.mtime` | `date` | الطابع الزمني لآخر تعديل على هذا الملف. |
### `asLink()`
`file.asLink(display?: string): Link`
- `display` نص عرض اختياري للرابط.
- تُرجع كائن رابط يُعرض كرابط فعّال.
- مثال: `file.asLink()`
### `hasLink()`
`file.hasLink(otherFile: file | string): boolean`
- `otherFile` هو كائن ملف آخر أو مسار نصي للتحقق منه.
- تُرجع true إذا كان `file` يرتبط بـ `otherFile`.
- مثال: `file.hasLink(otherFile)` تُرجع `true` إذا كان هناك رابط من `file` إلى `otherFile`.
### `hasProperty()`
`file.hasProperty(name: string): boolean`
- تُرجع true إذا كانت الملاحظة تحتوي على خاصية الملف المعطاة.
### `hasTag()`
`file.hasTag(...values: string): boolean`
- `values` هي اسم وسم واحد أو أكثر.
- تُرجع true إذا كان الملف يحتوي على أي من الوسوم في `values`.
- مثال: `file.hasTag("tag1", "tag2")` تُرجع `true` إذا كان الملف يحتوي على الوسم `#tag1` أو `#tag2`. يشمل أيضًا أي [[الوسوم#الوسوم المتداخلة|وسوم متداخلة]]، مثل `#tag1/a` أو `#tag2/b`.
### `inFolder()`
`file.inFolder(folder: string): boolean`
- `folder` هو اسم المجلد المراد التحقق منه.
- تُرجع true إذا كان الملف في المجلد المحدد أو أحد مجلداته الفرعية.
- مثال: `file.inFolder("notes")` تُرجع `true`.
## كائن
دوال يمكنك استخدامها مع مجموعة من أزواج المفتاح والقيمة مثل `{"a": 1, "b": 2}`.
### `isEmpty()`
`object.isEmpty(): boolean`
- تُرجع true إذا كان الكائن لا يحتوي على خصائص خاصة به.
- مثال: `{}.isEmpty()` تُرجع `true`.
### `keys()`
`object.keys(): list`
- تُرجع قائمة تحتوي على مفاتيح الكائن.
### `values()`
`object.values(): list`
- تُرجع قائمة تحتوي على قيم الكائن.
## تعبير نمطي
دوال يمكنك استخدامها مع نمط تعبير نمطي. مثال: `/abc/`.
### `matches()`
`regexp.matches(value: string): boolean`
- `value` هو النص المراد اختباره.
- تُرجع true إذا تطابق التعبير النمطي مع `value`.
- مثال: `/abc/.matches("abcde")` تُرجع `true`.