وحدة:Wikidata2
هذه الوحدة نسخت في البداية من sv:Modul:Wikidata2 ومن ثم تم تطويرها هنا.
الاستخدامات
أنظر قائمة قوالب تستخدم هذه الوحدة.
الوحدات الفرعية
- وحدة:Wikidata2/Globes
- وحدة:Wikidata2/P106
- وحدة:Wikidata2/P1082
- وحدة:Wikidata2/P172
- وحدة:Wikidata2/P3828
- وحدة:Wikidata2/P39
- وحدة:Wikidata2/P54
- وحدة:Wikidata2/P569-P570
- وحدة:Wikidata2/link
- وحدة:Wikidata2/monolingualtext
- وحدة:Wikidata2/otheruse
- وحدة:Wikidata2/tax
- وحدة:Wikidata2/template
- وحدة:Wikidata2/time
- وحدة:Wikidata2/Flags
الاستعمال
مثال
{{#invoke:Wikidata2|formatStatements|property=p17}}
الوسائط
formatStatements
- طالع أيضًا: Help:Statements في ويكي بيانات
|property=
مطلوب الخاصية المطلوبة.|entityId=
أو|id=
معرف عنصر ويكي بيانات.|page=
يمكن إستخدامه بدلاً من|entityId=Q805
كالتالي:|page=اليمن
.
|enbarten=
أو|firstvalue=
يعرض أول قيمة فقط في الخاصية.|firstvalue=2
يعرض القيمة الثانية في الخاصية إن كانت موجودة، يمكن استخدام هذا الخيار حتى رقم 9.
|numval=
يعرض عدد محدد من القيم في الخاصية.|numval=4
يعرض القيم الأربع الأولى في الخاصية إن كانت موجودة.
|prefix=
بادئة|suffix=
لاحقة|formatting=
يحدد تنسيق القيم يستخدم مع إحداثيات جغرافية، وعنصر، وخاصية.
|label=
اذا كنت تريد الاختيار كيفية ظهور الوصلات. مثلا[[شعار مقاطعة بليكينج|الشعار]]
يمكن الحصول عليها عن طريق اضافة|label=الشعار
تؤثر هذه المعلمة على وحدات القياس.|raw=
يعود بالنتيجة خام على شكل جداول (يستخدم من داخل وحدات لوا أخرى) ويمكن معاينة ما سيكون الناتج عليه عبر إضافة خيار|rawtolua=
.
فصل القيم
|separator=
فاصلة بين البنود|
انظر أيضاconjunction
|conjunction=
الفاصلة الأخيرة قبل اخر بند، افتراضي، و
.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all}} |
|
|separator=br
يضع القيم في أسطر.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|separator=br}} |
|
|separator=*
يضع القيم في قائمة نقطية.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|separator=*}} |
|
تحديد عدد القيم
|numval=2
عدد القيم المراد عرضها
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|numval=2}} |
|
رتبة القيم / rank
- طالع أيضًا: Help:Ranking في ويكي بيانات
|rank=
يحدد نوع البيانات المطلوب عرضها:
|rank=all
يظهر جميع البنود في الخاصية.|rank=valid
يظهر البنود المفضلة والتي بوضع "ترتيب عادي" ولكن لا يظهر المهملة.|rank=best
(افتراضي) يظهر القيم المفضلة.
فرز النتيجة / sort
|sortbytime=
الترتيب حسب الوقت يفيد هذا مع المعلمة|enbarten=
أعلاه|sortbytime=chronological
ترتيب البنود حسب زمن التصفيات المذكورة.|sortbytime=inverted
عكس البند السابق.
|sortingproperty=
تحديد الخواص المدعومة، الافتراضي هو:'P585','P571','P580','P569','P582','P570'
بالترتيب، الخواص المعتمدة حالياً هي خواص الوقت. (P585) ، (P571) ، (P580) ، (P569) ، (P582) ، (P570).|sortingproperty=sortbyarbitrary
فرز القيم بواسطة تاريخ العناصر المرتبطة مثل تاريخ ولادة أبناء شخص "الأطفال". القيم المسموح بها هي:|sortingproperty=chronological
|sortingproperty=inverted
. وتعطى مع الخاصية المراد تفتيشها 'sortingproperty
اعلاه'.
المراجع / References / Sources
- طالع أيضًا: Help:Sources في ويكي بيانات
|noref=
أدخل قيمة في هذه المعلمة إذا كنت لا تريد جلب المصادر من ويكي بيانات.|justref=
أدخل قيمة في هذه المعلمة إذا كنت تريد جلب المصادر فقط دون ظهور القيمة!.|onlyvaluewithref=
لإظهار البيانات التي لها مراجع فقط.|numberofreferences=
لوضع حد أقصى للمراجع لكل قيمة، مثلاً عند تحديد |numberofreferences=1
يظهر مرجع واحد فقط في كل قيمة إن كان متوفراً.صياغة النص
|formatcharacters=
تحديد صيغة اخراج القيمة، القيم المسموح بها هي:lc/uc/lcfirst/ucfirst/formatnum
|formatcharacters=lc
: تحويل جميع أحرف النص الإنجليزي إلى حروف صغيرة.|formatcharacters=lcfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف صغير.|formatcharacters=uc
: تحويل جميع أحرف النص الإنجليزي إلى حروف كبيرة.|formatcharacters=ucfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف كبير.|formatcharacters=formatnum
: مشروحة في #كمية.
تصفيات / Qualifiers
- طالع أيضًا: Help:Qualifiers في ويكي بيانات
|withdate=
يضيف تصفية (P585) إذا كانت موجودة.|bothdates=
يضيف تصفيات (P580) و (P582) إذا كانتا موجودتان كلاهما أو إحداهما.
|bothdates=line
يضع سطر جديد قبل التاريخ،|bothdates=before
يضع التاريخ قبل القيمة،|bothdates=after
يضع التاريخ بعد القيمة.
|qual1=
يضيف تصفية محددة.
|qual1=P1545
يضيف تصفية (P1545) الى بنود الخاصية، مثال:منصب باراك أوباما + ترتيبه:{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P39|qual1=P1545|noref=true|rank=best}}
ينتج :← رئيس الولايات المتحدة (44)
فلترة النتائج
|avoidqualifier=
يتجاهل القيم التي تحتوي تصفيات معينة، مثل:|avoidqualifier=P518
يظهر البند الذي لا يحتوي على تصفية (P518).- بإستخدام
|avoidqualifiervalue=
مع|avoidqualifier=
فإن ذلك يحدد قيمة التصفية إذا طابقت الوسيط|avoidqualifiervalue=
فلن يتم إظهارها، وإذا لم تطابق فسيتم إظهارها، يدعم حالياً العناصر/items فقط.
- بإستخدام
|preferqualifier=
تحديد خاصية تصفيات يجب أن تكون بيانات الخاصية متضمنتها.|preferqualifiervalue=
تحدد القيمة التي تناسب أعلاه. يدعم حالياً العناصر فقط.
|justthisqual=
يظهر فقط التصفية، إذا لم تكن التصفية موجودة لن يظهر شيء.
وسائط حسب نوع البيانات / datatype
عنصر / item
- طالع أيضًا: Help:Items في ويكي بيانات
|nolink=
يظهر النتيجة دون وصلات.|formatting=raw
يعرض القيمة بشكل Q505.|formatting=sitelink
ينتج الوصلة إذا كانت موجودة في الويكي العربية.فلترة النتيجة
|getonly=
يستخدم هذا الوسيط إذا أردنا الحصول على عناصر معينة التي تكون قيمة (P31) فيها تساوي قيمة هذا الوسيط، مثال:|getonly=Q5
للحصول على الأفراد فقط.- القيم المتعددة ممكنة، مثل :
|getonly=Q127448,Q193556
للحصول على البلديات السويدية والمناظر الطبيعية.
|getonlyproperty=
إذا أردنا استخدام خاصية أخرى بدلاً من (P31) في البند السابق.
|avoidvalue=
يستخدم هذا الوسيط إذا أردنا أن نتجاهل أو نلغي ظهور عنصر معين، مثال عند وضع|avoidvalue=Q21769847
فتظهر النتائج دون ظهور (Q21769847).
prefervalue
|prefervalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|avoidvalue=
حيث نقوم بتحديد القيمة التي نريد ظهورها|prefervalue=Q19481
فتظهر النتيجة للعنصر (Q19481) فقط، ولكن الفائدة من إستخدام هذا الوسيط هي التأكد من وجود العنصر في هذه الخاصية أو للحصول على التصفيات، مثال يظهر عناصر (P1346) مع تصفية (P1923) بين قوسين.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|qual1=P1355}} |
|
إذا كنا قد حصلنا عبر خاصية (P1346) عن الفريق الفائز في (Q39052816). وأردنا الحصول على عدد مرات الفوز للفريق الفائز، من الجدول السابق ويتم ذلك بإستخدام الوسيط |justthisqual=
ما ينتج:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|justthisqual=P1355}} |
|
ولكننا نريد ظهور التصفية للفريق الفائز فقط وهو (Q50602):
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|prefervalue=Q50602|qual1=P1355}} |
|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|prefervalue=Q50602|justthisqual=P1355}} |
|
ملف وسائط من كومنز / commonsMedia
- تظهر الصور افتراضياً كالتالي:
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|noref=true|rank=best}}
ينتج ←
|image=
عند استخدام هذا الوسيط في خواص الصور تظهر الصورة مباشرة.|size=
لتحديد حجم الصورة (60 افتراضياً)، ضع القيمة دون (بك/px إلخ).
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|image=true|noref=true|rank=best|size=100}} |
|
|center=
لجعل الصورة في الوسط ضع قيمة هذا الخيار|center=yes
.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|image=true|noref=true|rank=best|size=100|center=yes}} |
|
إحداثيات جغرافية / coordinate
|formatting=latitude
يعرض خط العرض فقط.|formatting=longitude
يعرض خط الطول فقط.|formatting=precision
يعرض الدقة.|formatting=globe
يعرض عنصر الكوكب. مثال:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P625|formatting=globe}} |
|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P625|formatting=longitude}} |
|
نص أحادي اللغة / نص بلغة وحيدة / monolingualtext
- طالع أيضًا: Help:Monolingual text languages في ويكي بيانات
|langpref=
في الوحدة، هناك مرشح يعطي أولوية للقيم التي تحتوي على "اللغة = العربية". أضف القيمة المطلوبة لتعطيل هذا الفلتر.
- القيم المقبولة الأخرى هي : justlang و langcode
|langpref=justlang
لإظهار لغة النص فقط دون النص، مثل الإنجليزية.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|langpref=justlang}} |
|
|langpref=justlang
لإظهار رمز لغة النص فقط دون النص، مثل en.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|langpref=langcode}} |
|
|showlang=
استخدم أي قيمة لإظهار النص حسب تنسيق قالب:رمز لغة واسمها.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|showlang=true}} |
|
|textformat=text
اظهار النص فقط دون استخدام قوالب {{رمز لغة واسمها}} أو {{رمز لغة}}
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|textformat=text}} |
|
كمية / quantity
|nounitlink=
يظهر وحدة القياس دون وصلة.
*
|nounitshort=
لا يظهر وحدات القياس مختصرة. مثلاً لا يظهر كم بدلاً عن كيلومتر.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y}} |
|
|formatcharacters=formatnum
: تنسيق الأرقام بالفواصل.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|firstvalue=y|noref=t|formatcharacters=formatnum}} |
|
|nounit=
لا يظهر وحدة القياس.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y|nounit=t}} |
|
- مثال لاستخدام
|unitshort=
ومثال عند عدم استخدامه:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q219635|property=P2295|unitshort=t}} |
|
{{#invoke:Wikidata2|formatStatements|entityId=Q219635|property=P2295}} |
|
نص / string
|stringpattern=
تنسيق النص في قالب أو وصلة أو ماشابه يتم استبدال القيمة بـ$1. مثل|pattern=
لكن هنا تستخدم مع نوع البيانات string.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q1133289|property=P1748|noref=t|stringpattern=[https://ncit.nci.nih.gov/ncitbrowser/ConceptReport.jsp?dictionary=NCI%20Thesaurus&code=$1 $1]}} |
|
نقطة زمنية / time
|modifytime=
يحدد تنسيق الوقت أو التاريخ:|modifytime=longdate
يكتب التاريخ في شكل "٢٥ نوفمبر ٢٠٢٤"|modifytime=Y
يكتب التاريخ في شكل "٢٠٢٤" يظهر فقط السنة.|modifytime= F
يكتب التاريخ في شكل "نوفمبر" يظهر فقط الشهر.|modifytime= j
يكتب التاريخ في شكل "٢٥" يظهر فقط اليوم.
|modifyqualifiertime=
تنسيق التاريخ على النحو الوارد أعلاه، ولكن يؤثر فقط على التصفيات.qualifier
معرف خارجي / external-id
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002}} |
|
|pattern=
طريقة عرض الخاصية مثلاً في وصلات الضبط الاستنادي$1
مثلاً:<nowiki>https://viaf.org/viaf/$1/</nowiki>
.|pattern=autourl
من خواص البند أعلاه، لنمط مستخدم في الخاصية (P1630) (تنسيق عنوان URL) للخاصية المطلوبة.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002|pattern=autourl}} |
|
|pattern=autourl2
كما سبق، يقدم وصلة من نوع<nowiki>[https://viaf.org/viaf/$1/ $1] </nowiki>
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002|pattern=autourl2}} |
|
المسار / url
|urllabel=
وضع تسمية لتظهر بدلاً من الوصلة، كما في معرف خارجي ولكن في خواص الروابط.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856}} |
|
{{#invoke:Wikidata2|formatStatements|urllabel=الموقع الرسمي|entityId=Q76|property=P856}} |
|
|displayformat=
يقبل حالياً قيمة واحدة وهي|displayformat=weblink
لاستخدام وحدة:weblink لعرض وصلة الموقع.
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856|displayformat=weblink}}
ينتج ←
خيارات إضافية
|NosValue=
يستخدم لإظهار نتيجة ما عند عدم وجود قيمة محلية في وسيط|value=
وعدم وجود قيمة في ويكي بيانات.
property-(module/function) و claim-(module/function) و value-(module/function)
يتم دعم ثلاثة أنواع من معلمات الوظائف، والتي تشير أيضًا إلى كيفية تنسيق القيم:
|-module=
عنوان الوحدة|-function=
عنوان الوظيفة
property
fun( claims, options )
|property-module=
عنوان الوحدة مثل|property-module=وحدة:Wikidata2/P54
|property-function=
عنوان الوظيفة مثل|property-function=foot
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل كامل مثلاً لوضعها في جدول معين، أو فرزها بتنسيق خاص، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2/P54 الخاصة بعرض فرق لاعبي كرة القدم، مثل أندية كرة القدم حيث يتم فصل المنتخبات عن الأندية.
claim
fun( statement, options )
|claim-module=
عنوان الوحدة مثل|claim-module=وحدة:Wikidata2/P39
|claim-function=
عنوان الوظيفة مثل|claim-function=office3
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2/P39 الخاصة بخاصية المنصب (P39).
value
fun( datavalue, datatype, options )
|value-module=
عنوان الوحدة مثل|value-module=وحدة:Wikidata2/P106
|value-function=
عنوان الوظيفة مثل|value-function=formatEntityWithGenderClaim
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد لكل قيمة مثلاً لأخذ تسمية الإناث عند إستخدام خاصية (P106)، لا نستطيع هنا الحصول على التصفيات/qualifiers والمراجع/references.
- أمثلة:
- الوحدة وحدة:Wikidata2/P106 الخاصة بخاصية المهنة.
pageId
{{#invoke:Wikidata2|pageId}}
ينتج عنصر ويكي بيانات للصفحة المستخدم فيها الكود.
labelIn
- طالع أيضًا: Help:Label في ويكي بيانات
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.مثال: {{#invoke:Wikidata2|labelIn|fa|Q76}}
ينتج:
descriptionIn
- طالع أيضًا: Help:Description في ويكي بيانات
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.مثال: {{#invoke:Wikidata2|descriptionIn|en|Q76}}
ينتج:
getSiteLink / وصلات المواقع
- طالع أيضًا: مساعدة:وصلات المواقع في ويكي بيانات
|2=
أو |site=
الموقع مثل enwiki.|1=
أو|id=
عنصر ويكي بيانات.|page=
يمكن استخدام اسم الصفحة في هذه الويكي بدلاً من استخدام الوسيط|id=
.
|countsitelinks=
يستخدم فقط لإظهار عدد وصلات اللغات.مثال: {{#invoke:Wikidata2|getSiteLink|Q76}}
ينتج:
مثال: {{#invoke:Wikidata2|getSiteLink|Q76|enwiki}}
أو: {{#invoke:Wikidata2|getSiteLink|id=Q76|site=enwiki}}
- ينتج:
أو:
توصيف | يظهر |
---|---|
<syntaxhighlight lang="shell">{{#invoke:Wikidata2 |getSiteLink |page=اليمن |site=enwiki }} </syntaxhighlight> | |
Dump
مثال: {{#invoke:Wikidata2|Dump|claims|P19}}
- مثال2:
{{#invoke:Wikidata2|Dump|id=Q76|claims|P19}}
- مثال موسع:
{{#invoke:Wikidata2|Dump|claims|P1791|1|references|1|snaks|P244|1|datavalue|value}}
isSubclass / نوع فرعي من
إن كانت قيمة (P31) أو (P279) للصفحة التي وضع فيها الكود أو للصفحة في الوسيط |id=
مساوية للوسيط |parent=
ينتج 'true' غير ذلك لا ينتج شيئاً.
كامل الخيارات:{{#invoke:Wikidata2|isSubclass|parent=|maxDepth=1|property=|id=|exitItem=}}
- مطلوب:
|parent=
مثلاً (Q5) |maxDepth=
عمق البحث في الصفحات.|property=
الخاصية المطلوبه (افتراضياً (P31)، و (P279))|id=
الصفحة المطلوب البحث فيها.|exitItem=
مثال:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|isSubclass|parent=Q5|maxDepth=1|id=Q76}} |
|
{{#invoke:Wikidata2|isSubclass|parent=Q45|maxDepth=5|id=Q76}} |
خطأ لوا: عدد كبير جدا من ادعاءات "mw.wikibase.getReferencedEntityId"، فقط ما يصل إلى ٣ مسموح به.. |
EntityIdForTitle
يعطي معرف ويكي بيانات من خلال عنوان المقالة: مثال:
{{#invoke:Wikidata2|EntityIdForTitle|اليمن}}
- ينتج:
{{#invoke:Wikidata2|EntityIdForTitle|وحدة:Wikidata2}}
- ينتج:
آخر التحديثات
- 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 :
- 2 مارس 2018 :
- 5 فبراير 2018:
- اضافة الخيار
|formatcharacters=formatnum
لإظهار تنسيق الأرقام بالفواصل مثل ١٠٬٠٠٠٬٠٠٠.
- اضافة الخيار
- 25 يناير 2018:
- اضافة الخيار
|countsitelinks=t
لإظهار عدد وصلات اللغات.
- اضافة الخيار
- 9 ديسمبر 2017:
- إضافة الخيار
|page=
يمكن أن يستخدم بديلاً عن|entityId=
بوضع اسم الصفحة خاص:فرق/25985344.
- إضافة الخيار
-- local fallback = {'en', 'nb', 'da', 'nn', 'de', 'fr', 'es', 'it', 'pt'} local formatera = require('Module:Wikidata2/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 flags = require('Module:Wikidata2/Flags') 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 = langcode or 'ar' local entity = getEntityFromId(id) --[[ local description, lange = mw.wikibase.getDescriptionWithLang( id ) --mw.log( "descriptionIn:description : " .. description ",lange : " .. lange ".") if lange == lan then --return description return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'}) else --mw.log( "descriptionIn:langcode : " .. langcode ",lange : " .. lange ".") --return nil return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'}) --return str end ]] 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 end end function labelIn(langcode,id) -- returns item label for a given language if not mw.wikibase then return nil end local lang = langcode if not langcode or langcode == "" then lang = "ar" end if type(id) ~= "string" then id = tostring(id) end local label = mw.wikibase.getLabelByLang( id , lang ) or nil 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 arwiki sitelink if options.illwd2nowd and options.illwd2nowd ~= '' then noWD='' else noWD='y' end local jlabel = label --formatcharacters(label, options) -- The label local ar = labelIn('ar',entityId ) -- The arabic label --mw.log('ar'..ar) local arlabel = ar --formatcharacters(ar, options) if labeloption and labeloption ~= '' then jlabel = labeloption elseif options.illwd2 and options.illwd2 ~= '' and arlabel and arlabel ~= '' then jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {arlabel, fromlua="t", id=entityId, y = (options.illwd2y or '') } } --jlabel = arlabel --elseif options.enlabelcate and options.enlabelcate ~= '' then --jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {id=entityId, fromlua="t", target='en', y = (options.illwd2y or '') } } --jlabel = label --end elseif options.enlabelcate and options.enlabelcate ~= '' then if not arlabel or arlabel == '' then jlabel = label --formatcharacters(label, options) if jlabel and jlabel ~= '' then jlabel = jlabel ..' [['.. i18n.noarabiclabel ..'|'.. entityId ..']]' end else jlabel = arlabel end else--if options.justarabic and options.justarabic ~= '' then if arlabel and arlabel ~= '' then jlabel = arlabel else jlabel = nil end end if jlabel and jlabel ~= '' then --mw.log('jlabel' .. jlabel ) 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 stri = (Prefix or ' (').. (qualpref or '') .. p .. (Suffix or ')') if options.nosmall and options.nosmall ~= '' then return stri else return mw.text.tag('small', {}, stri ) end 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" then numval = tonumber(numval) end 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 --local property = mw.wikibase.resolvePropertyId( options.property:upper() ) local property = options.property:upper() --property = options.property:upper() if not entity then return '' end --TODO error? if not entity.claims or not entity.claims[property] then if options.otherproperty and options.otherproperty ~= "" then options.property = options.otherproperty property = options.otherproperty end end 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 .. addTrackingCategory(args.property,args) --catewikidatainfo({property = 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 'ar')}, 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 to get countries flags without reload large countries items ]] function get_property1(options , item) local flagprop = { "p27","p1532","p17","p495","p1376" } local work_flag = false local property1 = options.property1 or options["property1"] if string.lower(property1) == "p41" then for k, l in pairs(flagprop) do if string.lower(options.property) == l then work_flag = true end end end caca = '' local size = options.size or "" if size == "" then size = "20" end if work_flag then local flag = flags[item] if not flag or flag == '' then flag = 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"] ,noref='true' ,firstvalue ='true' } ) --mw.log("get flag2 :" .. flag .. ", for item ".. item ) end if flag and flag ~= '' then -- return real image if options.image and options.image ~= '' then -- return real image caca = '[[file:' .. flag .. '|'.. size ..'px|'..'border'..']]' --caca = Infobox_Image( {image = flag, size = size, maxsize = "280x330px", center = options.center} ) mw.log("get flag :" .. flag .. ", for item ".. item ) end end end if caca == "" then 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' } ) end return caca end 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 = get_property1(options , item) 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' ,avoidvalue = options.avoidvaluepropertyimage ,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 ]] local size = options.size or "" 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 = size end tid = Infobox_Image( params ) --tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '20')..'px|border]]' --if options.center and options.center ~= "" then --tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '20')..'px|border|center]]' --end 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 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 local text = datavalue.value.text if options.textformat and options.textformat == "text" then return {value = text} end 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 'arwiki' 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 'arwiki' --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 ]] local str = string.gsub( str , '%%' , '%%%%' ) local res = mw.ustring.gsub( options.pattern, '$1', str ) --الحصول على اول نتيجة للدالة return res 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[property] else claims31 = entity.claims['P31'] claims279 = entity.claims['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 wd_arg = frame:getParent().args["ويكي بيانات"] or frame.args["ويكي بيانات"] -- arg used to ban wikidata value if wd_arg and wd_arg == 'لا' then return "" 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.mainsuffix and options.mainsuffix ~= '' then -- mainsuffix s = s .. options.mainsuffix end if options.addTrackingCat and options.addTrackingCat ~= '' then -- add tracking cat s = addTrackingCategory(s,options) 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