تُستخدم الدوال في [[مقدمة إلى قواعد البيانات|قواعد البيانات]] لمعالجة البيانات من [[الخصائص|الخصائص]] في [[العروض#التصفية|التصفية]] و[[المعادلات|المعادلات]]. راجع مرجع [[صيغة قواعد البيانات|صياغة قواعد البيانات]] لتعلم المزيد حول كيفية استخدام الدوال. بخلاف الدوال [[الدوال#عامة|العامة]]، تعتمد معظم الدوال على نوع القيمة التي تريد تعديلها: - [[الدوال#أي نوع|أي نوع]] - [[الدوال#تاريخ|تاريخ]] - [[الدوال#نص|نص]] - [[الدوال#رقم|رقم]] - [[الدوال#قائمة|قائمة]] - [[الدوال#رابط|رابط]] - [[الدوال#ملف|ملف]] - [[الدوال#كائن|كائن]] - [[الدوال#تعبير نمطي|تعبير نمطي]] ## عامة تُستخدم الدوال العامة بدون نوع محدد. ### `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`.