يمكن إنشاء صفحة توثيق الوحدة في وحدة:Wikidata/تتبع/شرح

local p = {}

function trim(s)
		--Removes leading zeroes from value
		if s:sub(1,1)=="P" then return s:sub(2)
		else return s
		end
	end
local function category(propertyid,q,nocate)
        main = '[[تصنيف:صفحات بها بيانات ويكي بيانات|'.. trim(propertyid) ..']]'
	if nocate and nocate  ~= ''  
		then -- to hide the category
	 		return ''
	 	elseif q and q  ~= ''  
		then 
	 		return q..''..main 
	end
	d = mw.text.trim(propertyid)
	s = list(d)
	if s then
		return '[[تصنيف:'.. s ..']]'..main  -- linktext(s)
	end
end

local function icons(u,id,noicon,icon2)
	if noicon and noicon  ~= ''  
		then -- to hide the icon
	 		return ''
	end
	local label = mw.wikibase.label(u) --{{#invoke:Wikibase|label| u }}
		if label ==nil or not label 
			then label ='' 
			else
		end

	local temp =  label .. ' ('.. u ..')'
	local ico =  'Twemoji_270f.svg|13px'
		if icon2 and icon2 ~='' then 
			ico = 'Wikidata-logo.svg|20px' 
			size = '20px' 
			end
	local so = 'تعديل قيمة خاصية ' .. temp ..' في ويكي بيانات'
	local im =' [[ملف:'.. ico .. '|baseline|link=d:'.. (id or '') .. '#'.. u ..'|'.. so .. ']]'
	local noprint=  '<span class="noprint">'.. im ..'</span>'
	local sup=  '<sup>'.. noprint ..'</sup>'
	if u then
		return noprint
	end
end

local function xt(e)
		return  'صفحات تستخدم خاصية '.. e
end

local function wd(e)
		return e .. ' من ويكي بيانات'
end

local categorieskey = {
	['6'] 	 = 'رئيس حكومة'
	,['7']	 = 'أخ'
	,['3373']	 = 'أخ أو أخت'
	,['9']	 = 'أخت'
	,['17']	 = 'بلد'
	,['474']	 = 'رمز اتصال بلد'
	,['18']	 = 'صور'
	,['19']	 = 'مكان ميلاد'
	,['20']	 = 'مكان وفاة'
	,['22']	 = 'والد'
	,['25']	 = 'والدة'
	,['26']	 = 'زوج أو زوجة'
	,['27']	 = 'مواطنة شخص'
	,['35']	 = 'أعلى منصب'
	,['36']	 = 'عاصمة'
	,['37']	 = 'لغة رسمية'
	,['38']	 = 'عملة'
	,['39']	 = 'منصب'
	,['40']	 = 'أبناء'
	,['41']	 = 'علم'
	,['50']	 = 'مؤلف'
	,['53']	 = 'عائلة'
	,['54']	 = 'فرق لاعب'
	,['57']	 = 'مخرج'
	,['58']	 = 'سيناريو'
	,['61']	 = 'مكتشف'
	,['66']	 = 'مسقط رأس شخص'
	,['69']	 = 'مدرسة أم'
	,['84']	 = 'مهندس معماري'
	,['86']	 = 'موسيقي'
	,['94']	 = 'شعار نبالة'
	,['98']	 = 'محرر'
	,['101']	 = 'مجال عمل'
	,['102']	 = 'حزب'
	,['106']	 = 'مهنة'
	,['108']	 = 'إدارة شخص'
	,['109']	 = 'توقيع'
	,['112']	 = 'مؤسس'
	,['115']	 = 'ملعب'
	,['119']	 = 'مكان دفن شخص'
	,['123']	 = 'ناشر'
	,['127']	 = 'مالك'
	,['131']	 = 'تقسيم إداري'
	,['135']	 = 'تيار'
	,['136']	 = 'نوع فني'
	,['137']	 = 'مشغل'
	,['138']	 = 'سبب تسمية'
	,['140']	 = 'ديانة'
	,['141']	 = 'حالة حفظ'
	,['144']	 = 'عمل أصلي'
	,['154']	 = 'شعار'
	,['155']	 = 'سبقه'
	,['156']	 = 'تبعه'
	--,['157']	 = 'قتله'
	,['158']	 = 'ختم'
	,['159']	 = 'مقر رئيسي'
	,['162']	 = 'منتج'
	,['166']	 = 'جوائز'
	,['169']	 = 'مدير تنفيذي لشركة'
	,['170']	 = 'مخترع'
	,['172']	 = 'عرقية شخص'
	,['178']	 = 'مطور'
	,['78']	 = 'رمز انترنت'
	,['179']	 = 'سلسلة'
	,['181']	 = 'خريطة إنتشار'
	,['184']	 = 'مشرف الدكتوراة'
	,['185']	 = 'طلاب دكتوراة'
	,['186']	 = 'المواد المستخدمة'
	,['218']	 = 'رمز أيزو 639-1'
	,['219']	 = 'رمز أيزو 3166-2'
	,['219']	 = 'رمز أيزو 639-2'
	,['220']	 = 'رمز أيزو 639-3'
	,['221']	 = 'رمز أيزو 639-6'
	,['225']	 = 'تسمية علمية'
	,['238']	 = 'رمز اياتا'
	,['239']	 = 'رمز ايكاو'
	,['241']	 = 'فرع عسكري'
	,['242']	 = 'خريطة'
	,['243']	 = 'معرف Oclc'
	,['249']	 = 'رمز شركة بالبورصة'
	,['263']	 = 'مقر رسمي'
	,['264']	 = 'شركة تسجيلات'
	,['272']	 = 'إستوديو'
	,['274']	 = 'صيغة جزيئية'
	,['275']	 = 'رخصة'
	,['277']	 = 'لغة برمجة'
	,['279']	 = 'نوع فرعي'
	,['281']	 = 'رمز بريدي'
	,['286']	 = 'مدرب'
	,['287']	 = 'مصمم'
	,['297']	 = 'رمز أيزو 3166-1'
	,['300']	 = 'رمز أيزو 3166-2'
	,['306']	 = 'نظام تشغيل'
	,['345']	 = 'عنوان imdb'
	,['355']	 = 'شركات فرعية'
	,['364']	 = 'لغة'
	,['373']	 = 'قالب تصنيف كومنز بوصلة'
	,['404']	 = 'نمط لعبة'
	,['405']	 = 'واضع تسمية علمية'
	,['408']	 = 'محرك'
	,['421']	 = 'توقيت'
	,['410']	 = 'رتبة عسكرية'
	,['412']	 = 'طبقة صوتية'
	,['413']	 = 'مركز لاعب'
	,['414']	 = 'بورصة'
	,['425']	 = 'مجال مهنة'
	,['428']	 = 'اختصار عالم نبات'
	,['449']	 = 'شبكة البث'
	,['452']	 = 'صناعة شركة'
	,['463']	 = 'عضو في'
	,['473']	 = 'رمز هاتفي'
	,['493']	 = 'كود ICD9'
	,['494']	 = 'كود ICD10'
	,['495']	 = 'بلد منشأ'
	,['498']	 = 'رمز أيزو 4217'
	,['509']	 = 'سبب وفاة'
	,['598']	 = 'قيادات شخص'
	,['511']	 = 'بادئة شرفية'
	--,['516']	 = 'محرك'
	,['1035']	 = 'لاحقة شرفية'
	,['512']	 = 'شهادة جامعية'
	,['527']	 = 'مكونات'
	,['551']	 = 'إقامة شخص'
	,['555']	 = 'سجل الفوز زوجي'
	,['562']	 = 'مصرف'
	,['563']	 = 'كود ICDO'
	,['564']	 = 'سجل الفوز فردي'
	,['569']	 = 'تاريخ ميلاد'
	,['570']	 = 'تاريخ وفاة'
	,['571']	 = 'تاريخ بداية'
	,['574']	 = 'تاريخ وضع تسمية علمية'
	,['575']	 = 'تاريخ تأسيس'
	,['576']	 = 'تاريخ نهاية'
	,['577']	 = 'تاريخ صدور'
	,['580']	 = 'تاريخ البدء'
	,['582']	 = 'تاريخ الانتهاء'
	,['585']	 = 'تاريخ'
	,['607']	 = 'معارك'
	,['610']	 = 'أعلى قمة'
	,['625']	 = 'إحداثيات'
	,['634']	 = 'كابتن'
	,['641']	 = 'رياضة'
	,['646']	 = 'قالب فريبيس يستخدم بيانات'
	,['737']	 = 'تأثر بشخص'
	--,['746']	 = 'تاريخ الاختفاء'
	,['748']	 = 'معين'
	,['2130']	 = 'ميزانية'
	,['749']	 = 'شركة أم'
	,['750']	 = 'موزع فيلم'
	,['757']	 = 'معرف موقع تراث'
	,['769']	 = 'تداخل دوائي'
	,['798']	 = 'تسمية عسكرية'
	,['800']	 = 'أهم الأعمال'
	,['802']	 = 'طلاب'
	,['812']	 = 'تخصص أكاديمي'
	,['835']	 = 'اختصار عالم حيوان'
	,['856']	 = 'موقع رسمي بوصلة'
	,['915']	 = 'موقع تصوير'
	,['921']	 = 'موضوع رئيسي'
	,['935']	 = 'وصلة كومنز'
	,['957']	 = 'معرف ISBN'
	,['1036']	 = 'معرف Dewey'
	,['1040']	 = 'مونتاج'
	,['1050']	 = 'مشكلة صحية'
	,['1056']	 = 'منتجات شركة'
	,['1066']	 = 'تعلم لدى'
	,['1082']	 = 'تعداد سكاني'
	,['1399']	 = 'تهمة'
	,['1098']	 = 'عدد المتحدثين'
	,['1104']	 = 'عدد الصفحات'
	,['1120']	 = 'وفيات'
	,['1128']	 = 'عدد موظفي شركة'
	,['1132']	 = 'عدد المشاركين'
	,['1146']	 = 'قالب اتحاد ألعاب القوى يستخدم بيانات'
	,['1233']	 = 'قالب اسفدب يستخدم بيانات'
	,['1303']	 = 'آلات فنان'
	,['1308']	 = 'شاغل منصب'
	,['1308']	 = 'شاغل منصب'
	,['1339']	 = 'إصابات'
	,['1346']	 = 'فائز'
	,['1365']	 = 'سبقه'
	,['1366']	 = 'تبعه'
	,['1389']	 = 'شهادة المنتج'
	-- ,['1409']	 = 'قالب أرشيف ركوب الدراجات يستخدم بيانات'
	,['1412']	 = 'لغة كاتب'
	,['1431']	 = 'منتج تنفيذي'
	,['1442']	 = 'صورة القبر'  --not yet
	,['1446']	 = 'مفقودين'
	,['1447']	 = 'قالب سبورتس رفرنس يستخدم بيانات'
	,['1448']	 = 'اسم رسمي'
	,['1451']	 = 'شعار نصي'
	,['1476']	 = 'عنوان'
	,['1477']	 = 'اسم الولادة'
	,['1532']	 = 'بلد الرياضة'
	,['1546']	 = 'شعار وطني'
	,['1559']	 = 'اسم أصلي'
	,['1562']	 = 'عنوان أول موفي'
	,['1581']	 = 'مدونة'
	,['1589']	 = 'أخفض نقطة'
	,['1590']	 = 'خسائر'
	,['1618']	 = 'رقم لاعب'
	,['1663']	 = 'قالب برو سايكلنج يستخدم بيانات'
	,['1705']	 = 'اسم محلي'
	,['1798']	 = 'رمز أيزو 639-5'
	,['1971']	 = 'عدد الابناء'
	,['1972']	 = 'معرف أوبن هب يستخدم بيانات'
	,['1995']	 = 'اختصاص مرض'
	,['2002']	 = 'اسم المستخدم في تويتر'
	,['2003']	 = 'اسم المستخدم في إنستغرام'
	,['2013']	 = 'معرف فيسبوك'
	,['2019']	 = 'قالب اسم أول موفي يستخدم بيانات'
	,['2035']	 = 'وصلة ملف شخصي على لينكد إن'
	,['2043']	 = 'طول'
	,['2044']	 = 'الارتفاع عن سطح البحر'
	,['2046']	 = 'مساحة'
	,['2047']	 = 'مدة'
	,['2049']	 = 'عرض'
	,['2048']	 = 'ارتفاع'
	,['2067']	 = 'وزن'
	,['2073']	 = 'مدى'
	,['2090']	 = 'قالب باور اوف تن يستخدم بيانات'
	,['2097']	 = 'مدة ولاية'
	,['2096']	 = 'وصف صورة'
	,['2101']	 = 'نقطة الانصهار'
	,['344']	 = 'مصور سينمائي'
	,['2142']	 = 'إيرادات'
	,['2218']	 = 'ثروة شخص'
	,['2250']	 = 'متوسط العمر'
	,['2284']	 = 'سعر الصرف'
	,['2386']	 = 'قطر'
	,['2397']	 = 'معرف قناة يوتيوب'
	,['2438']	 = 'راوي'
	,['2522']	 = 'فوز شخص'
	,['2534']	 = 'صيغة'
	,['2656']	 = 'تصنيف الفيفا'
	,['2716']	 = 'صورة مجمعة'--not yet 
	,['2847']	 = 'معرف جوجل+'
	,['2910']	 = 'إيقونة'--not yet 
	,['2963']	 = 'معرف مؤلف على جود ريدز'
	,['2969']	 = 'معرف كتاب على جود ريدز'
	,['3040']	 = 'معرف ساوند كلاود'
	,['3185']	 = 'اسم مستخدم فكونتاكتي'
	,['3207']	 = 'معرف فاين'
	,['3265']	 = 'معرف ماي سبيس'
	,['3267']	 = 'معرف مستخدم فليكر'
	,['3383']	 = 'ملصق فيلم'
	,['3789']	 = 'اسم مستخدم على تيليجرام '
	,['3836']	 = 'اسم مستخدم بنترست'
	,['3943']	 = 'معرف تمبلر'
	-- ,[' ']	 = ' '
	-- ,[' ']	 = ' '
	-- ,[' ']	 = ' '
	-- ,[' ']	 = ' '
	}

function list(s)
	local I = trim(s)
	local key = categorieskey[I]
	if key and key ~= "" then
		--mw.log("key: " .. key)
		return wd(key)
	else 
		return xt(s)
	end
end

function p.pageId(frame)
	if not mw.wikibase then
		return nil
	end
	entity = mw.wikibase.getEntityObject()
	if not entity 
	then 
		return nil
	else 
		return entity.id
	end
end

function p.makecategory1(options)  --Main function
	prop = options['property']
	noicon = options['noicon'] -- options to hide the icon.
	nocate = options['nocate']  -- options to hide the category.
	q = options['category']
	iid = options['entityId'] or options['id']
	icon2 = options['icon2']
	if iid == '' or not iid then
             id = p.pageId()
             else id = iid 
      end
	if prop  == '' or not prop then
		return nil -- don't do anything if no options property.
	end
	propertyid = mw.ustring.gsub(prop:upper(), " ", "")

	icon = icons(propertyid,id,noicon,icon2)   -- function to display the icon.
	cate = category(propertyid,q,nocate) -- function to display the category.
	
	last = cate ..''.. icon
		return last
end

function p.makecategory(frame)  --Main function
	local final = p.makecategory1(frame.args)
	return final
end

function p.make1(prop,id)  --Main function
	if id == '' or not id then
             id = p.pageId()
             else id = iid 
      end
	if prop  == '' or not prop then
		return nil -- don't do anything if no args property.
	end
	propertyid = mw.ustring.gsub(prop:upper(), " ", "")

	icon = icons(propertyid,id,noicon)   -- function to display the icon.
	cate = category(propertyid,q,nocate) -- function to display the category.
	
	last = cate ..''.. icon
		return last
end


function p.SS(frame) --testing function
	s = mw.ustring.gsub(frame.args['property']:upper(), " ", "")
	s = list(s)
	s = mw.text.trim(s)
	if s  == '' or not s then
		return  nil
	end
	q = frame.args['category']
	if q  == '' or not q then
		return category(s)
        else return q
	end
	
end

return p