![]() | هذه الوحدة مستخدمة في عدد كبير من الصفحات . لتفادي خلق بلبلة على نطاق واسع من الصفحات وزيادة الأعباء على الخوادم، يجب تجربة أي تعديل في هذه الصفحات الفرعية /ملعب أو /تجربة أو في ملعبك. بعدها يمكنك إضافة التعديلات دفعة واحدة، ورجاءً، لا تنسَ مناقشة التعديلات أولًا قبل القيام بها. |
هذه الوحدة نسخت في البداية من sv:Modul:Wikidata2 ومن ثم تم تطويرها هنا.
الاستخدامات
أنظر قائمة قوالب تستخدم هذه الوحدة.
الوحدات الفرعية
- Wikidata2/Flags
- Wikidata2/Globes
- Wikidata2/Ill-WD2
- Wikidata2/Math
- Wikidata2/P106
- Wikidata2/P1082
- Wikidata2/P172
- Wikidata2/P3828
- Wikidata2/P39
- Wikidata2/P39/شرح
- Wikidata2/P54
- Wikidata2/P54/شرح
- Wikidata2/P569-P570
- Wikidata2/config
- Wikidata2/dump
- Wikidata2/filter claims
- Wikidata2/filter claims/شرح
- Wikidata2/link
- Wikidata2/monolingualtext
- Wikidata2/monolingualtext/شرح
- Wikidata2/otheruse
- Wikidata2/sort claims
- Wikidata2/tax
- Wikidata2/tax/cash
- Wikidata2/template
- Wikidata2/time
- Wikidata2/تحديث/شرح
- Wikidata2/شرح
- Wikidata2/ملعب
وحدان أخرى
الوحدات المستخدمة عبر |value-module=
أو |claim-module=
أو |property-module=
:
صفحات المختبر
الاستعمال
مثال
{{#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=Blue Moon (Q804574)
و|getonlyproperty=النشيد (P85)
(لنحصل على مانشستر سيتي فقط)
توصيف | وحدة:wikidata2 | وحدة:wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| false |
- dontget
- الوسيط
|dontget=
استخدامه عكس الوسيط السابق|getonly=
.
|dontget=Blue Moon (Q804574)
و|dontgetproperty=النشيد (P85)
(لنحصل على جميع القيم ما عدا مانشستر سيتي)
توصيف | وحدة:wikidata2 | وحدة:wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| false |
باستخدام القالب:
توصيف | قالب:قيمة ويكي بيانات | قالب:قيمة ويكي بيانات/ملعب | مطابق؟ |
---|---|---|---|
| false |
فصل القيم
|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 the Yemen Arab Republic.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 ريال مدريد Flag of Brazil.svg نادى كورينثيانز Flag of Brazil.svg نادى كروزيرو Flag of Brazil.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/ملعب | مطابق؟ |
---|---|---|---|
| خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | false |
وسيط |showlang=t
يستخدم لإظهار النص حسب تنسيق قالب:رمز لغة واسمها: ملاحظة (لا يستخدم القالب في النص العربي)
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | false |
وسيط |nolang=ar
يستخدم لإخفاء لغة معينة من الناتج، مثلًا لا نريد ظهور الاسم العربي كون المقالة بالعربية فلن يضيف أي قيمة!:
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | false |
وسيط |langpref=
يستخدم لتحديد اللغة المطلوب عرضها وتجاهل البقية:
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| منظمة الأمم المتحدة | منظمة الأمم المتحدة | true |
توصيف | وحدة:Wikidata2 | وحدة:Wikidata2/ملعب | مطابق؟ |
---|---|---|---|
| خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | خطأ لوا في وحدة:لغات على السطر 48: attempt to index field 'lang_name' (a nil value). | false |
القيم المقبولة الأخرى هي : 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
يكتب التاريخ في شكل "30 ابريل 2025"|modifytime=Y
يكتب التاريخ في شكل "2025" يظهر فقط السنة.|modifytime= F
يكتب التاريخ في شكل "ابريل" يظهر فقط الشهر.|modifytime= j
يكتب التاريخ في شكل "30" يظهر فقط اليوم.
|modifyqualifiertime=
تنسيق التاريخ على النحو الوارد أعلاه، ولكن يؤثر فقط على التصفيات.qualifier
معرف خارجي / external-id
توصيف | يظهر |
---|---|
| BarackObama[2] |
|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[3][4]
خيارات إضافية
|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}}توصيف يظهر {{#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 {
["P1310"] = table#7 {
table#8 {
["datatype"] = "wikibase-item",
["datavalue"] = table#9 {
["type"] = "wikibase-entityid",
["value"] = table#10 {
["entity-type"] = "item",
["id"] = "Q3137784",
["numeric-id"] = 3137784,
},
},
["hash"] = "a32d4811da28039799a992671e691fcb39d052d6",
["property"] = "P1310",
["snaktype"] = "value",
},
},
["P1932"] = table#11 {
table#12 {
["datatype"] = "string",
["datavalue"] = table#13 {
["type"] = "string",
["value"] = "Kapiolani Maternity & Gynecological Hospital",
},
["hash"] = "6fd68e03eb688ae2bc3065f585acd78edbe8fa5b",
["property"] = "P1932",
["snaktype"] = "value",
},
},
["P6375"] = table#14 {
table#15 {
["datatype"] = "monolingualtext",
["datavalue"] = table#16 {
["type"] = "monolingualtext",
["value"] = table#17 {
["language"] = "en",
["text"] = "6085 Kalanianaole Highway",
},
},
["hash"] = "2e9be82b6a3154de13d7196988eb8b40dc8f0252",
["property"] = "P6375",
["snaktype"] = "value",
},
},
["P7452"] = table#18 {
table#19 {
["datatype"] = "wikibase-item",
["datavalue"] = table#20 {
["type"] = "wikibase-entityid",
["value"] = table#21 {
["entity-type"] = "item",
["id"] = "Q71536040",
["numeric-id"] = 71536040,
},
},
["hash"] = "f9f842b41f249e5504d48025c7ad6d7b5bfc7496",
["property"] = "P7452",
["snaktype"] = "value",
},
},
},
["qualifiers-order"] = table#22 {
"P6375",
"P1932",
"P7452",
"P1310",
},
["rank"] = "preferred",
["references"] = table#23 {
table#24 {
["hash"] = "e91a853ea4e0b372b26f82a616b87eb645b0aff3",
["snaks"] = table#25 {
["P248"] = table#26 {
table#27 {
["datatype"] = "wikibase-item",
["datavalue"] = table#28 {
["type"] = "wikibase-entityid",
["value"] = table#29 {
["entity-type"] = "item",
["id"] = "Q14527788",
["numeric-id"] = 14527788,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
},
["snaks-order"] = table#30 {
"P248",
},
},
},
["type"] = "statement",
},
table#31 {
["id"] = "Q76$7ba7f268-4c19-b92f-7254-f8ed65aed53f",
["mainsnak"] = table#32 {
["datatype"] = "wikibase-item",
["datavalue"] = table#33 {
["type"] = "wikibase-entityid",
["value"] = table#34 {
["entity-type"] = "item",
["id"] = "Q18094",
["numeric-id"] = 18094,
},
},
["property"] = "P19",
["snaktype"] = "value",
},
["rank"] = "normal",
["references"] = table#35 {
table#36 {
["hash"] = "207f35a0ea83b330f87438c914b0ab24558d2868",
["snaks"] = table#37 {
["P227"] = table#38 {
table#39 {
["datatype"] = "external-id",
["datavalue"] = table#40 {
["type"] = "string",
["value"] = "132522136",
},
["property"] = "P227",
["snaktype"] = "value",
},
},
["P248"] = table#41 {
table#42 {
["datatype"] = "wikibase-item",
["datavalue"] = table#43 {
["type"] = "wikibase-entityid",
["value"] = table#44 {
["entity-type"] = "item",
["id"] = "Q36578",
["numeric-id"] = 36578,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
["P407"] = table#45 {
table#46 {
["datatype"] = "wikibase-item",
["datavalue"] = table#47 {
["type"] = "wikibase-entityid",
["value"] = table#48 {
["entity-type"] = "item",
["id"] = "Q188",
["numeric-id"] = 188,
},
},
["property"] = "P407",
["snaktype"] = "value",
},
},
["P813"] = table#49 {
table#50 {
["datatype"] = "time",
["datavalue"] = table#51 {
["type"] = "time",
["value"] = table#52 {
["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#53 {
"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 }} | خطأ: الوظيفة "Qidfortitleandwiki" غير موجودة. |
آخر التحديثات
- 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.
- إضافة الخيار
- ↑ وصلة : http://geonames.org/71137 — الرخصة: رخصة المشاع الإبداعي الملزمة بالنسب لمؤلف العمل غير القابلة للإلغاء 3.0
- ↑ أ ب ت اسم اليوزر في تويتر: https://x.com/BarackObama — تاريخ الاطلاع: 27 سبتمبر 2024
- ↑ أ ب ت https://www.gala.fr/stars_et_gotha/barack_obama
- ↑ أ ب ت https://www.voici.fr/bios-people/barack-obama
-- local fallback = {'en', 'nb', 'da', 'nn', 'de', 'fr', 'es', 'it', 'pt','ar'}
local formatera = require('وحدة:Math')
local citetitle = 'Module:Cite'
if nil ~= string.find (mw.getCurrentFrame():getTitle(), 'ملعب', 1, true) then -- did the {{#invoke:}} use sandbox version?
citetitle = 'Module:Cite/ملعب' -- load sandbox versions of support modules
end
local weblink = require('Module:Weblink')
local Infobox_Image = require('Module:InfoboxImage').Infobox_Image
local p = {}
local Frame;
local Frame_args = {}
local i18n = {
["errors"] = {
["property-param-not-provided"] = "وسيط property موش متوفر.",
["entity-not-found"] = "الكيان موش موجود.",
["unknown-claim-type"] = "نوع claim موش معروف.",
["unknown-snak-type"] = "نوع snak موش معروف.",
["unknown-datatype"] = "نوع data موش معروف.",
["unknown-entity-type"] = "نوع entity موش معروف.",
["unknown-value-module"] = "لازم اضافة قيمه لـ value-module و value-function.",
["unknown-claim-module"] = "لازم اضافة قيمه لـ claim-module و claim-function.",
["unknown-property-module"] = "لازم اضافة قيمه لـ property-module و property-function.",
["property-module-not-found"] = "الوحده المستخدمه فى وسيط property-module موش موجوده.",
["property-function-not-found"] = "الوظيفه المستخدمه فى وسيط property-function موش موجوده.",
["value-module-not-found"] = "الوحده المستخدمه فى وسيط value-module موش موجوده.",
["value-function-not-found"] = "الوظيفه المستخدمه فى وسيط value-function موش موجوده.",
["claim-module-not-found"] = "الوحده المستخدمه فى وسيط claim-module موش موجوده.",
["claim-function-not-found"] = "الوظيفه المستخدمه فى وسيط claim-function موش موجوده."
},
["noarabiclabel"] = "تصنيف:صفحات ويكيداتا محتاجه تسميه مصريه",
["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]",
["somevalue"] = "", --''موش محدد''
["novalue"] ="",--قيمة مجهولة
["cateref"] = "[[" .. "تصنيف:صفحات فيها مراجع ويكيداتا" .. "]]",
['to translate'] = 'صفحات بتستعمل معطيات من ويكيداتا محتاجه ترجمه',
["trackingcat"] = 'صفحات بتستخدم خاصية $1',
['see-wikidata-value'] = "الاطلاع و مراجعة البيانات على ويكيداتا",
['see-wikidata'] = "راجع العنصر المقابل من ويكيداتا",
['see-another-project'] = "مقاله على $1",
['see-another-language'] = "مقاله على ويكيبيديا $1",
}
local sortingproperties = {'P585','P571','P580','P569','P582','P570'}
function No_Tracking_cat(options)
local notracking = options.notracking or Frame_args.notracking or ""
local raw = options.raw or Frame_args.raw or ""
local raw2 = options.raw2 or Frame_args.raw2 or ""
--mw.log("raw2" .. raw2 )
local nolink = options.nolink or Frame_args.nolink or ""
if notracking ~= "" or raw ~= '' or raw2 ~= '' or nolink ~= ''
then return true
end
return false
end
function addTrackingCategory(prop,options)
if No_Tracking_cat(options) then return prop end
local cat = require('Module:Wikidata/تتبع').makecategory1
local category = cat(options)
local nbsp = " "
if options.nbsp and options.nbsp ~= "" then nbsp = "" end
if prop and prop ~= '' then
if category and category ~= '' then
return prop .. nbsp .. category
else
return prop .. nbsp
end
end
end
function catewikidatainfo(options)
--[[ function to add tracking category ]]
--if (options.raw and options.raw ~= '') or (options.notracking and options.notracking== true) then return "" end
if No_Tracking_cat(options) then return "" end
local prop = options.property
local cat = ' [[' .. 'تصنيف:صفحات فيها داتا ويكيداتا|'.. (prop or 'wikidata') .. ']]'
if (not options.nolink or options.nolink == '')
then return cat else return ''
end
end
function countSiteLinks(id)
numb = 0
Table = {}
local entity = mw.wikibase.getEntityObject(id)
if entity and entity.sitelinks then
for i, v in pairs(entity.sitelinks) do
Table[v.site] = v.title
numb = numb +1
end
--return Frame:extensionTag("source", mw.dumpObject( Table ),{ lang= 'lua'})
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
--auktoritetsdata
function formatcharacters(label, options)
local formatcharacters = options.formatcharacters
--if options.FormatfirstCharacter and options.num == 1 then
--formatcharacters = options.FormatfirstCharacter
--end
if options.illwd2y and options.illwd2y ~= '' then
String2 = mw.ustring.gsub( label , '–', '-' )
ca = 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 )
ca = ca or mw.ustring.match( String2 , "%d%d%d%d", 1 ) or mw.ustring.match( String2 , "%d%d%d%d%-%d%d", 1 )
ca = ca or mw.ustring.match( String2 , "%d%d%d%d", 1 ) or String
return ca
end
if not formatcharacters or formatcharacters == '' then
return label
end
if formatcharacters == 'lcfirst' then
return mw.getCurrentFrame():preprocess("{{lcfirst: " .. label .. " }}")
elseif formatcharacters == 'ucfirst' then
return mw.language.getContentLanguage():ucfirst( label )
elseif formatcharacters == 'lc' then
return mw.getCurrentFrame():preprocess("{{lc: " .. label .. " }}")
elseif formatcharacters == 'uc' then
return mw.getCurrentFrame():preprocess("{{uc: " .. label .. " }}")
elseif formatcharacters == 'formatnum' then
return make_format_num( label )
end
return label
end
function getqualifierbysortingproperty(claim, sortingproperty)
for k, v in pairs(sortingproperty) do
if claim.qualifiers and claim.qualifiers[v] and claim.qualifiers[v][1].snaktype == 'value' then
return claim.qualifiers[v][1].datavalue.value.time
end
end
return nil
end
function getDate(claim, options)
local sortingproperty = sortingproperties
if type(options.sortingproperty) == 'table' then
sortingproperty = options.sortingproperty
elseif type(options.sortingproperty) == 'string' and options.sortingproperty ~= '' then
sortingproperty = {options.sortingproperty}
end
return getqualifierbysortingproperty(claim, sortingproperty)
end
function get_entityId(options)
local id = options.entityId or options["entityId"]
id = id or options.id or options["id"]
if not id or id == "" then
if options.page and options.page ~= "" then
id = mw.wikibase.getEntityIdForTitle( options.page )
end
end
--mw.log("id :" .. id)
return id or ""
end
function getDateArb(claim, options)
local sortingproperty = options.sortingproperty or 'P569'
if claim.mainsnak.snaktype == 'value' then
local item = claim.mainsnak.datavalue.value['numeric-id']
if claim.mainsnak.datavalue.value['entity-type'] == 'item' then
item = 'Q' .. item
elseif claim.mainsnak.datavalue.value['entity-type'] == 'property' then
item = 'P' .. item
end
return formatStatements({property = sortingproperty, entityId = item, firstvalue = 'true', sortbytime = 'chronological', noref = 'true'})
end
end
function descriptionIn(langcode , id) -- returns item description for a given language
local lan = 'arz' or langcode
local entity = getEntityFromId(id)
if entity and entity.descriptions then
local description = entity.descriptions[lan]
if description and description.value
then
-- return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'})
if description['language'] == lan then
return description.value
else return nil end
end
else
lan = 'ar' or langcode
entity = getEntityFromId(id)
if entity and entity.descriptions then
local description = entity.descriptions[lan]
if description and description.value
then
if description['language'] == lan then
return description.value
else return nil end
end
end
end
end
function labelIn(langcode,id) -- returns item label for a given language
if not mw.wikibase then return nil end
local lang = 'arz'
if type(id) ~= "string" then id = tostring(id) end
local label = mw.wikibase.getLabelByLang( id , lang ) or nil
if not label or label == '' then
lang = langcode or 'ar'
if type(id) ~= "string" then id = tostring(id) end
label = mw.wikibase.getLabelByLang( id , lang ) or nil
end
return label
--[[ 2nd old way
local label, lange = mw.wikibase.getLabelWithLang( id )
if lange == lang
then
return label
else
return nil
--return str
end ]]
--[[ old way
local entity = mw.wikibase.getEntityObject(id)
if entity
and entity.labels
and entity.labels[''..lang..'']
and entity.labels[''..lang..''].value
then
local lang = entity.labels[''..lang..'']
if lang['language'] == lang then
return entity.labels[''..lang..''].value
else return nil end
end
]]
end
function get_snak_id(snak)
if snak
and snak.type
and snak.type == "statement"
and snak.mainsnak
and snak.mainsnak.snaktype
and snak.mainsnak.snaktype == "value"
and snak.mainsnak.datavalue
and snak.mainsnak.datavalue.type
and snak.mainsnak.datavalue.type == "wikibase-entityid"
and snak.mainsnak.datavalue.value
and snak.mainsnak.datavalue.value.id
then
--ID = 'Q' .. snak.datavalue.value['numeric-id']
ID = snak.mainsnak.datavalue.value.id
return ID
end
end
function comparedates(a, b) -- returns true if a is earlier than B or if a has a date but not b
if a and b then
return a > b
elseif a then
return true
end
end
function getonly(claims, options)
-- options.getonly
-- options.getonlyproperty
local claims2 = {}
--mw.log("wikidata2 : getonly:" .. options.getonly )
for i, j in pairs(claims) do
local id = get_snak_id(j)
--if j.mainsnak and j.mainsnak.snaktype == 'value' and j.mainsnak.datavalue and j.mainsnak.datavalue.value and j.mainsnak.datavalue.value.id then
--local id = j.mainsnak.datavalue.value.id
if id then
local traff = false
local t2 = formatStatements( {property = (options.getonlyproperty or "P31"), entityId = id, noref = 'true', raw = 'true' })
if t2 and #t2 > 0 then
for k, state in pairs( t2 ) do
for j2, only in pairs(mw.text.split(options.getonly,',')) do
if state.item == only then
traff = true
end
end
end
end
if traff then
table.insert(claims2, j)
end
end
end
return claims2
end
function claimindex(claims, options)
local claims2 = {}
for j, index in pairs(mw.text.split(options.claimindex,',')) do
if tonumber(index) and #claims >= tonumber(index) then
table.insert(claims2, claims[tonumber(index)])
end
end
return claims2
end
function avoidvalue(claims, options)
-- options.avoidvalue
-- to avoid values
local claims4 = {}
local add2claims
local avoidvalue
if(type(options.avoidvalue) == 'string') then avoidvalue = mw.text.split(options.avoidvalue,',')
elseif(type(options.avoidvalue) == 'table') then avoidvalue = options.avoidvalue
else return claims
end
--mw.log("avoidvalue: " .. mw.dumpobject(options.avoidvalue))
for i, j in pairs( claims ) do
--mw.log('t:' .. t)
ID = get_snak_id(j)
add2claims = true
if ID then
for k, t in pairs(avoidvalue) do
--mw.log("ID: " .. ID)
if ID == t then
add2claims = false
end
end
if add2claims then
table.insert( claims4, j)
end
end
end
return claims4
end
function prefervalue(claims, options)
local claims3 = {}
--mw.log("prefervalue: " .. mw.dumpobject(options.prefervalue))
local prefervalue
if(type(options.prefervalue) == 'string') then prefervalue = mw.text.split(options.prefervalue,',')
elseif(type(options.prefervalue) == 'table') then prefervalue = options.prefervalue
else return claims
end
for k, t in pairs(prefervalue) do
--mw.log('t:' .. t)
for i, j in pairs( claims ) do
local active = false
ID = get_snak_id(j)
if ID then
--mw.log("ID: " .. ID)
if ID == t and not active then
table.insert( claims3, j)
active = true
--mw.log("ID == t" .. t)
end
end
end
end
return claims3
end
function preferqualifier(claims, options)
-- options.preferqualifier
-- options.preferqualifiervalue
mw.log("preferqualifier: " .. options.preferqualifier)
local claims2 = {}
for i, statement in pairs( claims ) do --
if statement.qualifiers and statement.qualifiers[options.preferqualifier:upper()] then
if options.preferqualifiervalue and options.preferqualifiervalue ~= '' then
local active = false
for k, t in pairs(mw.text.split(options.preferqualifiervalue,',')) do
--mw.log( "t " .. t )
--kaso = formatStatements({property=options.preferqualifier:upper(), raw = 'true', formatting = 'raw'}, statement.qualifiers)
----kaso = formatStatements({property=options.preferqualifier:upper(), formatting = 'raw'}, statement.qualifiers)
----value = kaso
for ii, quall in pairs( statement.qualifiers[options.preferqualifier:upper()] ) do
--mw.log( "value " .. value )
snaktype = quall.snaktype
if snaktype == "value" then
ty = quall.datavalue.value['id']
if ty and ty == t and not active then
--if value == t and not active then
table.insert( claims2, statement)
active = true
--end
end
end
end
end
else
table.insert( claims2, statement)
end
end
end
return claims2
end
function avoidqualifier(claims, options)
-- options.avoidqualifier
-- options.avoidqualifiervalue
if not options.avoidqualifier or options.avoidqualifier == "" then return claims end
local av = options.avoidqualifier:upper()
local claims2 = {}
for i, statement in pairs( claims ) do
if not statement.qualifiers or not statement.qualifiers[options.avoidqualifier:upper()] then
table.insert( claims2, statement)
elseif statement.qualifiers and statement.qualifiers[av] then
if options.avoidqualifiervalue and options.avoidqualifiervalue ~= '' then
list = {}
if(type(options.avoidqualifiervalue) == 'string') then
list = mw.text.split(options.avoidqualifiervalue,',')
elseif(type(options.avoidqualifiervalue) == 'table') then
list = options.avoidqualifiervalue
end
local active = true
for k, t in pairs( list ) do
for ii, quall in pairs( statement.qualifiers[av] ) do
if quall.snaktype == "value" and quall.datavalue and quall.datavalue.value and quall.datavalue.value['id'] then
if quall.datavalue.value['id'] == t then
active = false
end
end
end
end
if active then
table.insert( claims2, statement)
end
end
end
end
return claims2
end
function sortbyqualifier(claims, options)
table.sort(claims, function(a,b)
local timeA = getDate(a, options)
local timeB = getDate(b, options)
if options.sortbytime == 'inverted' then
return comparedates(timeB, timeA)
else
return comparedates(timeA, timeB)
end
end
)
return claims
end
function sortbyqualifiernumber(claims, options)
local sortingproperty = options.sortingproperty
if type(options.sortingproperty) == 'string' then
sortingproperty = {options.sortingproperty}
end
table.sort(claims, function(a,b)
local timeA = getqualifierbysortingproperty(a, sortingproperty)
local timeB = getqualifierbysortingproperty(b, sortingproperty)
if options.sortbynumber == 'inverted' then
return comparedates(timeB, timeA)
else
return comparedates(timeA, timeB)
end
end
)
return claims
end
function sortbyarb(claims, options)
--mw.log("sortbyarb: " .. options.sortbyarbitrary)
table.sort(claims, function(a,b)
local timeA = getDateArb(a, options)
local timeB = getDateArb(b, options)
if options.sortbyarbitrary == 'inverted' then
return comparedates(timeB, timeA)
else
return comparedates(timeA, timeB)
end
end
)
return claims
end
function getEntityFromId( id )
if id and id ~= "" then
-- if not(mw.wikibase.isValidEntityId(id)) or not(mw.wikibase.entityExists(id)) then
-- return false
--end
return mw.wikibase.getEntityObject( id )
else
return mw.wikibase.getEntityObject()
end
end
function getEntityIdFromValue( value )
if value['entity-type'] == 'item' then
return 'Q' .. value['numeric-id']
elseif value['entity-type'] == 'property' then
return 'P' .. value['numeric-id']
else
return formatError( 'unknown-entity-type' )
end
end
function formatError( key )
return i18n.errors[key]
end
function Labelfunction( entityId, label ,labeloption , options) -- label with no arzwiki sitelink
if options.illwd2nowd and options.illwd2nowd ~= '' then noWD='' else noWD='y' end
local jlabel = label
local arz = labelIn('arz',entityId )
local arzlabel = arz
if labeloption and labeloption ~= '' then
jlabel = labeloption
elseif options.illwd2 and options.illwd2 ~= '' and arzlabel and arzlabel ~= '' then
jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {arzlabel, fromlua="t", id=entityId, y = (options.illwd2y or '') } }
elseif options.enlabelcate and options.enlabelcate ~= '' then
if not arzlabel or arzlabel == '' then
jlabel = label
-- To be checked 3-1-2021
if jlabel and jlabel ~= '' then
jlabel = jlabel ..' [['.. i18n.noarabiclabel ..'|'.. entityId ..']]'
end
else
jlabel = arzlabel
end
else
if arzlabel and arzlabel ~= ''
then jlabel = arzlabel
else jlabel = nil
end
end
if jlabel and jlabel ~= '' then
return jlabel.. catewikidatainfo(options)
end
end
function formatOneStatement( statement ,ref , options)
local vava = nil
local stat = formatStatement( statement, options )
if stat then
if not stat.qualifiers then
stat.qualifiers = {}
end
local s = stat.value
local P585 = stat.qualifiers.P585 or ""
local tf = stat.tifr
local awardqual = stat.foto
local pr = stat.pr
--local utgivort = stat.utgivort
local ro = stat.ro
local qp1a = stat.qp1a
local onlyqualifier = stat.onlyqualifier
local qp1 = stat.qp1
local qp2 = stat.qp2
local qp3 = stat.qp3
local qp4 = stat.qp4
local qp5 = stat.qp5
local reff =stat.reff
local QPrefix
local QSuffix
if s == '' then s = nil end
if s then
if reff and options.reff and options.reff ~= '' then
s= s .. reff
end
if options.template and options.template ~= '' then
s = mw.getCurrentFrame():expandTemplate{ title = options.template
, args ={stat.QQ1
,s
,stat.QQ2
,stat.QQ3
,stat.QQ4
,stat.QQ5
,stat.QQ6
,stat.QQ7
,stat.QQ8
,stat.QQ9
,stat.QQ10
,entityId = options.entityId
,id = stat.ID} }
end
if options.football and options.football ~= '' then
s =mw.getCurrentFrame():expandTemplate{ title = "صندوق معلومات سيرة كرة قدم/سطر فريق", args = {
stat.qualifiers.P580 or "",
stat.qualifiers.P582 or "",
s,
stat.amatch,
stat.goal
} }
end
if options.office and options.office ~= '' then
s = mw.getCurrentFrame():expandTemplate{ title = "معلومات صاحب منصب/منصب ويكيداتا/نواة", args =
{office = s,
termstart = stat.qualifiers.P580 or "",
termend = stat.qualifiers.P582 or "",
constituency = stat.qualifiers.P768 or "",
predecessor = stat.qualifiers.P1365 or "",
successor = stat.qualifiers.P1366 or "",
series= stat.qualifiers.P1545 or "",
of=stat.qualifiers.P642 or "",
electedin=stat.qualifiers.P2715 or "",
jurisdiction=stat.qualifiers.P1001 or "",
employer=stat.qualifiers.P108 or "",
entityId=options.entityId
} }
end
function qoo(Prefix,qualpref,p,Suffix)
if p and p ~='' then
return mw.text.tag('small', {}, (Prefix or ' (').. (qualpref or '') .. p .. (Suffix or ')')) end
end
QPrefix = options.qualifierprefix
QSuffix = options.qualifiersuffix
if qp1 and qp1 ~='' and options.qual1 and options.qual1 and qp1a and qp1a ~='' and options.qual1a and options.qual1a ~= ''
then
s = s .. qoo(QPrefix, options.qual1pref, qp1, QSuffix) .. qoo(QPrefix, options.qp1apref, qp1a, QSuffix)
elseif qp1 and qp1 ~='' and options.qual1 and options.qual1 ~= '' then
s = s .. qoo(QPrefix, options.qual1pref, qp1, QSuffix)
elseif qp1a and qp1a ~='' and options.qual1a and options.qual1a ~= '' then
s = s .. qoo(QPrefix, options.qp1apref, qp1a, QSuffix)
end
if qp2 and qp2 ~='' and options.qual2 and options.qual2 ~= '' then
s = s .. qoo(QPrefix, options.qual2pref, qp2, QSuffix)
end
if qp3 and qp3 ~='' and options.qual3 and options.qual3 ~= '' then
s = s .. qoo(QPrefix, options.qual3pref, qp3, QSuffix)
end
if qp4 and qp4 ~='' and options.qual4 and options.qual4 ~= '' then
s = s .. qoo(QPrefix, options.qual4pref, qp4, QSuffix)
end
if qp5 and qp5 ~='' and options.qual5 and options.qual5 ~= '' then
s = s .. qoo(QPrefix, options.qual5pref, qp5, QSuffix)
end
if options.justthisqual and options.justthisqual ~= '' then
if onlyqualifier then
s = onlyqualifier
else
s = nil -- We need only the qualifier
end
end
if ro and ro ~='' and options.withro and options.withro ~= '' then s = s .. qoo(QPrefix, '' , ro, QSuffix) end
if options.withdate and options.withdate ~= '' then
if P585 and P585 ~='' then
if options.withdate == 'y' then
s = s .. qoo(QPrefix, 'سنة ' , P585, QSuffix)
elseif options.withdate == 'before' then
s = '*' .. P585 ..':' .. s..'\n'
else
s = s .. qoo(QPrefix, '' , P585, QSuffix)
end
end
end
if awardqual and options.awardqua and options.awardqua ~= '' then
s = s .. qoo(QPrefix, '' , awardqual, QSuffix)
end
local bothdates = options.withintervall or options.bothdates
if tf and bothdates and bothdates ~= '' then
if bothdates == 'line' then
s = s .. mw.text.tag('br') .. qoo(QPrefix, '' , tf, QSuffix)
elseif bothdates == 'before' then
s = qoo(QPrefix, '' , tf, QSuffix) .. s
else
s = s .. qoo(QPrefix, '' , tf, QSuffix)
end
end
--if utgivort and options.withutgivort and options.withutgivort ~= '' then
--if options.withutgivort == 'قوسين' then s = s .. ' ' .. qoo(QPrefix, '' , utgivort, QSuffix)
--else s = s .. ' ' .. utgivort
--end
--end
if pr and pr ~= '' and options.getsimpleproperty and options.getsimpleproperty ~= '' then
if options.getsimpleproperty == 'f?dd' then s = s .. ' ' .. qoo(QPrefix, 'f. ' , pr, QSuffix)
elseif options.getsimpleproperty == 'parentes' then s = s .. ' ' .. qoo(QPrefix, '' , pr, QSuffix)
elseif options.getsimpleproperty == 'avn?gon' then s = s .. ' ' .. mw.text.tag('span', {}, ' av ' .. pr .. '')
end
end
if type(ref) == 'table' or (options.noref and options.noref ~='') or (options.justthisqual and options.justthisqual ~='')
then
--table.insert( formattedStatements, s )
vava = s
else
local t = formatReferences( statement, options )
stat.ref = t
if options.justref and options.justref ~= ''
then
vava = t
elseif options.onlyvaluewithref and options.onlyvaluewithref ~= '' then
if t and t ~= "" then
vava = s .. t
end
else
vava = s .. t
end
end
end
--table.insert(statementsraw, stat)
end
return { v = vava , raw = stat}
end
function filter_claims( claims , options)
local claims = claims
--======================================================
if options.avoidqualifier and options.avoidqualifier ~= '' then -- to avoid value with a given qualifier
claims = avoidqualifier(claims, options)
end
--======================================================
if options.preferqualifier and options.preferqualifier ~= '' then
claims = preferqualifier(claims, options)
end
--======================================================
-- options.avoidvalue
if options.avoidvalue and options.avoidvalue ~= '' then
claims = avoidvalue(claims, options)
end
--======================================================
-- options.prefervalue
if options.prefervalue and options.prefervalue ~= '' then
claims = prefervalue(claims, options)
end
--======================================================
-- options.getonly
if options.getonly and options.getonly ~= '' then
claims = getonly(claims, options)
end
--======================================================
if not options.langpref or options.langpref == '' then
local claims7 = {}
for i, statement in pairs( claims ) do
if statement.qualifiers and statement.qualifiers.P407 then
for k, v in pairs( statement.qualifiers.P407 ) do
if v.snaktype == 'value' and v.datavalue.value['numeric-id'] == 13955 then -- Q13955 = 'العربية'
table.insert( claims7, statement )
end
end
elseif statement.qualifiers and statement.qualifiers.P282 then
for k, v in pairs( statement.qualifiers.P282 ) do
if v.snaktype == 'value' and v.datavalue.value['numeric-id'] == 8196 then -- Q8196 = 'أبجدية عربية'
table.insert( claims7, statement )
end
end
end
end
if #claims7 > 0 then
claims = claims7
end
end
--======================================================
if options.sortbytime == 'chronological' or options.sortbytime == 'inverted' then
claims = sortbyqualifier(claims, options)
elseif options.sortbynumber == 'chronological' or options.sortbynumber == 'inverted' then
claims = sortbyqualifiernumber(claims, options)
elseif options.sortbyarbitrary == 'chronological' or options.sortbyarbitrary == 'inverted' then
claims = sortbyarb(claims, options)
end
--======================================================
local firstvalue = options.enbarten or options.firstvalue
if firstvalue and firstvalue ~='' and #claims > 1 then
if firstvalue == '2' then
claims = {claims[2]}
elseif firstvalue == '3' and #claims > 2 then
claims = {claims[3]}
elseif firstvalue == '4' and #claims > 3 then
claims = {claims[4]}
elseif firstvalue == '5' and #claims > 4 then
claims = {claims[5]}
elseif firstvalue == '6' and #claims > 5 then
claims = {claims[6]}
elseif firstvalue == '7' and #claims > 6 then
claims = {claims[7]}
elseif firstvalue == '8' and #claims > 7 then
claims = {claims[8]}
elseif firstvalue == '9' and #claims > 8 then
claims = {claims[9]}
else
claims = {claims[1]}
end
end
local numval = options.numval
if numval and type(numval) == "number" and #claims > 1 and #claims > numval then
local claimsnumval= {}
local ic = 1
while (numval >= ic) and (#claims >= ic) do
table.insert( claimsnumval, claims[ic] )
ic =ic +1
end
claims = claimsnumval;
end
return claims
end
function formatStatements( options, ref )
local valuetable = {} -- formattedStatements
local claims = {}
if not options.property then return formatError( 'property-param-not-provided' ) end
functions = {
["P172"] = {["value-module"] ="Wikidata2/P172" ,["value-function"] ="get_P172_lab"} ,
["P106"] = {["value-module"] ="Wikidata2/P106" ,["value-function"] ="formatEntityWithGenderClaim"} ,
}
functions["P413"] = functions["P106"]
--[[if ( not options["value-module"] or options["value-module"] == "" )
or ( not options["value-function"] or options["value-function"] == "" )
or ( not options["property-module"] or options["property-module"] == "" )
or ( not options["property-function"] or options["property-function"] == "" )
or ( not options["claim-module"] or options["claim-module"] == "" )
or ( not options["claim-function"] or options["claim-function"] == "" )
then
if functions[options.property:upper()] then
options["value-module"] = functions[options.property:upper()]["value-module"]
options["value-function"] = functions[options.property:upper()]["value-function"]
end
end]]
local option1 = options["option1"] or 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(ref) == 'table' then -- f?r de fall d?r funktionen anropas och alla claims redan finns i en tabell
claims = ref[options.property] or {}
else
--Get entity
local entity = nil
if options.entity and type( options.entity ) == "table" then
entity = options.entity
else
--entity = getEntityFromId( options.entityId )
id = get_entityId( options )
entity = getEntityFromId( id )
end
property = mw.wikibase.resolvePropertyId( options.property:upper() )
--property = options.property:upper()
if not entity or not property then return '' end --TODO error?
if not entity.claims or not entity.claims[property] then
return '' --TODO error?
end
--Format statement and concat them cleanly
if options.rank == 'best' or not 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
end
claims = filter_claims( claims , options)
local statementsraw = {}
local All_claims = claims
if claims then
--==========================================
if options['property-module'] or options['property-function'] then
if not options['property-module'] or not options['property-function'] then
return formatError( 'unknown-property-module' )
end
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,ref, options )
if va.v then
table.insert( valuetable, va.v )
end
table.insert( statementsraw, va.raw )
end
end
end
local priff = ""
local Separator = options.separator-- or ""
local Conjunction = options.conjunction-- or ""
--if Conjunction and Conjunction == "br" then Conjunction = "\n" end
if (Separator and Separator == "br") or (Conjunction and Conjunction == "br") then
Separator = mw.text.tag('br')
Conjunction = mw.text.tag('br')
end
if Separator and Separator == "*" then
priff = "\n*"
Separator = "\n*"
Conjunction = "\n*"
end
if Separator and Separator == "#" then
priff = "\n#"
Separator = "\n#"
Conjunction = "\n#"
end
local tot = mw.text.listToText( valuetable, Separator, Conjunction )
if #valuetable > 1 then
tot = priff .. tot
end
if tot == '' then tot = nil end
if options.raw and options.raw ~= '' then
if options.rawtolua and options.rawtolua ~= '' then
return mw.getCurrentFrame():extensionTag("source", mw.dumpObject(statementsraw),{ lang= 'lua'})
end
return statementsraw
end
if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then
return tot, #valuetable
end
if options.numberofclaims and options.numberofclaims ~= '' then
return #All_claims
end
return tot
end
function p.formatAndCat(args)
if args then Frame_args = args end
if not args then return nil end
args.linkback = args.linkback or true
args.addcat = true
if args.value then
if args.value == '-' then return nil end
local val = args.value .. p.addTrackingCat(args.property)
val = p.addLinkBack(val, args.entity, args.property)
return val
end
return p.formatStatementsFromLua( args )
end
function formatReferences( statement, options )
local ic
local s
local statementreferences = statement.references
local reference = {}
local numberofref = tonumber(options.numberofreferences) or 7
if statementreferences then
local cite = require( citetitle )
ic = 1
for i, ref in pairs( statementreferences ) do
if ref.snaks then
if numberofref >= ic then
s = cite.citeitem2(ref , options )
if s and s ~= "" then
ic = ic + 1
table.insert(reference, s)
end
end
end
end
end
local final = table.concat(reference)
if final and final ~= '' then
final = final .. i18n.cateref
end
return final
end
function formatqualifiers( statement,s, options )
s.qualifiers = {}
function qua(p,firstvalue,modifytime)
if p and p ~='' then
vvv = formatStatements({property =p,enlabelcate = 't', firstvalue = (firstvalue or '')
,modifytime = (modifytime or 'longdate'), noref = 'true'}, statement.qualifiers) or ''
s.qualifiers[p] = vvv
return vvv
end
end
if options.template and options.template ~= '' then
s.ID = getEntityIdFromValue(statement.mainsnak.datavalue.value)
s.QQ1 = qua(options.Q1)
s.QQ2 = qua(options.Q2)
s.QQ3 = qua(options.Q3)
s.QQ4 = qua(options.Q4)
s.QQ5 = qua(options.Q5)
s.QQ6 = qua(options.Q6)
s.QQ7 = qua(options.Q7)
s.QQ8 = qua(options.Q8)
s.QQ9 = qua(options.Q10)
s.QQ10 = qua(options.Q10)
end
if options.football and options.football ~= '' then
if statement.qualifiers.P1350 or statement.qualifiers.P1351 then
s.amatch = qua("P1350",'true')
s.goal = qua("P1351",'true')
end
end
if (options.football and options.football ~= '' ) or (options.office and options.office ~= '') then
s.start1 = qua("P580",'true')
s.finish1 = qua("P582",'true')
end
if options.office and options.office ~= '' then
if statement.qualifiers.P580 or statement.qualifiers.P582 or statement.qualifiers.P1365 or statement.qualifiers.P1366 then
s.before1 = qua("P1365",'true')
s.after1 = qua("P1366",'true')
s.constituency1 = qua("P768")
s.series1 = qua("P1545")
s.electedin1 = qua("P2715",'')
s.pp1001 = qua("P1001")
s.pp108 = qua("P108")
s.pp642 = qua("P642")
end
end
if options.withdate and options.withdate ~= '' then
--if statement.qualifiers.P585 then
s.P585 = qua("P585",'true',options.modifyqualifiertime)
end
local qwe = options.qwer
if statement.qualifiers.qwe then
s.ro = qua(qwe,'true')
end
--if statement.qualifiers.P574 then
--s.dateoftaxpub = qua("P574",'true',options.modifyqualifiertime)
--end
--[[
if statement.qualifiers.P405 then
local author = {}
for i, j in pairs(statement.qualifiers.P405) do
if j.snaktype == 'value' then
local item = 'Q' .. j.datavalue.value['numeric-id']
local authorname = formatStatements({property = "P428", entityId = item, noref = 'true', firstvalue = 'true'})
if author and authorname ~= '' then
table.insert(author, formatEntityId(item, {label = authorname }).value)
else
table.insert(author, formatEntityId(item, {}).value)
end
end
end
s.auktor = mw.text.listToText(author, ', ', ' & ')
end
--]]
local bothdates_option = options.withintervall or options.bothdates
if bothdates_option and 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)
s.tifr = f .. '–' .. t
end
end
if options.awardqua and options.awardqua ~= '' then
if statement.qualifiers.P585 or statement.qualifiers.P1346 then
local fo = qua("P585",'true',options.modifyqualifiertime)
local to = qua('P1346','true')
s.foto = fo .. ' ' .. mw.text.tag('span', {}, ' ' .. to .. '')
end
end
function quaaal(opti,options)
if opti and opti ~='' and statement.qualifiers[opti] then
kkk = formatStatements({property = opti, noref = 'true', 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 ''
s.qualifiers[ opti ] = kkk
return kkk
end
end
--if statement.qualifiers.P291 then -- خاصية بلد النشر
--s.utgivort = quaaal('P291',options)
--end
--if statement.qualifiers.P2096 then
--s.bildtext = formatStatements({property = "P2096", noref = 'true', langpref = (options.langpref or 'arz')}, statement.qualifiers)
--end
if options.justthisqual and options.justthisqual ~= '' and statement.qualifiers[options.justthisqual] then
s.onlyqualifier = quaaal(options.justthisqual,options)
end
if options.qual1 and options.qual1 ~= '' and statement.qualifiers[options.qual1] then
s.qp1 = quaaal(options.qual1,options)
end
if options.qual1a and options.qual1a ~= '' and statement.qualifiers[options.qual1a] then
s.qp1a = quaaal(options.qual1a,options)
end
if options.qual2 and options.qual2 ~= '' and statement.qualifiers[options.qual2] then
s.qp2 = quaaal(options.qual2,options)
end
if options.qual3 and options.qual3 ~= '' and statement.qualifiers[options.qual3] then
s.qp3 = quaaal(options.qual3,options)
end
if options.qual4 and options.qual4 ~= '' and statement.qualifiers[options.qual4] then
s.qp4 = quaaal(options.qual4,options)
end
if options.qual5 and options.qual5 ~= '' and statement.qualifiers[options.qual5] then
s.qp5 = quaaal(options.qual5,options)
end
end
function formatStatement( statement, options )
if options['claim-module'] or options['claim-function'] then
if not options['claim-module'] or not options['claim-function'] then
return {value = formatError( 'unknown-claim-module' )}
end
local formatter = require ('Module:' .. options['claim-module'])
if not formatter then
return {value = formatError( 'claim-module-not-found' )}
end
local fun = formatter[options['claim-function']]
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 )
if s and s ~= '' then
s.qualifiers = {}
if statement.qualifiers then
qualu = formatqualifiers( statement,s, options )
--if qualu and qualu ~= '' then table.insert(qualu) end
end
if statement.references then
if options.reff and options.reff ~= '' then
s.reff = formatReferences( statement, options )
end
end
end
return s
elseif not statement.type then
return formatSnak( statement, options )
end
return {value = formatError( 'unknown-claim-type' )}
end
function formatSnak( snak, options )
if snak.snaktype == 'somevalue' then
if options.somevalue then
if options.somevalue == '' then
return nil
else
return {value = options.somevalue}
end
end
return {value = i18n['somevalue']}
elseif snak.snaktype == 'novalue' then
if options.novalue then
if options.novalue == '' then
return nil
else
return {value = options.novalue}
end
end
return {value = i18n['novalue']}
elseif snak.snaktype == 'value' then
local s = formatDatavalue( snak.datavalue, snak.datatype, options )
if s and s.value and options.prefix and options.prefix ~= '' then
s.value = options.prefix .. s.value
end
if s and s.value and options.suffix and options.suffix ~= '' then
s.value = s.value .. options.suffix
end
if s and s.item and options.getsimpleproperty then
if options.getsimpleproperty ~= '' and options.getproperty and options.getproperty ~= '' then
local pr = formatStatements({property = options.getproperty, entityId = s.item, firstvalue = options.getenbarten
, noref = 'true', modifytime = options.getmodifytime, raw = options.getraw})
if pr then s.pr = pr end
end
end
return s
else
return {value = formatError( 'unknown-snak-type' )}
end
end
local skiip = {
["P106"] = {
"Q42857" , -- prophet
"Q14886050" , -- terrorist
"Q2159907" , -- criminal
}}
function formatwikibaseitem( datavalue, datatype, options )
--[[ datatype wikibase-item ]]
local item = getEntityIdFromValue( datavalue.value )
local itemValue = formatEntityId( item , options ).value
local Format = options.formatting or options["formatting"]
local Skipped = skiip[options.property] or {}
for k, v in pairs(Skipped) do
if datavalue.value.id == v then
return {value = ""}
end
end
if Format and Format ~= ''
then
if Format == 'raw' then
--mw.log("raw: " .. item )
return {value = item }
elseif Format == 'rawtotemplate' then
--mw.log('options')
--mw.log(options)
if options.rawtotemplate and options.rawtotemplate ~= '' then
return {value = mw.getCurrentFrame():expandTemplate{ title = options.rawtotemplate, args = {
q = item , no1 = options.no1 or '' , no2 = options.no2 or ''
}} .. '\n'
}
end
elseif Format == 'fu' then
fu_temp = "Cycling race/stageclassification1"
return {value = mw.getCurrentFrame():expandTemplate{ title = fu_temp , args = {item}} }
elseif Format == 'sitelink' then -- for Wikidata property giving Wikimedia list
return {value = formatsitelink(datavalue.value.id , options ) }
else
return {value = formatFromPattern( formatcharacters(datavalue.value, options), options )}
end
elseif options.property1 and options.property1 ~= '' and options.property1:upper():sub(1,1) =="P"
then
for i, statement in pairs( datavalue ) do
caca = formatStatements( {property = options.property1 or options["property1"]
, entityId = item
, noref =options.noref or options["noref"]
,rank=options.property1rank or options["property1rank"]
,pattern = options.property1pattern or options["property1pattern"]
,formatting=options.property1formatting or options["property1formatting"]
,size =options.size or options["size"]
,image =options.image or options["image"]
,noref='true'
,firstvalue ='true' })
if itemValue and itemValue ~= '' then
if caca and caca ~= '' then
cooooca = (options.property1pref or '') ..''.. caca ..''.. (options.property1suff or '')
if options.property1after and options.property1after ~= "" then
return {value = itemValue .. cooooca }
else
return {value = cooooca .. ' '.. itemValue }
end
else
return {value = itemValue }
end
end
end
elseif options.propertyimage and options.propertyimage ~= '' then
local p_f = options.propertyimageformatting or options.formattingpropertyimage
for i, statement in pairs( datavalue ) do
local vas = formatStatements( {
property =options.propertyimage
,formatting = p_f
,entityId = item
,noref =options.noref
,rank=options.rank
,pattern =options.pattern
,size =options.size
,image =options.image
,noref='true'
,firstvalue ='true'
,nolink=options.nolink
})
if vas and vas ~= '' then
return {value = vas }
else
end
end
elseif options.property2 and options.property2 ~= '' then
for i, statement in pairs( datavalue ) do
local caca = formatStatements(
{property =options.property2
, entityId = item
, noref =options.noref
,rank=options.rank
,pattern =options.property2pattern
,size =options.size
,image =options.image
,propertyimage =options.property3
,firstvalue ='true'
})
if itemValue and itemValue ~= '' then
if caca and caca ~= '' then
return {value = caca .. ' '.. itemValue }
else
return {value = itemValue }
end
end
end
else
return {value = formatEntityId( item, options ).value, item = item }
end
end
function formatwikibaseproperty( datavalue, datatype, options )
--[[ datatype wikibase-property ]]
if options.formatting and options.formatting ~= ''
then
if options.formatting == 'raw' then
tid = getEntityIdFromValue( datavalue.value )
else
end
else
tid = formatEntityId( getEntityIdFromValue( datavalue.value ), options ).value
end
return {value = tid}
end
function formattabulardata( datavalue, datatype, options )
--[[ tabular-data ]]
data= '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]'
return {value = data}
end
function formatgeoshape( datavalue, datatype, options )
--[[ geo-shape ]]
shape = '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]'
return {value = shape}
end
function formatcommonsMedia( datavalue, datatype, options )
--[[ commonsMedia ]]
if options.image and options.image ~= '' then -- return real image
--tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '60')..'px|'..'border'..']]'
params = {
image = datavalue.value
, maxsize = "280x330px"
, center = options.center
}
if options.size and options.size ~= "" then params.size = options.size end
tid = Infobox_Image( params )
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
return {value =mw.getCurrentFrame():callParserFunction( '#tag:math', ''.. datavalue.value..'' ) }
end
function formatstring( datavalue, datatype, options )
--[[ datatype string - external-id ]]
--old value: auktoritetsdata , auktoritetsdata2 , auktoritetsdata3
local par = options.pattern
if options.stringpattern and options.stringpattern ~= "" then
--mw.log(options.stringpattern)
tid = mw.ustring.gsub( options.stringpattern, '$1', datavalue.value )
elseif par and par ~= '' then
if par == "autourl" or par == "autourl2" or par == "autourl3" or par == "autourl4"
then
tid = formatcharacters(datavalue.value, options)
else
tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
else
tid = formatcharacters(datavalue.value, options)
end
return {value = tid}
end
function formatexternalid( datavalue, datatype, options )
if options.pattern and options.pattern ~= ''
then
par = options.pattern
local patter = formatStatements( {property = "P1630", entityId = options.property, firstvalue = 'true', noref = 'true',rank='all' }) -- get formatter URL
--mw.log( options.property .. ':' .. patter )
local pp = formatFromPattern( datavalue.value, {pattern = patter} )
local plabel = pp
if mw.wikibase
then plabel = mw.wikibase.label( options.property ) or pp
end
ppp = mw.ustring.gsub( pp, ' ', '_' )
if patter and patter ~= '' then -- if P1630 are there
if par == "autourl" then -- like http://example.com/$1.html
tid = ppp
elseif par == "autourl2" then -- like [http://example.com/$1.html $1]
tid = '[' .. ppp .. ' ' .. datavalue.value .. ']'
elseif par == "autourl3" then -- like [http://example.com/$1.html http://example.com/$1.html]
tid = '[' .. ppp .. ' ' .. ppp .. ']'
elseif par == "autourl4" then
tid = '[' .. ppp .. ' ' .. plabel .. ']'
else
tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
else -- P1630 are not there
if par == "autourl" or par == "autourl2" or par == "autourl3" or par == "autourl4"
then
tid = formatcharacters(datavalue.value, options) --just return value
else
tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
end
else
tid = formatcharacters(datavalue.value, options) --just return value
end
return {value = tid}
end
function formattime( datavalue, datatype, options )
--[[ datatype time ]]
local ModuleTime = require 'Module:wikidata2/time'
local timen = datavalue.value
local modifytime = (options.modifytime or '')
local tid = ModuleTime.getdate( timen , options)
-- local tid = mw.getCurrentFrame():preprocess(mall)
if options.modifytime and 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()}
local coord = datavalue.value
local globe = datavalue.value.globe
--local globe = globe:match('Q%d+')
local globe2 = require('Module:Wikidata2/Globes')[globe] or ""
if options.formatting and options.formatting ~= '' then
if options.formatting == 'latitude' then
pro =coord.latitude
elseif options.formatting == 'longitude' then
pro =coord.longitude
elseif options.formatting == 'dimension' then
pro =coord.dimension
elseif options.formatting == 'precision' then
pro =coord.precision
elseif options.formatting == 'globe' then
pro = globe:match('Q%d+')
elseif options.formatting == 'globe2' then
pro = globe2
--elseif options.formatting == 'coord' then
--return {value = }
else
end
else
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, cat = datavalue.value.amount, datavalue.value.unit, nil
amount = mw.ustring.gsub( amount , '+', '' )
if unit then
unit = unit:match('Q%d+')
end
local formatera = require('وحدة:Math')
local number = formatera.newFromWikidataValue(datavalue.value)
local unitraw = unit
if unit then
-- يتحقق اذا كان هناك اي اختصار لوحدة القياس
--if lab and ( not options.nounitshort or options.nounitshort == '' ) then
if options.unitshort and options.unitshort ~= '' then
local lab = options.label
or formatStatements({property = 'P498', entityId = unit, firstvalue = 'true', noref = 'true'})
or formatStatements({property = 'P5061', entityId = unit, firstvalue = 'true', langpref = options.langpref, noref = 'true'})
or ""
local s = formatEntityId( unit, {label = lab ,enlabelcate ='t' , nolink = (options.nounitlink or options.nolink) })
unit = s.value
cat = s.cat
else -- om det inte finns en f?rkortning
local s = formatEntityId( unit, {nolink = options.nounitlink ,enlabelcate ='t'})
unit = s.value
cat = s.cat
end
end
if options.formatcharacters and options.formatcharacters =="formatnum" then
amount = make_format_num( amount )
end
local Value = amount .. ' ' .. (unit or '')
if options.nounit and options.nounit ~= "" then
Value = amount
end
return {value = Value, amount = amount, unit = unit, unitraw = unitraw, cat = cat}
end
function formaturl( datavalue, datatype, options )
--[[ datatype url ]]
local label = options.label
if options.urllabel and options.urllabel ~= '' then
label = options.urllabel
end
va = mw.ustring.gsub( datavalue.value, ' ', '_' )
if not label and options.property =='P856' then label = 'الموقع الرسمى' end
if options.displayformat and options.displayformat == "weblink" then
return {value = weblink.makelink(va ) }
end
if options.formatting and options.formatting == "raw" then
return {value = va }
end
if label and label ~= '' then
pro = '[' .. va .. ' ' .. label .. ']'
else
-- if property =='P856' then pro = formatFromPattern( formatcharacters(va, options), {pattern = '[$1 الموقع الرسمي]'} )
-- else
pro = va
-- end
end
return {value = pro }
end
function formatmonolingualtext( datavalue, datatype, options ) -- showlang
--[[ datatype monolingualtext ]]
local Moduletext = require 'Module:wikidata2/monolingualtext'
local tid = Moduletext._main( datavalue, datatype, options )
return {value = tid}
end
function formatDatavalue( datavalue, datatype, options )
--Use the customize handler if provided
if options['value-module'] or options['value-function'] then
if not options['value-module'] or not options['value-function'] then
return {value = formatError( 'unknown-value-module' )}
end
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 formatters
if datatype == 'wikibase-item' then return formatwikibaseitem( datavalue, datatype, options )
elseif datatype == 'wikibase-property' then return formatwikibaseproperty( datavalue, datatype, options)
elseif datatype == 'commonsMedia' then return formatcommonsMedia( datavalue, datatype, options)
elseif datatype == 'math' then return formatmath( datavalue, datatype, options )
elseif datatype == 'time' then return formattime( datavalue, datatype, options )
elseif datatype == 'external-id' then return formatexternalid( datavalue, datatype, options )
elseif datatype == 'string' then return formatstring( datavalue, datatype, options )
elseif datatype == 'globe-coordinate' then return formatcoordinate( datavalue, datatype, options )
elseif datatype == 'quantity' then return formatquantity( datavalue, datatype, options )
elseif datatype == 'url' then return formaturl( datavalue, datatype, options )
elseif datatype == 'monolingualtext' then return formatmonolingualtext( datavalue, datatype, options )
elseif datatype == 'geo-shape' then return formatgeoshape( datavalue, datatype, options )
elseif datatype == 'tabular-data' then return formattabulardata( datavalue, datatype, options )
else
return {value = formatError( 'unknown-datatype' )}
end
end
function formatEntityId( entityId, options )
local label = options.label or mw.wikibase.label( entityId )
if label == '' then
label = mw.wikibase.label( entityId ) or nil
end
local link = mw.wikibase.sitelink( entityId )
if link and link ~= "" and (not options.nolink or options.nolink == '') then
if label and label ~= '' then
return {value = '[[:' .. link .. '|' .. formatcharacters(label, options) .. ']]'.. catewikidatainfo(options), label = label }
else
return {value = '[[:' .. link .. '|' .. formatcharacters(link, options) .. ']]'.. catewikidatainfo(options), label = link }
end
else
if label and label ~= ''
then
local label3 = Labelfunction( entityId, label,options.label, options)
return {value = label3 , label = label}
else return ''
end
return '' --{value = entityId, cat = 'som har labels med Qid', label = entityId}
end
end
function sitelink_g( id , wikisite )
--[[
function to get any link from any sister project
]]
if not mw.wikibase then return '' end
local site = wikisite or 'arzwiki'
local link = mw.wikibase.sitelink( id , site ) or ""
--mw.log("mw.wikibase.sitelink,site: " .. site.. ",link:" .. link )
return link
end
function sitelink( id , wikisite )
if not mw.wikibase then return '' end
local site = wikisite or 'arzwiki'
--local link = mw.wikibase.getSitelink( id , site ) or ""
--return link
local entity = mw.wikibase.getEntityObject(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
return entity.sitelinks[''..site..''].title
else return ''
end
end
end
function formatsitelink( entityId, options )
--[[ function to get only the value with link ]]
local link = sitelink( entityId )
if link and link ~= '' then
if not options.nolink or options.nolink == '' then
--return '[[' .. formatcharacters(link, options) .. ']]'.. catewikidatainfo(options)
return '[[' .. link .. ']]'.. catewikidatainfo(options)
else
return link -- formatcharacters(link, options)
end
else
return ''
end
end
function formatFromPattern( str, options )
--[[ function to replace $1 with string ]]
--if options.pattern and options.pattern ~='' then
--mw.log( str .. ':' .. options.pattern )
return mw.ustring.gsub( options.pattern, '$1', str ) --الحصول على اول نتيجة للدالة
-- else return str
--end
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 = '[[File: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 to check whether a certain item is a parent of a given item.
-- If pExitItem is reached without finding the searched parent item, the search stops.
-- A parent is connected via P31 or P279.
-- Attention: very intensive function, use carefully!
function isParent(property, pItem, pParent, pExitItem, pMaxDepth, pDepth)
if not pDepth then pDepth = 0 end
if not mw.wikibase then return false end
local entity = mw.wikibase.getEntity(pItem)
if not entity then return false end
local claims31
local claims279
if entity.claims then
if property and property ~= '' then
claims31 = entity.claims[mw.wikibase.resolvePropertyId(property)]
else
claims31 = entity.claims[mw.wikibase.resolvePropertyId('P31')]
claims279 = entity.claims[mw.wikibase.resolvePropertyId('P279')]
end
else
return false
end
if not claims31 and not claims279 then return false end
local parentIds = {}
if claims31 and #claims31 > 0 then
for i, v in ipairs(claims31) do parentIds[#parentIds+1] = p.getId(v.mainsnak) end
end
if claims279 and #claims279 > 0 then
for i, v in ipairs(claims279) do parentIds[#parentIds+1] = p.getId(v.mainsnak) end
end
-- check if searched parent or exit item is reached or do recursive call
if not parentIds[1] or #parentIds == 0 then return false end
local itemString = ""
local result = nil
for i, qid in ipairs(parentIds) do
if not qid then return false end
--itemString = "Q" .. v
itemString = qid
if itemString == pParent then
-- successful!
return true
elseif itemString == pExitItem then --or itemString == "Q35120"
-- exit if either "exit item" or node item (Q35120) is reached
return false
else
if pDepth+1 < pMaxDepth then
result = isParent(property, itemString, pParent, pExitItem, pMaxDepth, pDepth+1)
else return false end
if result == true then return result end
end
end
do return false end
end
function p.Subclass(options)
if options then Frame_args = options end
local parent = options.parent or ""
local id = options.id or ""
local Entity = getEntityFromId(id)
if Entity then id = Entity.id end
local property = options.property or "P31"
if parent == "" or id == "" or property == "" then return false end
local tab = mw.text.split(options.parent,',')
local result = mw.wikibase.getReferencedEntityId( id , property, tab ) -- { 'Q5', 'Q2095' } )
if not result and property == "P31" then
result = mw.wikibase.getReferencedEntityId( id , "P279" , tab )
end
if result then return true end
end
function old_isSubclass(options)
if not options.parent then return false end
local maxDepth
maxDepth = tonumber(options.maxDepth) or 10
if not type(maxDepth) == "number" then maxDepth = 5 end
property = options.property
local result
result = isParent(property, options.id, options.parent , options.exitItem, maxDepth)
if options.returnInt then
if result == true then return 1 else return nil end
else
return result
end
end
function p.formatSnak( snak, options )
return formatSnak( snak, options )
end
function p.getLabel( entity, lang )
return labelIn( lang , entity )
end
function p.formatEntityId( entityId, options )
return formatEntityId( entityId, (options or {}) )
end
function p.formatStatements( frame, key )
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 args.value and args.value ~= '' then
return args.value
end
local valuesnumb = 0
local prop = formatStatements( args, key )
if args.returnnumberofvalues then
s , valuesnumb = formatStatements( frame.args, key )
end
if prop and prop ~= '' then
if args.mainprefix and args.mainprefix ~= '' then -- mainprefix
prop = args.mainprefix .. prop
end
if args.mainsuffix and args.mainsuffix ~= '' then -- mainsuffix
prop = prop .. args.mainsuffix
end
if args.addTrackingCat and args.addTrackingCat ~= '' then -- add tracking cat
prop = addTrackingCategory(prop,frame.args)
end
if args.mainsuffixAfterIcon and args.mainsuffixAfterIcon ~= '' then -- another suffix but after wikidata icon
prop = prop .. args.mainsuffixAfterIcon
end
else
if args.NoPropValue and args.NoPropValue ~= '' then -- value if no local value and no wikidata value
prop = args.NoPropValue
end
end
if args.returnnumberofvalues and args.returnnumberofvalues ~= "" then
mw.log( "valuesnumb: " .. valuesnumb )
return s , valuesnumb
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 options.value and options.value ~= '' then
return options.value
end
local valuesnumb = 0
local s = formatStatements( options, key )
if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then
s , valuesnumb = formatStatements( options, key )
end
if s == '' then
s = nil
end
if s and s ~= '' then
if options.mainprefix and options.mainprefix ~= '' then -- mainprefix
s = options.mainprefix .. s
end
if options.addTrackingCat and options.addTrackingCat ~= '' then -- add tracking cat
s = addTrackingCategory(s,options)
end
if options.mainsuffix and options.mainsuffix ~= '' then -- mainsuffix
s = s .. options.mainsuffix
end
if options.mainsuffixAfterIcon and options.mainsuffixAfterIcon ~= '' then -- another suffix but after wikidata icon
s = s .. options.mainsuffixAfterIcon
end
else
if options.NosValue and options.NosValue ~= '' then -- value if no local value and no wikidata value
s = options.NosValue
end
end
if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then
-- mw.log( "valuesnumb: " .. valuesnumb )
return s , valuesnumb
end
return s
end
function p.isSubclass(frame)
if frame.args then Frame_args = frame.args end
return p.Subclass(frame.args)
end
-- Return the site link for a given data item and a given site (the current site by default)
function p.getSiteLink( frame )
if not mw.wikibase then return '' end
if frame.args then Frame_args = frame.args end
local site = frame.args[2] or frame.args.site
local id = frame.args[1] or frame.args.id
local count = frame.args.countsitelinks
if not id or id == "" then
if frame.args.page and frame.args.page ~= "" then
id = mw.wikibase.getEntityIdForTitle( frame.args.page )
end
end
if count and count ~= "" then
return countSiteLinks(id)
end
local link = sitelink( id , site )
if link and link ~= '' then
return link
end
end
function p.getSiteLink1(frame)
if frame.args then Frame_args = frame.args end
local project = frame.args[1]
local id = frame.args[2]
local link = sitelink( id , project )
var = link
return var
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)
if frame.args then Frame_args = frame.args end
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)
if frame.args then Frame_args = frame.args end
local langcode = frame.args[1]
local id = frame.args[2] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
return labelIn( langcode ,id )
end
function p.ViewSomething(frame) -- from en:Module:Wikidata
if frame.args then Frame_args = frame.args end
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
if f.args.id and f.args.id ~='' then aa = f.args.id end
local data = mw.wikibase.getEntityObject(aa)
if not data then
return nil
end
local i = 1
while true do
local index = f.args[i]
if not index then
if type(data) == "table" then
return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY)
else
return tostring(data)
end
end
data = data[index] or data[tonumber(index)]
if not data then
return
end
i = i + 1
end
end
function p.Dump(frame)
if frame.args then Frame_args = frame.args end
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
if f.args.id and f.args.id ~='' then aa = f.args.id end
local data = mw.wikibase.getEntityObject(aa)
if not data then
return i18n.warnDump
end
local i = 1
while true do
local index = f.args[i]
if not index then
return frame:extensionTag("source", mw.dumpObject(data),{ lang= 'lua'}).. i18n.warnDump
end
data = data[index] or data[tonumber(index)]
if not data then
return i18n.warnDump
end
i = i + 1
end
end
function p.countSiteLinks(id)
return countSiteLinks(id)
end
function p.EntityIdForTitle(frame)
if frame.args then Frame_args = frame.args end
local title = frame.args[1]
local str = mw.wikibase.getEntityIdForTitle( title )
--mw.log(str)
return str
end
return p