وحدة:Wikidata2
هذه الوحدة مستخدمة في عدد كبير من الصفحات (+2622772) . لتفادي خلق بلبلة على نطاق واسع من الصفحات وزيادة الأعباء على الخوادم، يجب تجربة أي تعديل في هذه الصفحات الفرعية /ملعب أو /تجربة أو في ملعبك. بعدها يمكنك إضافة التعديلات دفعة واحدة، ورجاءً، لا تنسَ مناقشة التعديلات أولًا قبل القيام بها. |
هذه الوحدة نسخت في البداية من sv:Modul:Wikidata2 ومن ثم تم تطويرها هنا.
الاستخدامات
أنظر قائمة قوالب تستخدم هذه الوحدة.
الوحدات الفرعية
- Wikidata2/Flags
- Wikidata2/Globes
- Wikidata2/Ill-WD2
- Wikidata2/Ill-WD2/شرح
- Wikidata2/Math
- Wikidata2/config
- Wikidata2/dump
- Wikidata2/dump/شرح
- Wikidata2/filter claims
- Wikidata2/filter claims/شرح
- Wikidata2/functions
- Wikidata2/link
- Wikidata2/monolingualtext
- Wikidata2/monolingualtext/شرح
- Wikidata2/monolingualtext/مختبر
- Wikidata2/sort claims
- Wikidata2/sort claims/شرح
- Wikidata2/template
- Wikidata2/template/شرح
- Wikidata2/time
- Wikidata2/time/ملعب
- Wikidata2/تحديث/شرح
- Wikidata2/شرح
- Wikidata2/مختبر
- Wikidata2/مختبر/شرح
- Wikidata2/ملعب
- Wikidata2/ملعب/شرح
- Wikidata2/ملعب2
- Wikidata2/نسخة
- Wikidata2/نسخة/شرح
وحدان أخرى
الوحدات المستخدمة عبر |value-module=
أو |claim-module=
أو |property-module=
:
- Wikidata2 sub modules/P106
- Wikidata2 sub modules/P106/شرح
- Wikidata2 sub modules/P1082
- Wikidata2 sub modules/P1082/شرح
- Wikidata2 sub modules/P172
- Wikidata2 sub modules/P172/شرح
- Wikidata2 sub modules/P1923
- Wikidata2 sub modules/P1923/شرح
- Wikidata2 sub modules/P3828
- Wikidata2 sub modules/P3828/شرح
- Wikidata2 sub modules/P39
- Wikidata2 sub modules/P39/شرح
- Wikidata2 sub modules/P39/ملعب
- Wikidata2 sub modules/P54
- Wikidata2 sub modules/P54/شرح
- Wikidata2 sub modules/P54/ملعب
- Wikidata2 sub modules/P569-P570
- Wikidata2 sub modules/P569-P570/شرح
- Wikidata2 sub modules/P569-P570/ملعب
- Wikidata2 sub modules/awards
- Wikidata2 sub modules/awards/شرح
- Wikidata2 sub modules/coordinates
- Wikidata2 sub modules/coordinates/شرح
- Wikidata2 sub modules/cycling
- Wikidata2 sub modules/cycling/شرح
- Wikidata2 sub modules/otheruse
- Wikidata2 sub modules/otheruse/شرح
- Wikidata2 sub modules/otheruse/ملعب
- Wikidata2 sub modules/otheruse/ملعب2
- Wikidata2 sub modules/tax
- Wikidata2 sub modules/tax/cash
- Wikidata2 sub modules/tax/cash/ملعب
- Wikidata2 sub modules/tax/شرح
- Wikidata2 sub modules/tax/ملعب
- Wikidata2 sub modules/شرح
صفحات المختبر
الاستعمال
مثال
{{#invoke:Wikidata2|formatStatements|property=p17}}
الشرح
انقر لإظهار الشرح >>>>
m
formatStatements
|property=
مطلوب الخاصية المطلوبة.
|entityId=
أو|id=
معرف عنصر ويكي بيانات.|page=
يمكن إستخدامه بدلاً من|entityId=Q805
كالتالي:|page=اليمن
.
|enbarten=
أو|firstvalue=
يعرض أول قيمة فقط في الخاصية.|firstvalue=2
يعرض القيمة الثانية في الخاصية إن كانت موجودة، يمكن استخدام هذا الخيار حتى رقم 9.
|numval=
يعرض عدد محدد من القيم في الخاصية.|numval=4
يعرض القيم الأربع الأولى في الخاصية إن كانت موجودة.
|prefix=
بادئة|suffix=
لاحقة|formatting=
يحدد تنسيق القيم يستخدم مع إحداثيات جغرافية، وعنصر، وخاصية.
|label=
اذا كنت تريد الاختيار كيفية ظهور الوصلات. مثلا[[شعار مقاطعة بليكينج|الشعار]]
يمكن الحصول عليها عن طريق اضافة|label=الشعار
تؤثر هذه المعلمة على وحدات القياس.|raw=
يعود بالنتيجة خام على شكل جداول (يستخدم من داخل وحدات لوا أخرى) ويمكن معاينة ما سيكون الناتج عليه عبر إضافة خيار|rawtolua=
.
فلترة النتيجة
رتبة القيم / rank
|rank=
يحدد نوع البيانات المطلوب عرضها:
|rank=all
|
جميع البنود في الخاصية | |rank=valid
|
البنود المفضلة والتي بوضع "ترتيب عادي" ولكن لا يظهر المهملة. | |rank=best
|
(افتراضي) يظهر القيم المفضلة. |
---|
عام
|firstvalue=1
- يعرض القيمة المطلوبة في الخاصية إن كانت موجودة، مالم سيعرض أول قيمة.
|numval=
- يعرض عدد محدد من القيم في الخاصية، مثال:
|numval=4
يعرض القيم الأربع الأولى في الخاصية إن كانت موجودة.
- يعرض عدد محدد من القيم في الخاصية، مثال:
|justthisqual=
- يظهر فقط قيمة التصفية، إذا لم تكن التصفية موجودة لن يظهر شيء.
- التحديد والإزاحة
|limit=
|
|offset=
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
التصفيات
- تجنب
|avoidqualifier=
يتجاهل القيم التي تحتوي تصفيات معينة. مثال:|avoidqualifier=P518
يظهر البند الذي لا يحتوي على تصفية ينطبق على جزء (P518).- الوسيط
|avoidqualifiervalue=
اختياري- بإستخدامه مع
|avoidqualifier=
فإن ذلك يحدد قيمة التصفية إذا طابقت الوسيط|avoidqualifiervalue=
فلن يتم إظهارها، يدعم حالياً العناصر/items فقط.
- بإستخدامه مع
- تفضيل
|preferqualifier=
يظهر فقط القيم التي تحتوي تصفيات معينة. مثال:|preferqualifier=P518
يظهر البند الذي
يحتوي على تصفية ينطبق على جزء (P518).
- الوسيط
|preferqualifiervalue=
اختياري- بإستخدامه مع
|preferqualifier=
فإن ذلك يحدد قيمة التصفية إذا طابقت الوسيط|preferqualifiervalue=
ليتم إظهارها، يدعم حالياً العناصر/items فقط.
- بإستخدامه مع
|langpref=
القيم
|avoidvalue=
|prefervalue=
- prefervalue
|prefervalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|avoidvalue=
حيث نقوم بتحديد القيمة التي نريد ظهورها|prefervalue=Q19481
فتظهر النتيجة للعنصر ليستر سيتي (Q19481) فقط، ولكن الفائدة من إستخدام هذا الوسيط هي التأكد من وجود العنصر في هذه الخاصية أو للحصول على التصفيات، مثال يظهر عناصر الفائز (P1346) مع تصفية الفِرَق المشاركة (P1923) بين قوسين.
توصيف | {{#invoke:Wikidata2 |formatStatements |entityId=Q39052816 |property=P1923 |qual1=P1355 }}
|
يظهر | نادي آرسنال (21 )، نادي بورنموث (13 )، برايتون أند هوف ألبيون (9 )، نادي بيرنلي (11 )، كارديف سيتي (10 )، نادي تشيلسي (21 )، كريستال بالاس (14 )، نادي إيفرتون (15 )، ليستر سيتي (15 )، نادي ليفربول (30 )، مانشستر سيتي (32 )، مانشستر يونايتد (19 )، نيوكاسل يونايتد (12 )، توتنهام هوتسبير (23 )، نادي واتفورد (14 )، وست هام يونايتد (15 )، وولفرهامبتون واندررز (16 )، نادي ساوثهامبتون (9 )، نادي فولهام (7 ) و هدرسفيلد تاون (3 ) |
إذا كنا قد حصلنا عبر خاصية الفائز (P1346) عن الفريق الفائز في الدوري الإنجليزي الممتاز 2018–19 (Q39052816). وأردنا الحصول على عدد مرات الفوز للفريق الفائز، من الجدول السابق ويتم ذلك بإستخدام الوسيط |justthisqual=
ما ينتج:
توصيف | {{#invoke:Wikidata2 |formatStatements |entityId=Q39052816 |property=P1923 |justthisqual=P1355 }}
|
يظهر | 21 ، 13 ، 9 ، 11 ، 10 ، 21 ، 14 ، 15 ، 15 ، 30 ، 32 ، 19 ، 12 ، 23 ، 14 ، 15 ، 16 ، 9 ، 7 و 3 |
ولكننا نريد ظهور التصفية للفريق الفائز فقط وهو مانشستر سيتي (Q50602):
|
|
- avoidvalue
|avoidvalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|prefervalue=
إذا أردنا أن نتجاهل أو نلغي ظهور عنصر معين، مثال عند وضع|avoidvalue=Q50602
فتظهر النتائج دون ظهور مانشستر سيتي (Q50602).
توصيف | {{#invoke:Wikidata2 |formatStatements |entityId=Q39052816 |property=P1923 |qual1=P1355 |avoidvalue=Q50602 }}
|
يظهر | نادي آرسنال (21 )، نادي بورنموث (13 )، برايتون أند هوف ألبيون (9 )، نادي بيرنلي (11 )، كارديف سيتي (10 )، نادي تشيلسي (21 )، كريستال بالاس (14 )، نادي إيفرتون (15 )، ليستر سيتي (15 )، نادي ليفربول (30 )، مانشستر يونايتد (19 )، نيوكاسل يونايتد (12 )، توتنهام هوتسبير (23 )، نادي واتفورد (14 )، وست هام يونايتد (15 )، وولفرهامبتون واندررز (16 )، نادي ساوثهامبتون (9 )، نادي فولهام (7 ) و هدرسفيلد تاون (3 ) |
القيم في خاصية محددة
- getonly
|getonly=
يستخدم هذا الوسيط إذا أردنا الحصول على عناصر معينة التي تكون قيمة نموذج من (P31) فيها تساوي قيمة هذا الوسيط، مثال:|getonly=Q5
للحصول على الأفراد فقط.- القيم المتعددة ممكنة، مثل :
|getonly=Q127448,Q193556
للحصول على البلديات السويدية والمناظر الطبيعية.
- القيم المتعددة ممكنة، مثل :
|getonlyproperty=
إذا أردنا استخدام خاصية أخرى بدلاً من نموذج من (P31) في البند السابق.
|getonly= (Q804574)
و|getonlyproperty=النشيد (P85)
(لنحصل على مانشستر سيتي فقط)
توصيف | وحدة:wikidata2 | وحدة:wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| true |
- dontget
- الوسيط
|dontget=
استخدامه عكس الوسيط السابق|getonly=
.
|dontget= (Q804574)
و|dontgetproperty=النشيد (P85)
(لنحصل على جميع القيم ما عدا مانشستر سيتي)
توصيف | وحدة:wikidata2 | وحدة:wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| true |
باستخدام القالب:
توصيف | قالب:قيمة ويكي بيانات | قالب:قيمة ويكي بيانات/ملعب | مطابق؟ |
---|---|---|---|
| true |
فصل القيم
|separator=
فاصلة بين البنود|
انظر أيضاconjunction
|conjunction=
الفاصلة الأخيرة قبل اخر بند، افتراضي، و
.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements| entityId=Q76| noref=t| property=P106| rank=all}} | سياسي، محامٍ، كاتب سياسي، منظم مجتمع، رجل دولة، رجل قانون، مدون صوتي، أستاذ جامعي و كاتب مذكرات |
|separator=br يضع القيم في أسطر.
|
|separator=* يضع القيم في قائمة نقطية.
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
ترتيب النتيجة / sort
|sortingproperty=
تحديد خاصية الترتيب.
- تستخدم وسائط الترتيب (
|sortbytime=
، و|sortbynumber=
، و|sortingmethod=
) قيمتين فقط كالتالي:
chronological تصاعدي asc |
من التاريخ الأقدم إلى التاريخ الأحدث | inverted تنازلي desc |
من التاريخ الأحدث إلى التاريخ الأقدم |
---|
حسب التصفيات
|sortbytime=
تُستخدم للترتيب النتيجة حسب التصفيات من فئة الزمن، ويتم الترتيب حسب الخواص التالية (بتاريخ (P585)، البداية (P571)، تاريخ البدء (P580)، تاريخ الميلاد (P569)، تاريخ الانتهاء (P582)، تاريخ الوفاة (P570)).- إذا أردنا تحديد خاصية الترتيب نستخدم
|sortbynumber=
بأحدى القيمتين أعلاه ونستخدم|sortingproperty=
مع الخاصية المطلوبة.
حسب الخواص
إذا لم توجد تصفيات في النتيجة فإننا بحاجة للدخول إلى العناصر وأخذ قيمة مُعينة لجعلها مفتاح للترتيب، مثل تاريخ الولادة، أو تاريخ البدء.
- نستخدم
|sortingmethod=
بأحدى القيم المذكورة أعلاه، ونستخدم الخاصية المطلوبة عبر وسيط|sortingproperty=
.
- مثال
|
|
الترتيب قبل الفلترة
يفيد إذا أردنا عرض نتيجة واحدة فقط وهي آخر نتيجة معتمدة، فيمكن ذلك عن طريق ترتيب القيم حسب التاريخ، ولكن لأننا استخدمنا |firstvalue=1
فاختار الكود عرض أول قيمة قبل فرز النتائج حسب التاريخ، لذلك نستخدم وسيط |sort_before_filter=1
لكي نفرز النتائج حسب التاريخ قبل اختيار أول نتيجة.
|
|
المراجع / References / Sources
|noref=
أدخل قيمة في هذه المعلمة إذا كنت لا تريد جلب المصادر من ويكي بيانات.|justref=
أدخل قيمة في هذه المعلمة إذا كنت تريد جلب المصادر فقط دون ظهور القيمة!.|onlyvaluewithref=
لإظهار البيانات التي لها مراجع فقط.|numberofreferences=
لوضع حد أقصى للمراجع لكل قيمة، مثلاً عند تحديد|numberofreferences=1
يظهر مرجع واحد فقط في كل قيمة إن كان متوفراً.
صياغة النص
|formatcharacters=
تحديد صيغة اخراج القيمة، القيم المسموح بها هي:lc/uc/lcfirst/ucfirst/formatnum
|formatcharacters=lc
: تحويل جميع أحرف النص الإنجليزي إلى حروف صغيرة.|formatcharacters=lcfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف صغير.|formatcharacters=uc
: تحويل جميع أحرف النص الإنجليزي إلى حروف كبيرة.|formatcharacters=ucfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف كبير.|formatcharacters=formatnum
: مشروحة في #كمية.
تصفيات / Qualifiers
|withdate=
يضيف تصفية بتاريخ (P585) إذا كانت موجودة.|bothdates=
يضيف تصفيات تاريخ البدء (P580) وتاريخ الانتهاء (P582) إذا كانتا موجودتان كلاهما أو إحداهما.|bothdates=line
يضع سطر جديد قبل التاريخ،|bothdates=before
يضع التاريخ قبل القيمة،|bothdates=after
يضع التاريخ بعد القيمة.
|qual1=
يضيف تصفية محددة.|qual1=P1545
يضيف تصفية الترتيب في التسلسل (P1545) الى بنود الخاصية، مثال:منصب باراك أوباما + ترتيبه:{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |formatStatements|entityId=Q76|property=P39|qual1=P1545|noref=true|rank=best}}
ينتج :← رئيس الولايات المتحدة (44)
وسائط حسب نوع البيانات / datatype
عنصر / item
|nolink=
يظهر النتيجة دون وصلات.|formatting=raw
يعرض القيمة بشكل Q505.|formatting=sitelink
يعرض القيم التي تحتوي مقالة في ويكيبيديا العربية.
الحصول على خواص إضافية
وسيط property1
- يستخدم للحصول على قيمة خاصية من العناصر التي حصلنا عليها، بحيث تظهر قيمة
|property1=
بجانب القيمة الأصلية:
توصيف | يظهر |
---|---|
| Flag of Yemen.svg اليمن[1] Flag of North Yemen.svg الجمهورية العربية اليمنية Flag of the Mutawakkilite Kingdom of Yemen.svg المملكة المتوكلية اليمنية |
وسيط property2
- مثل
|property1=
(بدون استخدام|property3=
).
توصيف | يظهر |
---|---|
|
وسيط property3
- يستخدم بجانب الوسيط
|property2=
، بحيث تظهر قيمة|property3=
بدون قيمة|property2=
.
توصيف | يظهر |
---|---|
| Flag of Spain.svg نادي برشلونة Flag of Italy.svg إيه سي ميلان Flag of Italy.svg نادي إنتر ميلان Flag of the Netherlands.svg بي إس في آيندهوفن Flag of Spain.svg ريال مدريد |
- مع وسيط
|image=t
توصيف | يظهر |
---|---|
|
ملف وسائط من كومنز / commonsMedia
- تظهر الصور افتراضياً كالتالي:
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|noref=true|rank=best}}
← President Barack Obama.jpg
|image=
عند استخدام هذا الوسيط في خواص الصور تظهر الصورة مباشرة.
|size= لتحديد حجم الصورة (60 افتراضياً)، ضع القيمة دون (بك/px إلخ).
|
|center= لجعل الصورة في الوسط ضع قيمة هذا الخيار |center=yes .
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
إحداثيات جغرافية / coordinate
توصيف | {{#invoke:Wikidata2 |formatStatements |entityId=Q805 |property=P625 }}
|
يظهر | 15°30′N 48°00′E / 15.5°N 48°E |
|formatting=latitude
يعرض خط العرض فقط.|formatting=longitude
يعرض خط الطول فقط.|formatting=precision
يعرض الدقة.
|
|
نص أحادي اللغة / نص بلغة وحيدة / monolingualtext
وسيط |textformat=text
يستخدم اظهار النص فقط دون استخدام قوالب قالب:رمز لغة واسمها أو قالب:رمز لغة:
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| United Nations، 联合国، Organización de las Naciones Unidas، Организация Объединённых Наций، منظمة الأمم المتحدة و Organisation des Nations unies | United Nations، 联合国، Organización de las Naciones Unidas، Организация Объединённых Наций، منظمة الأمم المتحدة و Organisation des Nations unies | true |
وسيط |showlang=t
يستخدم لإظهار النص حسب تنسيق قالب:رمز لغة واسمها: ملاحظة (لا يستخدم القالب في النص العربي)
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| (بالإنجليزية: United Nations)، (بالصينية: 联合国)، (بالإسبانية: Organización de las Naciones Unidas)، (بالروسية: Организация Объединённых Наций)، منظمة الأمم المتحدة و (بالفرنسية: Organisation des Nations unies) | (بالإنجليزية: United Nations)، (بالصينية: 联合国)، (بالإسبانية: Organización de las Naciones Unidas)، (بالروسية: Организация Объединённых Наций)، منظمة الأمم المتحدة و (بالفرنسية: Organisation des Nations unies) | true |
وسيط |nolang=ar
يستخدم لإخفاء لغة معينة من الناتج، مثلًا لا نريد ظهور الاسم العربي كون المقالة بالعربية فلن يضيف أي قيمة!:
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| (بالإنجليزية: United Nations)، (بالصينية: 联合国)، (بالإسبانية: Organización de las Naciones Unidas)، (بالروسية: Организация Объединённых Наций) و (بالفرنسية: Organisation des Nations unies) | (بالإنجليزية: United Nations)، (بالصينية: 联合国)، (بالإسبانية: Organización de las Naciones Unidas)، (بالروسية: Организация Объединённых Наций) و (بالفرنسية: Organisation des Nations unies) | true |
وسيط |langpref=
يستخدم لتحديد اللغة المطلوب عرضها وتجاهل البقية:
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| منظمة الأمم المتحدة | منظمة الأمم المتحدة | true |
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| (بالإنجليزية: United Nations) | (بالإنجليزية: United Nations) | true |
القيم المقبولة الأخرى هي : justlang وlangcode
- مثال
|langpref=justlang
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| الإنجليزية | الإنجليزية | true |
- مثال
|langpref=langcode
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| en | en | true |
كمية / quantity
- الافتراضي:
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y}}
← 555000 كيلومتر مربع
|nounit= لا يظهر وحدة القياس.
|
|formatcharacters=formatnum : تنسيق الأرقام بالفواصل.
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
|unitshort=
يظهر وحدات القياس مختصرة. مثلاً كم بدلاً عن كيلومتر.
|
|
نص / string
|stringpattern=
تنسيق النص في قالب أو وصلة أو ماشابه يتم استبدال القيمة بـ$1. مثل|pattern=
لكن هنا تستخدم مع نوع البيانات string.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2 |formatStatements |entityId=Q1133289 |noref=t |property=P1748 |stringpattern=[https://ncit.nci.nih.gov/ncitbrowser/ConceptReport.jsp?dictionary=NCI%20Thesaurus&code=$1 $1] }} |
نقطة زمنية / time
|modifytime=
يحدد تنسيق الوقت أو التاريخ:|modifytime=longdate
يكتب التاريخ في شكل "27 يناير 2025"|modifytime=Y
يكتب التاريخ في شكل "2025" يظهر فقط السنة.|modifytime= F
يكتب التاريخ في شكل "يناير" يظهر فقط الشهر.|modifytime= j
يكتب التاريخ في شكل "27" يظهر فقط اليوم.
|modifyqualifiertime=
تنسيق التاريخ على النحو الوارد أعلاه، ولكن يؤثر فقط على التصفيات.qualifier
معرف خارجي / external-id
توصيف | يظهر |
---|---|
| BarackObama |
|pattern=
طريقة عرض الخاصية مثلاً في وصلات الضبط الاستنادي$1
مثلاً:<nowiki>https://viaf.org/viaf/$1/</nowiki>
.|pattern=autourl
من خواص البند أعلاه، لنمط مستخدم في الخاصية المسار المنسق (P1630) (تنسيق عنوان URL) للخاصية المطلوبة.
توصيف | يظهر |
---|---|
|
|pattern=autourl2
كما سبق، يقدم وصلة من نوع<nowiki>[https://viaf.org/viaf/$1/ $1] </nowiki>
توصيف | يظهر |
---|---|
|
المسار / url
|urllabel=
وضع تسمية لتظهر بدلاً من الوصلة، كما في معرف خارجي ولكن في خواص الروابط.- مثال عند استخدام الموقع الرسمي (P856) لباراك أوباما (Q76) مع/بدون الوسيط
|urllabel=الموقع الرسمي
:
- مثال عند استخدام الموقع الرسمي (P856) لباراك أوباما (Q76) مع/بدون الوسيط
|
|
|displayformat=
يقبل حالياً قيمة واحدة وهي|displayformat=weblink
لاستخدام وحدة:weblink لعرض وصلة الموقع.
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856|displayformat=weblink}}
← barackobama.com[2][3]
خيارات إضافية
|NoPropValue=
يستخدم لإظهار نتيجة ما عند عدم وجود قيمة محلية في وسيط|value=
وعدم وجود قيمة في ويكي بيانات.
property-(module/function) و claim-(module/function) و value-(module/function)
يتم دعم ثلاثة أنواع من معلمات الوظائف، والتي تشير أيضًا إلى كيفية تنسيق القيم:
|-module=
عنوان الوحدة|-function=
عنوان الوظيفة
property
fun( claims, options )
|property-module=
عنوان الوحدة مثل|property-module=وحدة:Wikidata2 sub modules/P54
|property-function=
عنوان الوظيفة مثل|property-function=foot
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل كامل مثلاً لوضعها في جدول معين، أو فرزها بتنسيق خاص، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2 sub modules/P54 الخاصة بعرض فرق لاعبي كرة القدم، مثل أندية كرة القدم حيث يتم فصل المنتخبات عن الأندية.
claim
fun( statement, options )
|claim-module=
عنوان الوحدة مثل|claim-module=وحدة:Wikidata2 sub modules/P39
|claim-function=
عنوان الوظيفة مثل|claim-function=office3
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2 sub modules/P39 الخاصة بخاصية المنصب المنصب (P39).
value
fun( datavalue, datatype, options )
|value-module=
عنوان الوحدة مثل|value-module=وحدة:Wikidata2 sub modules/P106
|value-function=
عنوان الوظيفة مثل|value-function=formatEntityWithGenderClaim
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد لكل قيمة مثلاً لأخذ تسمية الإناث عند إستخدام خاصية المهنة (P106)، لا نستطيع هنا الحصول على التصفيات/qualifiers والمراجع/references.
- أمثلة:
- الوحدة وحدة:Wikidata2 sub modules/P106 الخاصة بخاصية المهنة.
بدون استخدام |value-module=
|
باستخدام |value-module=
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
pageId
ينتج عنصر ويكي بيانات للصفحة المستخدم فيها الكود.
توصيف يظهر {{#invoke:Wikidata2|pageId}}Q24575438
labelIn
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.
توصيف | يظهر |
---|---|
| باراک اوباما |
descriptionIn
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.
مثال:
توصيف يظهر {{#invoke:Wikidata2|descriptionIn|en|Q76}}president of the United States from 2009 to 2017توصيف يظهر {{#invoke:Wikidata2|descriptionIn|ar|Q76}}الرئيس الرابع والأربعون للولايات المتحدةتوصيف يظهر {{#invoke:Wikidata2|descriptionIn|en-gb|Q32633904}}
getSiteLink / وصلات المواقع
|2=
أو|site=
الموقع مثل enwiki.- يتم أخذ عنصر ويكي بيانات من أحد الوسائط التالية:
|1=
أو|id=
عنصر ويكي بيانات.|page=
يمكن استخدام اسم الصفحة في هذه الويكي بدلاً من استخدام الوسيط|id=
.
|countsitelinks=
يستخدم فقط لإظهار عدد وصلات اللغات.
توصيف | يظهر |
---|---|
| باراك أوباما |
توصيف | يظهر |
---|---|
| Barack Obama |
توصيف | يظهر |
---|---|
| Barack Obama |
أو:
توصيف | يظهر |
---|---|
| Yemen |
Dump
مثال: {{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|claims|P19}}
- مثال2:
{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|id=Q76|claims|P19}}
table#1 {
table#2 {
["id"] = "Q76$6c5e3740-4ca4-de6a-1557-b623372dc93a",
["mainsnak"] = table#3 {
["datatype"] = "wikibase-item",
["datavalue"] = table#4 {
["type"] = "wikibase-entityid",
["value"] = table#5 {
["entity-type"] = "item",
["id"] = "Q6366688",
["numeric-id"] = 6366688,
},
},
["property"] = "P19",
["snaktype"] = "value",
},
["qualifiers"] = table#6 {
["P1932"] = table#7 {
table#8 {
["datatype"] = "string",
["datavalue"] = table#9 {
["type"] = "string",
["value"] = "Kapiolani Maternity & Gynecological Hospital",
},
["hash"] = "6fd68e03eb688ae2bc3065f585acd78edbe8fa5b",
["property"] = "P1932",
["snaktype"] = "value",
},
},
["P6375"] = table#10 {
table#11 {
["datatype"] = "monolingualtext",
["datavalue"] = table#12 {
["type"] = "monolingualtext",
["value"] = table#13 {
["language"] = "en",
["text"] = "6085 Kalanianaole Highway",
},
},
["hash"] = "2e9be82b6a3154de13d7196988eb8b40dc8f0252",
["property"] = "P6375",
["snaktype"] = "value",
},
},
["P7452"] = table#14 {
table#15 {
["datatype"] = "wikibase-item",
["datavalue"] = table#16 {
["type"] = "wikibase-entityid",
["value"] = table#17 {
["entity-type"] = "item",
["id"] = "Q71536040",
["numeric-id"] = 71536040,
},
},
["hash"] = "f9f842b41f249e5504d48025c7ad6d7b5bfc7496",
["property"] = "P7452",
["snaktype"] = "value",
},
},
},
["qualifiers-order"] = table#18 {
"P6375",
"P1932",
"P7452",
},
["rank"] = "preferred",
["references"] = table#19 {
table#20 {
["hash"] = "e91a853ea4e0b372b26f82a616b87eb645b0aff3",
["snaks"] = table#21 {
["P248"] = table#22 {
table#23 {
["datatype"] = "wikibase-item",
["datavalue"] = table#24 {
["type"] = "wikibase-entityid",
["value"] = table#25 {
["entity-type"] = "item",
["id"] = "Q14527788",
["numeric-id"] = 14527788,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
},
["snaks-order"] = table#26 {
"P248",
},
},
},
["type"] = "statement",
},
table#27 {
["id"] = "Q76$7ba7f268-4c19-b92f-7254-f8ed65aed53f",
["mainsnak"] = table#28 {
["datatype"] = "wikibase-item",
["datavalue"] = table#29 {
["type"] = "wikibase-entityid",
["value"] = table#30 {
["entity-type"] = "item",
["id"] = "Q18094",
["numeric-id"] = 18094,
},
},
["property"] = "P19",
["snaktype"] = "value",
},
["rank"] = "normal",
["references"] = table#31 {
table#32 {
["hash"] = "207f35a0ea83b330f87438c914b0ab24558d2868",
["snaks"] = table#33 {
["P227"] = table#34 {
table#35 {
["datatype"] = "external-id",
["datavalue"] = table#36 {
["type"] = "string",
["value"] = "132522136",
},
["property"] = "P227",
["snaktype"] = "value",
},
},
["P248"] = table#37 {
table#38 {
["datatype"] = "wikibase-item",
["datavalue"] = table#39 {
["type"] = "wikibase-entityid",
["value"] = table#40 {
["entity-type"] = "item",
["id"] = "Q36578",
["numeric-id"] = 36578,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
["P407"] = table#41 {
table#42 {
["datatype"] = "wikibase-item",
["datavalue"] = table#43 {
["type"] = "wikibase-entityid",
["value"] = table#44 {
["entity-type"] = "item",
["id"] = "Q188",
["numeric-id"] = 188,
},
},
["property"] = "P407",
["snaktype"] = "value",
},
},
["P813"] = table#45 {
table#46 {
["datatype"] = "time",
["datavalue"] = table#47 {
["type"] = "time",
["value"] = table#48 {
["after"] = 0,
["before"] = 0,
["calendarmodel"] = "http://www.wikidata.org/entity/Q1985727",
["precision"] = 11,
["time"] = "+2021-06-06T00:00:00Z",
["timezone"] = 0,
},
},
["property"] = "P813",
["snaktype"] = "value",
},
},
},
["snaks-order"] = table#49 {
"P248",
"P227",
"P407",
"P813",
},
},
},
["type"] = "statement",
},
}
- مثال موسع:
{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|claims|P1791|1|references|1|snaks|P244|1|datavalue|value}}
isSubclass / نوع فرعي من
إن كانت قيمة نموذج من (P31) أو صنف فرعي من (P279) للصفحة التي وضع فيها الكود أو للصفحة في الوسيط |id=
مساوية للوسيط |parent=
ينتج 'true' غير ذلك لا ينتج شيئاً.
كامل الخيارات:{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |isSubclass|parent=|maxDepth=1|property=|id=|exitItem=}}
- مطلوب:
|parent=
مثلاً إنسان (Q5) |maxDepth=
عمق البحث في الصفحات.|property=
الخاصية المطلوبه (افتراضياً نموذج من (P31)، وصنف فرعي من (P279))|id=
الصفحة المطلوب البحث فيها.|exitItem=
مثال:
{{#invoke:Wikidata2|isSubclass|maxDepth=1|id=Q76|parent=Q5}}
← true
{{#invoke:Wikidata2|isSubclass|maxDepth=5|id=Q76|parent=Q45}}
←
EntityIdForTitle
يعطي معرف ويكي بيانات من خلال عنوان مقالة ويكيبيديا العربية:
{{#invoke:Wikidata2|EntityIdForTitle|اليمن}}
← Q805
{{#invoke:Wikidata2|EntityIdForTitle|وحدة:Wikidata2}}
← Q24575438
Qidfortitleandwiki
- يمكن استخدام الوظيفة للحصول على معرف ويكي بيانات لصفحات في الموسوعات الأخرى:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2 |Qidfortitleandwiki |Championnats du monde de cyclo-cross 2006 |frwiki }} | Q2300340 |
آخر التحديثات
- 4 أبريل 2019:
- إضافة الوسيط
|unitshort=
لإستخدام اختصار وحدات القياس أو العملات بدلاً عن عنوان مقالتها.
- إضافة الوسيط
- 4 أبريل 2019:
- إضافة الوسيط
|avoidqualifiervalue=
عكس الوسيط|preferqualifiervalue=
. - إخفاء ظهور تصانيف التتبع في التصفيات عند استخدام الوسيط
|raw=
.
- إضافة الوسيط
- 2 أبريل 2019:
- إضافة الوسيط
|stringpattern=
تنسيق النص.
- إضافة الوسيط
- 12 مارس 2019:
- إضافة إمكانية وضع حد أقصى لعدد المراجع عبر خيار
|numberofreferences=
.
- إضافة إمكانية وضع حد أقصى لعدد المراجع عبر خيار
- 3 مارس 2019:
- إمكانية استخدام
|numval=
لعرض عدد محدد من القيم في الخاصية.
- إمكانية استخدام
- 11 فبراير 2019:
- إلغاء ظهور تصانيف التتبع عند إستخدام الخيار raw . موضوع:Urddl876zfwwpkfq
- إضافة الوظيفة avoidvalue لمنع ظهور قيم معينة طلب الزميل @علاء:.
- استخدام mw.wikibase.getReferencedEntityId
- 8 فبراير 2019:
- استخدام وحدة:weblink مع نوع بيانات url / المسار عبر وضع
|displayformat=weblink
.
- استخدام وحدة:weblink مع نوع بيانات url / المسار عبر وضع
- 4 فبراير 2019:
- إمكانية استخدام
|firstvalue=1
لإظهار القيمة رقم 1 ويمكن الاستخدام حتى رقم 9.
- إمكانية استخدام
- 1 فبراير 2019:
- استخدام mw.wikibase.isValidEntityId و mw.wikibase.entityExists في الوحدة للتأكد من صحة قيم
|entityId=
.
- استخدام mw.wikibase.isValidEntityId و mw.wikibase.entityExists في الوحدة للتأكد من صحة قيم
- 20 يناير 2019 :
- إضافة الخيار returnnumberofvalues لمعرفة عدد قيم النتائج، (يستخدم عبر وحدات لوا)
- 31 ديسمبر 2018:
- إضافة الوظيفة getLabel.
- 18 ديسمبر 2018 :
- إمكانية حجب قيم من الظهور في خواص معينة مثل حجب العنصر نبي (Q42857) من الظهور عند استخدام خاصية المهنة (P106).
- 2 مارس 2018 :
- 5 فبراير 2018:
- اضافة الخيار
|formatcharacters=formatnum
لإظهار تنسيق الأرقام بالفواصل مثل 10٬000٬000.
- اضافة الخيار
- 25 يناير 2018:
- اضافة الخيار
|countsitelinks=t
لإظهار عدد وصلات اللغات.
- اضافة الخيار
- 9 ديسمبر 2017:
- إضافة الخيار
|page=
يمكن أن يستخدم بديلاً عن|entityId=
بوضع اسم الصفحة خاص:فرق/25985344.
- إضافة الخيار
- ^ GeoNames (بالإنجليزية), 2005, QID:Q830106
- ^ ا ب ج https://www.gala.fr/stars_et_gotha/barack_obama.
{{استشهاد ويب}}
:|url=
بحاجة لعنوان (مساعدة) والوسيط|title=
غير موجود أو فارغ (من ويكي بيانات) (مساعدة) - ^ ا ب ج https://www.voici.fr/bios-people/barack-obama.
{{استشهاد ويب}}
:|url=
بحاجة لعنوان (مساعدة) والوسيط|title=
غير موجود أو فارغ (من ويكي بيانات) (مساعدة)
---@diagnostic disable: undefined-global
local p = {}
local Frame_args = {}
local filterclaims = require("Module:Wikidata2/filter_claims")
local sortclaims = require("Module:Wikidata2/sort_claims")
local config = mw.loadData('Module:Wikidata2/config')
local Moduleill_wd2
local Moduledump
local ModuleTime
local Moduletext
local Modulecite
local Moduleflags
local ModuleGlobes
-- local formatera
local weblink
p.track_cat_done = false
local citetitle = "Module:Cite Q"
if nil ~= string.find(mw.getCurrentFrame():getTitle(), "ملعب", 1, true) then
citetitle = "Module:Cite Q/ملعب"
end
local i18n = config.i18n
local falsetitles = config.falsetitles
local skiip_items = config.skiip_items
local function anyvalid(x)
if x and x ~= "" then return x end
return nil
end
local function isvalid(x)
if x and x ~= "" and x ~= "لا" then return x end
return nil
end
local function isvalids(xs)
for _, x in pairs(xs) do
if isvalid(x) then
return x
end
end
return nil
end
local function isntvalid(x)
if not x or x == "" or x == nil then return true end
return false
end
function formatFromPattern(str, options)
-- [[ function to replace $1 with string ]]
if isvalid(options.pattern) then
str = string.gsub(str, "%%", "%%%%")
str = mw.ustring.gsub(options.pattern, "$1", str)
end
return str
end
function No_Tracking_cat(options)
if isvalid(options.formatting) == "raw" or isvalid(options.formatting) == "sitelink" then
return true
end
local notracking = isvalids({ options.nocate, options.notracking, Frame_args.notracking })
local raw = isvalids({ options.raw, Frame_args.raw, options.raw2, Frame_args.raw2 })
local nolink = isvalids({ options.nolink, Frame_args.nolink })
if notracking or raw or nolink then
return true
end
local pagetitle = mw.title.getCurrentTitle().text
for _, title in pairs(falsetitles) do
if string.find(pagetitle, title, 1, true) then
--mw.log("notracking for title with: " .. title)
return true
end
end
return false
end
function addTrackingCategory(options)
if No_Tracking_cat(options) then
return ""
end
local cat = require("Module:Wikidata/تتبع").makecategory1
local category = cat(options)
local nbsp = " "
if isvalid(options.nbsp) or isvalid(options.image) then
nbsp = ""
end
if isvalid(category) then
return nbsp .. category
end
return ""
end
function catewikidatainfo(options)
--[[ function to add tracking category ]]
if No_Tracking_cat(options) then
return ""
end
local cat = ""
local prop = options.property
cat = cat .. " [[" .. "تصنيف:صفحات بها بيانات ويكي بيانات|" .. (prop or "wikidata") .. "]]"
if isntvalid(options.nolink) then
return cat
else
return ""
end
end
function get_entityId(options)
-- local id = isvalid(options.entityId) or isvalid(options.id) or isvalid(options.qid)
local id = isvalids({ options.entityId, options.id, options.qid })
if id then
return id
end
if isvalid(options.page) then
id = mw.wikibase.getEntityIdForTitle(options.page)
else
id = mw.wikibase.getEntityIdForCurrentPage()
end
return id or ""
end
function p.countSiteLinks(id)
local numb = 0
local entity = mw.wikibase.getEntity(id)
if entity and entity.sitelinks then
for i, v in pairs(entity.sitelinks) do
numb = numb + 1
end
end
return numb
end
function make_format_num(String)
local line = String
line = mw.getCurrentFrame():preprocess("{{ {{{|safesubst:}}}formatnum: " .. String .. " }}")
line = mw.ustring.gsub(line, "٫", ".")
line = mw.ustring.gsub(line, "٬", ",")
return line
end
function formatcharacters(label, options)
local formatch = options.formatcharacters
--if options.FormatfirstCharacter and options.num == 1 then
--formatch = options.FormatfirstCharacter
--end
local String2 = mw.ustring.gsub(label, "–", "-")
local match_y =
mw.ustring.match(String2, "%d%d%d%d%-%d%d%d%d", 1) or mw.ustring.match(String2, "%d%d%-%d%d%d%d", 1) or
mw.ustring.match(String2, "%d%d%d%d", 1) or
mw.ustring.match(String2, "%d%d%d%d%-%d%d", 1) or
mw.ustring.match(String2, "%d%d%d%d", 1)
if isvalid(options.illwd2y) then
return match_y or label
end
if isvalid(options.illwd2noy) and match_y then
label = mw.ustring.gsub(label, match_y, "")
return label
end
if isntvalid(formatch) then
return label
end
local prepr = {
["lcfirst"] = "{{lcfirst: " .. label .. " }}",
["lc"] = "{{lc: " .. label .. " }}",
["uc"] = "{{uc: " .. label .. " }}"
}
if prepr[formatch] then
return mw.getCurrentFrame():preprocess(prepr[formatch])
elseif formatch == "ucfirst" then
return mw.language.getContentLanguage():ucfirst(label)
elseif formatch == "formatnum" then
return make_format_num(label)
end
return label
end
function descriptionIn(langcode, id) -- returns item description for a given language
if isntvalid(langcode) then
langcode = "ar"
end
langcode = mw.text.trim(langcode or "")
id = mw.text.trim(id or "")
-- Lua memory used 640,195/52,428,800 bytes
return mw.wikibase.getDescriptionByLang(id, langcode) or ""
--[[
-- Lua memory used 3,982,457/52,428,800 bytes
if langcode == "ar" then
local description, lange = mw.wikibase.getDescriptionWithLang(id)
if lange == langcode then
return description
else
return nil
end
else
local entity = getEntityFromId(id)
if entity and entity.descriptions then
local description = entity.descriptions[langcode]
if description and description.value then
if description["language"] == langcode then
return description.value
end
end
end
end
return nil
]]
end
function labelIn(langcode, id) -- returns item label for a given language
if isntvalid(langcode) then
langcode = "ar"
end
if type(id) ~= "string" then
id = tostring(id)
end
langcode = mw.text.trim(langcode or "")
id = mw.text.trim(id or "")
return mw.wikibase.getLabelByLang(id, langcode) or nil
end
function filter_langs(claims, options)
local claims7 = {}
local arabic_id = { ["P407"] = 13955, ["P282"] = 8196 } -- Q13955 = "العربية", Q8196 = "أبجدية عربية"
for _, statement in pairs(claims) do
for prop, id in pairs(arabic_id) do
if statement.qualifiers and statement.qualifiers[prop] then
for _, v in pairs(statement.qualifiers[prop]) do
if v.snaktype == "value" and v.datavalue.value["numeric-id"] == id then
table.insert(claims7, statement)
break
end
end
end
end
end
if #claims7 > 0 then
return claims7
end
return claims
end
--[[
functions
]]
function getEntityFromId(id)
return isvalid(id) and mw.wikibase.getEntity(id) or mw.wikibase.getEntity()
end
function formatError(key)
return i18n.errors[key]
end
function formatDatavalue(datavalue, datatype, options)
-- Use the customize handler if provided
if isvalid(options["value-module"]) and isvalid(options["value-function"]) then
local formatter = require("Module:" .. options["value-module"])
if not formatter then
return { value = formatError("value-module-not-found") }
end
local fun = formatter[options["value-function"]]
if not fun then
return { value = formatError("value-function-not-found") }
end
return { value = fun(datavalue, datatype, options) }
end
-- Default dataformatters
local dataformatters = {
["wikibase-item"] = formatwikibaseitem,
["wikibase-property"] = formatwikibaseproperty,
["commonsMedia"] = formatcommonsMedia,
["math"] = formatmath,
["time"] = formattime,
["external-id"] = formatexternalid,
["string"] = formatstring,
["globe-coordinate"] = formatcoordinate,
["quantity"] = formatquantity,
["url"] = formaturl,
["monolingualtext"] = formatmonolingualtext,
["geo-shape"] = formatgeoshape,
["tabular-data"] = formattabulardata
}
local dataformatter = dataformatters[datatype]
if not dataformatter then
return { value = formatError("unknown-data-type") }
end
return dataformatter(datavalue, datatype, options)
end
function formatSnak(snak, options)
if snak.snaktype == "somevalue" then
local somevalue = options.somevalue or i18n["somevalue"]
return { value = somevalue }
elseif snak.snaktype == "novalue" then
local novalue = options.novalue or i18n["novalue"]
return { value = novalue }
elseif snak.snaktype == "value" then
local s = formatDatavalue(snak.datavalue, snak.datatype, options)
if s and s.value and isvalid(s.value) then
s.value = (options.prefix or "") .. s.value .. (options.suffix or "")
end
return s
else
return { value = formatError("unknown-snak-type") }
end
end
function formatStatement(statement, options)
local claimModule = options["claim-module"]
local claimFunction = options["claim-function"]
if isvalid(claimModule) and isvalid(claimFunction) then
local formatter = require("Module:" .. claimModule)
if not formatter then
return { value = formatError("claim-module-not-found") }
end
local fun = formatter[claimFunction]
if not fun then
return { value = formatError("claim-function-not-found") }
end
return { value = fun(statement, options) }
elseif statement.type == "statement" then
local s = formatSnak(statement.mainsnak, options)
s.formated_quals = {}
if isvalid(s) then
if statement.qualifiers then
s.formated_quals = formatqualifiers(statement, s, options)
--if isvalid(qualu) then table.insert(qualu) end
end
if statement.references and isvalid(options.reff) then
s.reff = formatReferences(statement, options)
end
end
return s
elseif not statement.type then
return formatSnak(statement, options)
end
return { value = formatError("unknown-claim-type") }
end
function formatOneStatement(statement, ref, options)
local value = nil
local stat = formatStatement(statement, options)
if not stat then
return { v = value, raw = stat }
end
local s = stat.value
if isntvalid(s) then
return { v = value, raw = stat }
end
if isvalid(options.reff) and stat.reff then
s = s .. stat.reff
end
local function qoo(Prefix, qualpref, p, Suffix)
if isvalid(p) then
local stri = (Prefix or " (") .. (qualpref or "") .. p .. (Suffix or ")")
return mw.text.tag("small", {}, stri)
end
end
local QPrefix = isvalid(options.qualifierprefix)
local QSuffix = isvalid(options.qualifiersuffix)
local function addQualifier(qual_value, numb, qpPrefix, qpSuffix)
local qual_option = "qual" .. numb
local qual_pref_option = options[qual_option .. "pref"] or ""
if isvalid(qual_value) and isvalid(qual_option) then
local stri = (qpPrefix or " (") .. qual_pref_option .. qual_value .. (qpSuffix or ")")
-- s = s .. qoo(qpPrefix, qual_pref_option, qual_value, qpSuffix)
s = s .. mw.text.tag("small", {}, stri)
end
end
local formated_quals = stat.formated_quals or {}
addQualifier(formated_quals.qual1, "1", QPrefix, QSuffix)
if isvalid(formated_quals.qual1a) and isvalid(options.qual1a) then
local qual1apref = isvalids({ options.qual1apref, options.qp1apref })
s = s .. qoo(QPrefix, qual1apref, formated_quals.qual1a, QSuffix)
end
addQualifier(formated_quals.qual2, "2", QPrefix, QSuffix)
addQualifier(formated_quals.qual3, "3", QPrefix, QSuffix)
addQualifier(formated_quals.qual4, "4", QPrefix, QSuffix)
addQualifier(formated_quals.qual5, "5", QPrefix, QSuffix)
if isvalid(options.justthisqual) then
s = formated_quals.justthisqual or nil -- We need only the qualifier
end
if isntvalid(s) then
return { v = value, raw = stat }
end
if isvalid(formated_quals.P585) and isvalid(options.withdate) then
if options.withdate == "y" then
s = s .. qoo(QPrefix, "سنة ", formated_quals.P585, QSuffix)
elseif options.withdate == "before" then
s = "*" .. formated_quals.P585 .. ":" .. s .. "\n"
else
s = s .. qoo(QPrefix, "", formated_quals.P585, QSuffix)
end
end
local bothdates = options.bothdates
if isvalid(formated_quals.tifr) and isvalid(bothdates) then
local dateStr = qoo(QPrefix, "", formated_quals.tifr, QSuffix)
if bothdates == "line" then
s = s .. mw.text.tag("br") .. dateStr
elseif bothdates == "before" then
s = dateStr .. s
else
s = s .. dateStr
end
end
if type(ref) == "table" or isvalids({ options.noref, options.justthisqual }) then
value = s
else
local t = formatReferences(statement, options)
stat.ref = t
if isvalid(options.justref) then
value = t
elseif isvalid(options.onlyvaluewithref) and isvalid(t) then
value = s .. t
else
value = s .. t
end
end
return { v = value, raw = stat }
end
function get_claims(entity, property, options)
local claims = {}
--Format statement and concat them cleanly
if options.rank == "best" or isntvalid(options.rank) then
--claims = entity:getAllStatements( property )
claims = entity:getBestStatements(property)
elseif options.rank == "valid" then
for i, statement in pairs(entity.claims[property]) do
if statement.rank == "preferred" or statement.rank == "normal" then
table.insert(claims, statement)
end
end
elseif options.rank == "all" then
for i, statement in pairs(entity.claims[property]) do
table.insert(claims, statement)
end
else
for i, statement in pairs(entity.claims[property]) do
if statement.rank == options.rank then
table.insert(claims, statement)
end
end
end
return claims
end
function add_box(value)
local formattedvalue = mw.html.create('div')
:wikitext(value)
local divNavHead = mw.html.create('div')
:attr({
class = "",
style =
"text-align:right; padding: 0; font-size: 75%;"
})
:wikitext(" [[ملف:Incomplete list.svg|20x20px|link=]] القائمة ...") --[عرض]/[إخفاء]
formattedvalue
:addClass('mw-collapsible-content')
divNavHead = mw.html.create('div'):node(divNavHead)
formattedvalue = mw.html.create('div')
:attr({ class = "mw-collapsible mw-collapsed ", style = "border: none; padding: 0;" })
:node(divNavHead)
:node(formattedvalue)
return tostring(formattedvalue)
end
function value_table_to_text(options, valuetable)
local priff = ""
local Separator = isvalid(options.separator) or isvalid(options.conjunction)
if Separator == "br" then
Separator = mw.text.tag("br")
end
if Separator == "empty" or options.separator == "" then
priff = ""
Separator = ""
end
if Separator == "*" then
priff = "\n*"
Separator = "\n*"
end
if Separator == "#" then
priff = "\n#"
Separator = "\n#"
end
if isvalid(options.justref) then
priff = ""
Separator = ""
end
if isvalid(options.justonevalue) then
-- only one value
valuetable = { valuetable[1] }
end
local result = mw.text.listToText(valuetable, Separator, Separator)
if isvalid(priff) and #valuetable > 1 then
result = priff .. result
end
local max_num = tonumber(isvalid(options.hidden)) or config.max_claims_to_use_hidelist
if isvalids({ options.hidden, options.barlist }) and isntvalid(options["claim-function"]) and isntvalid(options["property-function"]) and #valuetable > max_num then
if isvalid(options.addTrackingCat) then
p.track_cat_done = true
result = result .. addTrackingCategory(options)
end
result = add_box(result)
end
return result
end
function add_suffix_pprefix(options, prop)
if isvalid(options.mainprefix) then -- mainprefix
prop = options.mainprefix .. prop
end
if isvalid(options.mainsuffix) then -- mainsuffix
prop = prop .. options.mainsuffix
end
if isvalid(options.addTrackingCat) and not p.track_cat_done then -- add tracking cat
prop = prop .. addTrackingCategory(options)
end
if isvalid(options.mainsuffixAfterIcon) then -- another suffix but after wikidata icon
prop = prop .. options.mainsuffixAfterIcon
end
return prop
end
function formatStatements(options, LuaClaims)
local valuetable = {} -- formattedStatements
local claims = {}
if isntvalid(options.property) and isvalid(options.pid) then
options.property = options.pid
end
if isntvalid(options.property) then
return formatError("property-param-not-provided")
end
local option1 = options.option1
if option1 and options.option1value then
options[option1] = options.option1value
options['"' .. option1 .. '"'] = options.option1value
--mw.log( "option1: " .. option1 .. "value: " .. options.option1value )
end
if type(LuaClaims) == "table" then
claims = LuaClaims[options.property] or {}
--mw.log("module:wikidata2: claims = LuaClaims[options.property]")
else
--Get entity
local entity = nil
if options.entity and type(options.entity) == "table" then
entity = options.entity
else
local id = get_entityId(options)
if isvalid(id) then
--mw.ustring.match(id, "Q%d+") or mw.ustring.match(id, "P%d+")
if mw.wikibase.isValidEntityId(id) and mw.wikibase.entityExists(id) then
options.entityId = id
options.qid = id
else
mw.addWarning(id .. " لا يمثل معرف ويكي بيانات صحيح")
return ""
end
end
entity = getEntityFromId(id)
end
if not entity then
return ""
end
--local property = mw.wikibase.resolvePropertyId( options.property:upper() )
local property = options.property:upper()
if not entity.claims or not entity.claims[property] then
if isvalid(options.otherproperty) then
options.property = options.otherproperty
property = options.otherproperty:upper()
end
end
if property == nil then
return ""
end
if not entity.claims or not entity.claims[property] then
return "" --TODO error?
end
claims = get_claims(entity, property, options)
end
if isntvalid(options.langpref) then
claims = filter_langs(claims, options)
end
if isvalid(options.sort_before_filter) then
claims = sortclaims.sort_claims(claims, options)
claims = filterclaims.filter_claims(claims, options)
else
claims = filterclaims.filter_claims(claims, options)
claims = sortclaims.sort_claims(claims, options)
end
local statementsraw = {}
if isvalid(options.numberofclaims) then
return #claims
end
if claims then
if isvalid(options["property-module"]) and isvalid(options["property-function"]) then
local formatter = require("Module:" .. options["property-module"])
if not formatter then
return formatError("property-module-not-found")
end
local fun = formatter[options["property-function"]]
if not fun then
return formatError("property-function-not-found")
end
mw.log("work with property-module: " .. options["property-module"] .. "|" .. options["property-function"])
return fun(claims, options)
else
for i, statement in pairs(claims) do
options.num = i
local va = formatOneStatement(statement, LuaClaims, options)
if va.v then
table.insert(valuetable, va.v)
end
table.insert(statementsraw, va.raw)
end
end
end
if isvalid(options.raw) then
if isvalid(options.rawtolua) then
return mw.getCurrentFrame():extensionTag("source", mw.dumpObject(statementsraw), { lang = "lua" })
end
return statementsraw
end
local result = ""
if #valuetable > 0 then
result = value_table_to_text(options, valuetable)
end
if isntvalid(result) then
result = nil
end
return result
end
function formatReferences(statement, options)
local ic = 1
local reference = {}
local numberofref = tonumber(options.numberofreferences) or config.max_number_of_ref
local qid = get_entityId(options)
local statementreferences = statement.references
if statementreferences then
if Modulecite == nil then
Modulecite = require(citetitle)
end
for i, ref in ipairs(statementreferences) do
if ref.snaks and numberofref >= ic then
local s = Modulecite._cite_wikidata(ref, qid)
if isvalid(s) then
ic = ic + 1
table.insert(reference, s)
end
end
end
end
local final = table.concat(reference)
if isvalid(final) then
final = final .. i18n.cateref
end
return final or ""
end
function formatqualifiers(statement, s, options)
local qualifiers = {}
local function qua(p, firstvalue, modifytime)
local vvv
if isvalid(p) then
vvv = formatStatements({
property = p,
enlabelcate = "t",
firstvalue = (firstvalue or ""),
modifytime = (modifytime or "longdate"),
noref = "t"
}, statement.qualifiers) or ""
return vvv
end
end
if isvalid(options.withdate) then
--if statement.qualifiers.P585 then
qualifiers.P585 = qua("P585", "true", options.modifyqualifiertime)
end
local bothdates_option = options.bothdates
if isvalid(bothdates_option) then
if statement.qualifiers.P580 or statement.qualifiers.P582 then
local f = qua("P580", "true", options.modifyqualifiertime)
local t = qua("P582", "true", options.modifyqualifiertime)
qualifiers.tifr = f .. "–" .. t
end
end
local function quaaal(opti, options)
if isvalid(opti) and statement.qualifiers[opti] then
local kkk = formatStatements({
property = opti,
noref = "t",
separator = options.qualifierseparator,
conjunction = options.qualifierconjunction,
size = options.size,
image = options.image,
modifytime = options.modifyqualifiertime,
enlabelcate = "t",
langpref = options.langpref,
showlang = options.showlang
},
statement.qualifiers) or ""
return kkk
end
end
if isvalid(options.justthisqual) and statement.qualifiers[options.justthisqual] then
qualifiers.justthisqual = quaaal(options.justthisqual, options)
end
if isvalid(options.qual1) and statement.qualifiers[options.qual1] then
qualifiers.qual1 = quaaal(options.qual1, options)
end
if isvalid(options.qual1a) and statement.qualifiers[options.qual1a] then
qualifiers.qual1a = quaaal(options.qual1a, options)
end
if isvalid(options.qual2) and statement.qualifiers[options.qual2] then
qualifiers.qual2 = quaaal(options.qual2, options)
end
if isvalid(options.qual3) and statement.qualifiers[options.qual3] then
qualifiers.qual3 = quaaal(options.qual3, options)
end
if isvalid(options.qual4) and statement.qualifiers[options.qual4] then
qualifiers.qual4 = quaaal(options.qual4, options)
end
if isvalid(options.qual5) and statement.qualifiers[options.qual5] then
qualifiers.qual5 = quaaal(options.qual5, options)
end
return qualifiers
end
function get_property1(options, item)
--[[ function to get countries flags without reload large countries items ]]
local flagprop = { "p27", "p1532", "p17", "p495", "p1376" }
local work_flag = false
if string.lower(options.property1) == "p41" then
for k, l in pairs(flagprop) do
if string.lower(options.property) == l then
work_flag = true
end
end
end
local caca = ""
local size = options.size or ""
if isntvalid(size) then
size = "20"
end
if work_flag then
if Moduleflags == nil then
Moduleflags = require("Module:Wikidata2/Flags")
end
local flag = Moduleflags[item]
if isntvalid(flag) then
flag = formatStatements({
property = options.property1,
otherproperty = options.otherproperty1,
entityId = item,
rank = options.property1rank,
pattern = options.property1pattern,
formatting = options.property1formatting,
noref = "t",
firstvalue = "t"
})
--mw.log("get flag2 :" .. flag .. ", for item ".. item )
end
if isvalid(flag) then -- return real image
if isvalid(options.image) then -- return real image
caca = "[[ملف:" .. flag .. "|" .. size .. "px|" .. "border" .. "]]"
end
end
end
if isntvalid(caca) then
caca = formatStatements({
property = options.property1,
otherproperty = options.otherproperty1,
entityId = item,
rank = options.property1rank,
pattern = options.property1pattern,
formatting = options.property1formatting,
size = options.size,
image = options.image,
noref = "t",
firstvalue = "t"
})
end
return caca
end
function formatsitelink(entityId, options)
--[[ function to get only the value with link ]]
local link = sitelink(entityId)
if isvalid(link) and isntvalid(options.nolink) then
return "[[" .. link .. "]]" .. catewikidatainfo(options)
end
return link
end
function formatwikibaseitem(datavalue, datatype, options)
--[[ datatype wikibase-item ]]
local value
local itemqid = datavalue.value.id
local Skipped = skiip_items[options.property] or {}
for k, v in pairs(Skipped) do
if datavalue.value.id == v then
return { value = "", item = "" }
end
end
if isvalid(options.formatting) then
if options.formatting == "raw" then
return { value = itemqid, item = itemqid }
elseif options.formatting == "rawtotemplate" and isvalid(options.rawtotemplate) then
local args = { q = itemqid, no1 = options.no1 or "", no2 = options.no2 or "" }
value = mw.getCurrentFrame():expandTemplate { title = options.rawtotemplate, args = args } .. "\n"
return { value = value, item = itemqid }
elseif options.formatting == "sitelink" then
value = formatsitelink(datavalue.value.id, options)
return { value = value, item = itemqid }
else
value = formatcharacters(datavalue.value, options)
if isvalid(options.pattern) then
value = formatFromPattern(value, options)
end
return { value = value, item = itemqid }
end
end
local itemValue = formatEntityId(itemqid, options).value
if isvalid(itemValue) then
if isvalid(options.property1) and options.property1:upper():sub(1, 1) == "P" then
local prop1value = get_property1(options, itemqid)
if isvalid(prop1value) then
prop1value = (options.property1pref or "") .. "" .. prop1value .. "" .. (options.property1suff or "")
value = prop1value .. " " .. itemValue
if isvalid(options.property1after) then
value = itemValue .. prop1value
end
else
value = itemValue
end
return { value = value, item = itemqid }
elseif isvalid(options.propertyimage) then
local p_f = options.propertyimageformatting or options.formattingpropertyimage
local vas = formatStatements({
property = options.propertyimage,
formatting = p_f,
entityId = itemqid,
rank = options.rank,
pattern = options.pattern,
size = options.size,
image = options.image,
noref = "t",
avoidvalue = options.avoidvaluepropertyimage,
firstvalue = "t",
nolink = options.nolink
})
if isvalid(vas) then
return { value = vas }
end
elseif isvalid(options.property2) then
local caca = formatStatements({
property = options.property2,
entityId = itemqid,
noref = options.noref,
rank = options.rank,
pattern = options.property2pattern,
size = options.size,
image = options.image,
propertyimage = (options.property3 or ""),
firstvalue = "t"
})
if isvalid(caca) then
return { value = caca .. " " .. itemValue }
end
end
end
return { value = itemValue, item = itemqid }
end
function formatwikibaseproperty(datavalue, datatype, options)
--[[ datatype wikibase-property ]]
local tid = ""
if isvalid(options.formatting) then
if options.formatting == "raw" then
tid = datavalue.value.id
end
else
tid = formatEntityId(datavalue.value.id, options).value
end
return { value = tid }
end
function formattabulardata(datavalue, datatype, options)
--[[ tabular-data ]]
local data = "[[commons:" .. datavalue.value .. "|" .. datavalue.value .. "]]"
return { value = data }
end
function formatgeoshape(datavalue, datatype, options)
--[[ geo-shape ]]
local shape = "[[commons:" .. datavalue.value .. "|" .. datavalue.value .. "]]"
return { value = shape }
end
function formatcommonsMedia(datavalue, datatype, options)
local tid
--[[ commonsMedia ]]
local size = isvalid(options.size) or "280x330px"
-- add px to size if just a number
if (tonumber(size) or 0) > 0 then
size = size .. "px";
end
if isvalid(options.image) then -- return real image
tid = "[[ملف:" .. datavalue.value .. "|" .. size .. ""
if isvalid(options.center) then
tid = tid .. "|center"
end
-- |class=skin-invert
if options.property == "P109" then
tid = tid .. "|class=skin-invert"
end
tid = tid .. "]]"
else
tid = formatcharacters(datavalue.value, options)
end
return { value = tid }
end
function formatmath(datavalue, datatype, options)
--[[datatype math ]]
--return {value=mw.text.tag("math", {}, "".. datavalue.value.."") } -- that doesn't work well
local result = mw.getCurrentFrame():callParserFunction("#tag:math", datavalue.value)
return { value = result }
end
function formatstring(datavalue, datatype, options)
--[[ datatype string ]]
local par = options.pattern
local result = formatcharacters(datavalue.value, options)
local tid = result
if isvalid(options.stringpattern) then
tid = mw.ustring.gsub(options.stringpattern, "$1", datavalue.value)
elseif isvalid(par) then
if par ~= "autourl" and par ~= "autourl2" and par ~= "autourl3" and par ~= "autourl4" then
tid = formatFromPattern(result, options)
end
end
return { value = tid }
end
function formatexternalid(datavalue, datatype, options)
local result = formatcharacters(datavalue.value, options)
if isntvalid(options.pattern) then
return { value = result } --just return value
end
local patter =
formatStatements({ property = "P1630", entityId = options.property, firstvalue = "t", noref = "t", rank = "all" }) -- get formatter URL
local par = options.pattern
local tid = result
if isvalid(patter) then -- if P1630 are there
local pp = formatFromPattern(datavalue.value, { pattern = patter })
local plabel = mw.wikibase.getLabel(options.property) or pp
local ppp = mw.ustring.gsub(pp, " ", "_")
local results = {
["autourl"] = ppp, -- like http://example.com/$1.html
["autourl2"] = "[" .. ppp .. " " .. datavalue.value .. "]", -- like [http://example.com/$1.html $1]
["autourl3"] = "[" .. ppp .. " " .. ppp .. "]", -- like [http://example.com/$1.html http://example.com/$1.html]
["autourl4"] = "[" .. ppp .. " " .. plabel .. "]"
}
if results[par] then
tid = results[par]
else
tid = formatFromPattern(result, options)
end
elseif isvalid(par) then
if par ~= "autourl" and par ~= "autourl2" and par ~= "autourl3" and par ~= "autourl4" then
tid = formatFromPattern(result, options)
end
end
return { value = tid }
end
function formattime(datavalue, datatype, options)
--[[ datatype time ]]
if ModuleTime == nil then
ModuleTime = require "Module:wikidata2/time"
end
local timen = datavalue.value
local tid = ModuleTime.getdate(timen, options)
-- local tid = mw.getCurrentFrame():preprocess(mall)
if isvalid(options.modifytime) then
if options.modifytime == "q" then
local mall = datavalue.value.time
tid = mw.getCurrentFrame():preprocess(mall)
elseif options.modifytime == "precision" then
local mall = datavalue.value.precision
tid = mw.getCurrentFrame():preprocess(mall)
end
end
return { value = tid }
end
function formatcoordinate(datavalue, datatype, options)
--[[ datatype globe-coordinate ]]
--local GlobeCoordinate = require "Module:GlobeCoordinate"
--return {value=GlobeCoordinate.newFromWikidataValue( datavalue.value ):toHtml()}
if ModuleGlobes == nil then
ModuleGlobes = require("Module:Wikidata2/Globes")
end
local coord = datavalue.value
local globe = datavalue.value.globe
local globe2 = ModuleGlobes[globe] or ""
local results = {
latitude = coord.latitude,
longitude = coord.longitude,
dimension = coord.dimension,
precision = coord.precision,
globe = globe:match("Q%d+"),
globe2 = globe2
}
local pro = options.formatting and results[options.formatting]
if pro == nil then
pro =
mw.getCurrentFrame():preprocess(
"{{ {{{|safesubst:}}}#invoke:Coordinates|coord" ..
"|" .. coord.latitude ..
"|" .. coord.longitude ..
"|display=inline" ..
"|globe:" .. globe2 .. "_type:landmark" ..
"|format=" .. (options.formatcoord or "") .. "}}"
) .. catewikidatainfo(options)
end
return { value = pro }
end
function formatquantity(datavalue, datatype, options)
--[[ datatype quantity ]]
local amount, unit = datavalue.value.amount, datavalue.value.unit
amount = mw.ustring.gsub(amount, "+", "")
if unit then
unit = unit:match("Q%d+")
end
--[[
if formatera == nil then
formatera = require("Module:Wikidata2/Math")
end
local number = formatera.newFromWikidataValue(datavalue.value)
]]
--mw.log("number: " .. number)
local unitraw = unit
if unit and isvalid(options.unitshort) then
local lab = isvalid(options.label)
if not isvalid(lab) then
lab = formatStatements({
property = "P5061",
entityId = unit,
justonevalue = "t",
textformat = "text",
langpref = isvalid(options.langpref) or "ar",
noref = "t"
})
end
if not isvalid(lab) then
lab = formatStatements({
property = "P498",
entityId = unit,
justonevalue = "t",
textformat = "text",
langpref = isvalid(options.langpref) or "ar",
noref = "t"
})
end
lab = lab or ""
local s = formatEntityId(unit,
{ label = lab, enlabelcate = "t", nolink = (options.nounitlink or options.nolink) })
unit = s.value
elseif unit then
local s = formatEntityId(unit, { nolink = options.nounitlink, enlabelcate = "t" })
unit = s.value
end
if options.formatcharacters and options.formatcharacters == "formatnum" then
amount = make_format_num(amount)
end
local Value = amount .. " " .. (unit or "")
if isvalid(options.nounit) then
Value = amount
end
return { value = Value, amount = amount, unit = unit, unitraw = unitraw }
end
function formaturl(datavalue, datatype, options)
--[[ datatype url ]]
local label = options.label
if isvalid(options.urllabel) then
label = options.urllabel
end
local va = mw.ustring.gsub(datavalue.value, " ", "_")
if label == nil and options.property == "P856" then
label = "الموقع الرسمي"
end
if isvalid(options.displayformat) == "weblink" then
if weblink == nil then
weblink = require("Module:Weblink")
end
return { value = weblink.makelink(va) }
end
if isvalid(options.formatting) == "raw" then
return { value = va }
end
local pro = va
if isvalid(label) then
pro = "[" .. va .. " " .. label .. "]"
end
return { value = pro }
end
function formatmonolingualtext(datavalue, datatype, options) -- showlang
local text = datavalue.value.text
if Moduletext == nil then
Moduletext = require "Module:wikidata2/monolingualtext"
end
local tid = Moduletext._main(datavalue, datatype, options)
return { value = tid }
end
function Labelfunction(qid, arlabel, options) -- label with no arwiki sitelink
local value
local cat = ""
local en_label = mw.wikibase.getLabel(qid) or ""
if isvalid(options.illwd2) then
if Moduleill_wd2 == nil then
Moduleill_wd2 = require("Module:Wikidata2/Ill-WD2")
end
value = Moduleill_wd2.Ill_WD2_label(qid, arlabel, options)
--
elseif isvalid(arlabel) then
value = arlabel
--
elseif isntvalid(options.justarabic) then
local use_en_label = isvalids({ options.enlabelcate, options.use_en_labels })
if isvalid(en_label) and use_en_label then
value = en_label
end
end
return { value = value or "", cat = cat }
end
function formatEntityId(qid, options)
local label = ""
local value
local arlabel = labelIn("ar", qid) or "" -- The arabic label
local link = mw.wikibase.getSitelink(qid)
if isvalid(options.label) then
label = options.label
elseif isvalid(options.female_label) then
label = options.female_label
elseif isvalid(arlabel) then
--mw.log("arlabel" .. arlabel)
label = arlabel
elseif isvalid(link) then
label = link
arlabel = link
end
if isvalid(link) then
local linklabel = isvalid(label) or link
if (isntvalid(options.nolink)) then
value = "[[:" .. link .. "|" .. formatcharacters(linklabel, options) .. "]]"
label = linklabel
else
value = formatcharacters(linklabel, options)
label = linklabel
end
else
if isvalid(options.female_label) then
arlabel = options.female_label
end
local va = Labelfunction(qid, arlabel, options)
label = va.value
value = va.value -- .. va.cat
end
return { value = value or "", label = label or "" }
end
function sitelink(id, wikisite)
local site = wikisite or mw.wikibase.getGlobalSiteId() -- "arwiki"
local link = ""
--local link = mw.wikibase.getSitelink( id, site ) or ""
local entity = mw.wikibase.getEntity(id)
if
entity and entity.sitelinks and entity.sitelinks["" .. site .. ""] and entity.sitelinks["" .. site .. ""].site and
entity.sitelinks["" .. site .. ""].title
then
if entity.sitelinks["" .. site .. ""].site == site then
link = entity.sitelinks["" .. site .. ""].title
end
end
return link
end
function p.formatAndCat(args)
if args == nil then
return nil
end
Frame_args = args
args.linkback = args.linkback or true
args.addcat = true
if isvalid(args.value) and args.value == "-" then
return nil
end
if isvalid(args.value) then
local val = args.value .. addTrackingCategory(args)
val = p.addLinkBack(val, args.entity, args.property)
return val
end
return p.formatStatementsFromLua(args)
end
function p.getEntity(id)
if type(id) == "table" then
return id
end
return getEntityFromId(id)
end
function p.translate(str, rep1, rep2)
str = i18n[str] or str
if rep1 and (type(rep1) == "string") then
str = str:gsub("$1", rep1)
end
if rep2 and (type(rep2) == "string") then
str = str:gsub("$2", rep2)
end
return str
end
function p.getId(snak)
if (snak.snaktype == "value") then
if snak.datavalue.type == "wikibase-entityid" then
return "Q" .. snak.datavalue.value["numeric-id"]
end
end
end
function p.addLinkBack(str, id, property)
if not id then
id = p.getEntity()
end
if not id then
return str
end
if type(property) == "table" then
property = property[1]
end
if type(id) == "table" then
id = id.id
end
local class = ""
if property then
class = "wd_" .. string.lower(property)
end
local icon = "[[ملف:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]"
local title = i18n["see-wikidata-value"]
local url = mw.uri.fullUrl("d:" .. id, "uselang=ar")
url.fragment = property
url = tostring(url)
local v =
mw.html.create("span"):addClass(class):wikitext(str):tag("span"):addClass("noprint wikidata-linkback"):css(
"padding-left",
"0.5em"
):wikitext(icon:format(title, url)):allDone()
return tostring(v)
end
function p.formatSnak(snak, options)
return formatSnak(snak, options)
end
function p.formatEntityId(entityId, options)
return formatEntityId(entityId, (options or {}))
end
function p.formatStatements(frame, key)
-- {{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P19}}
-- {{#invoke:Wikidata2|fs|qid={{{qid|}}}|pid=P19}}
if frame.args then
if type(key) == "table" and key ~= {} then
else
Frame_args = frame.args
end
end
--[[ The main function ]]
local args = frame.args
--If a value if already set, use it
if isvalid(args.value) then
return args.value
end
-- arg used to ban wikidata value
local wd_arg = frame:getParent().args["ويكي بيانات"] or frame.args["ويكي بيانات"] or frame:getParent().args.no_wd or
frame.args.no_wd
if anyvalid(wd_arg) == "لا" then
return ""
end
local prop = formatStatements(args, key)
if isvalid(prop) then
prop = add_suffix_pprefix(args, prop)
elseif isvalid(args.NoPropValue) then -- value if no local value and no wikidata value
prop = args.NoPropValue
end
return prop
end
function p.formatStatementsFromLua(options, key) -- main function but to use from lua module
if options then
if type(key) == "table" and key ~= {} then
else
Frame_args = options
end
end
--If a value if already set, use it
if isvalid(options.value) then
return options.value
end
local s = formatStatements(options, key)
if isntvalid(s) then
s = nil
end
if isvalid(s) then
s = add_suffix_pprefix(options, s)
else
if isvalid(options.NosValue) then -- value if no local value and no wikidata value
s = options.NosValue
end
end
return s
end
function p.fs(frame, key)
-- {{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P19}}
-- {{#invoke:Wikidata2|fs|qid={{{qid|}}}|pid=P19}}
return p.formatStatements(frame, key)
end
function p.getLabel(entity, lang)
return labelIn(lang, entity)
end
-- Return the site link for a given data item and a given site (the current site by default)
function p.getSiteLink(frame)
local site = frame.args[2] or frame.args.site
local id = frame.args[1] or frame.args.id
local count = frame.args.countsitelinks
if isntvalid(id) then
if isvalid(frame.args.page) then
id = mw.wikibase.getEntityIdForTitle(frame.args.page)
end
end
if isvalid(count) then
return p.countSiteLinks(id)
end
local link = sitelink(id, site)
if isvalid(link) then
return link
end
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
return mw.wikibase.getEntityIdForCurrentPage()
end
function p.descriptionIn(frame)
local langcode = frame.args[1] or frame.args["lang"]
local id = frame.args[2] or frame.args["id"]
return descriptionIn(langcode, id)
end
function p.labelIn(frame)
local langcode = frame.args[1] or frame.args["lang"]
local id = frame.args[2] or frame.args["id"]
return labelIn(langcode, id)
end
function p.EntityIdForTitle(frame)
local title = frame.args[1]
local str = mw.wikibase.getEntityIdForTitle(title)
--mw.log(str)
return str
end
function p.Qidfortitleandwiki(frame)
local title = mw.text.trim(frame.args[1] or "")
local wiki = mw.text.trim(frame.args[2] or "")
local str = mw.wikibase.getEntityIdForTitle(title, wiki)
return str
end
function p.isSubclass(frame)
Moduledump = require "Module:wikidata2/dump"
return Moduledump.isSubclass(frame)
end
function p.ViewSomething(frame)
Moduledump = require "Module:wikidata2/dump"
return Moduledump.ViewSomething(frame)
end
function p.Dump(frame)
Moduledump = require "Module:wikidata2/dump"
return Moduledump.Dump(frame)
end
return p