وحدة:بطاقة/أدوات

من ويكيبيديا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث
-- أدوات مشتركة لبناء قوالب infobox
local localdata = require( 'وحدة:بطاقة/بيانات' )
local item = localdata.item

local xmath = require('Module:Math')

function FormatNumVal(value) 
	value= tonumber(value)
	if value == 0 then return value end
	
	if(math.abs(value) >1E15) 
    	then return xmath.round({precision= 3, value=value/1E15}) .." [[كوادريليون|بليار]]"
    elseif(math.abs(value) >1E12) 
		then return xmath.round({precision= 3, value=value/1E12}) .." [[تريليون]]"
	elseif(math.abs(value) >1E9) 
		then return xmath.round({precision= 3, value=value/1E9}) .." [[بليون]]"
	elseif(math.abs(value) >1E6) 
  		then return xmath.round({precision= 3, value=value/1E6}) .." [[مليون]]"
	end

	return xmath.round({precision= 3, value=value})
end;

local function getValue(val, params)
	if type(val) == 'string' then
		return localdata[val]
	elseif type(val) == 'function' then
		return val(localdata, localdata.item, params)
	elseif type(val) == 'table' then
		for i, j in pairs(val) do -- في حال وجود قيم لأكثر من وسيط : أخذ بعين الاعتبار أول قيمة
			if localdata[j] then
				return localdata[j]
			end
		end
	end
end

local generic = {}

generic.FormatNumVal = FormatNumVal

function generic.title(args)
	return {
		type = 'title',
		value = function() 
			return localdata['اسم'] or localdata['الاسم'] or localdata.title or localdata.name 
				or (type(localdata.item) == 'table' and type(localdata.item.id) == 'string'
				   and mw.wikibase.label(localdata.item.id) and mw.language.getContentLanguage():ucfirst( mw.wikibase.label(localdata.item.id) ) )
				or mw.title.getCurrentTitle().text
		end,
		subtitle = function() return args and localdata[args.subtitleparam] end,
		wikidatasubtitle = args and args.subtitlequery,
		icon = args and args.icon,
		style = args and args.style,
	}
end

function generic.mainimage(params)
	if type( params ) ~= 'table' then params = {} end

	return {
		type = 'images',
		wikidata = params.wikidata or {property = 'P18'},
		imageparameters = params.imageparameters or  {'صورة','الصورة','Image','image'},
		defaultimages = params.defaultimage,
		defaultimagelink = 'ويكيبيديا:صور',
		sizeparameter = params.sizeparameter or  {'حجم الصورة','حجم_الصورة','عرض_الصورة'},
		uprightparameter = params.uprightparameter or  'upright',
		defaultupright = params.upright,
		defaultsize = 	params.size,
		maintenancecat = params.cat or 'مقالات تحتاج إلى صور',
		captionparameter = params.captionparameter or  {'تعليق', 'تعليق_الصورة','تعليق الصورة','عنوان_الصورة','عنوان الصورة','التعليق','caption','image_caption','Caption'},
		altparameter = params.altparameter or 'بديل الصورة' or 'image_alt',
		defaultalt = params.alt,
		defaultimagealt = params.defaultimagealt,
		numval = 1,
	}
end

function generic.logo(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = 'P154',
		imageparameters = params.imageparameters or  {'شعار','الشعار','logo'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  {'تعليق الشعار','تعليق_الشعار'},
		defaultupright = params.upright or  upright or '0.6',
		uprightparameter = params.uprightparameter or  'upright logo',
		sizeparameter = params.sizeparameter or  {'حجم الشعار','عرض_الشعار'},
		numval = 1,
	}
end

function generic.blason(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = {'P94', 'P158'},
		imageparameters = params.imageparameters or  {'شعار النبالة','شعار_النبالة','ختم','coat_of_arms','seal'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  {'تعليق نبالة','تعليق ختم','coat_of_arms_caption','seal_caption'},
		defaultupright = params.upright or  upright or '0.8',
		uprightparameter = params.uprightparameter or  {'upright coa', 'upright seal'},
		sizeparameter = params.sizeparameter or  {'coa_size', 'seal_size'},		
		numval = 1,
	}
end

function generic.flag(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = 'P41',
		imageparameters = params.imageparameters or  {'العلم','علم','flag'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  'تعليق العلم',
		defaultupright = params.upright or  upright or '0.6',
		uprightparameter = params.uprightparameter or  'upright drapeau',
		sizeparameter = params.sizeparameter or  {'حجم العلم','flag_size'},
		numval = 1,
	}
end

function generic.sign(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = 'P14',
		imageparameters = params.imageparameters or  {'لافتة'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  'تعليق اللافتة',
		defaultupright = params.upright or  upright or '0.4',
		uprightparameter = params.uprightparameter or  'upright signalisation',
		sizeparameter = params.sizeparameter or  'حجم اللافتة',
		numval = 1,
	}
end

function generic.icon(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = 'P2910',
		imageparameters = params.imageparameters or  {'أيقونة','icon'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  {'تعليق أيقونة'},
		defaultupright = params.upright or  upright or '0.4',
		uprightparameter = params.uprightparameter or  'upright icon',
		sizeparameter = params.sizeparameter or  'icon_size',
		numval = 1,
	}
end

function generic.scheme(params)
	if not params then params = {}	end

	return {
			type = 'images',
			property = 'P5555',
			imageparameters = params.imageparameters or  {'مخطط','scheme'},
			captionparameter = params.captionparameter or  'تعليق المخطط',
			defaultupright = params.upright or  upright,
			uprightparameter = params.uprightparameter or  'upright scheme',
			sizeparameter = params.sizeparameter or  'حجم المخطط',
			numval = 1,
		}
end

function generic.planview(params)
	if not params then params = {}	end

	return {
			type = 'images',
			property = 'P3311',
			imageparameters = params.imageparameters or  {'مسقط','planview'},
			captionparameter = params.captionparameter or  'تعليق المسقط',
			defaultupright = params.upright,
			uprightparameter = params.uprightparameter or  'upright planview',
			sizeparameter = params.sizeparameter or  'حجم المسقط',
			numval = 1,
		}
end

function generic.bathymetricmap(params)
	if not params then params = {}	end

	return {
		type = 'images',
		property = 'P207',
		imageparameters = params.imageparameters or  {'خريطة قياس الأعماق'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = params.captionparameter or  'تعليق خريطة قياس الأعماق',
		defaultupright = params.upright or  upright or '1',
		uprightparameter = params.uprightparameter or 'upright carte bathymétrique',
		sizeparameter = params.sizeparameter or  'حجم خريطة قياس الأعماق',
		numval = 1,
	}
end

-- روابط خارجية
function generic.website(params) 
	if not params then params = {}	end
	return { 
		type = 'mixed'
		, label = params.label or 'موقع الويب' 
		, plurallabel = params.plurallabel or  'مواقع الويب'
		, value = params.value or  {'موقع ويب','موقع_ويب','موقع','url','website'}
        , valueStyle = { ['text-align'] = 'left', ['direction'] = 'ltr', ['font-size'] = '0.9em'}
        
        , wikidata = {wikimod = 'Wikidata.Ca', 
        	property = params.property or 'P856', 
        	qualifier='P407', whitelist1='Q13955', -- for arabic website
        	formatting='table', conjunction = '<br />',
        	rowformat="$0$R0 $1", 
        	rowsubformat1='<small><span class="languageicon" style="font-size:0.75em; font-weight:bold; color:#555;">($1)</span></small>',
        	colformat0="weblink", colformat1="label"
        	}
        , wikidata2 = {wikimod = 'Wikidata.Ca', 
        	property = params.property or 'P856', listrank='bestrank',
        	qualifier='P407',  -- for other languages website
        	formatting='table', conjunction = '<br />',
        	rowformat="$0$R0 $1", 
        	rowsubformat1='<small><span class="languageicon" style="font-size:0.75em; font-weight:bold; color:#555;">($1)</span></small>',
        	colformat0="weblink", colformat1="label"
        	}
	}
end

-- أصوات
function generic.selectSound(params)
	if not params then params = {}	end

	params.type		      = 'images'
	params.style          = params.style or  {['padding-top'] = '25px'}
	params.defaultcaption = 'الصوت'
	params.caption        = params.captionparameter or  'تعليق الصوت'
	params.value		  = params.valueparameter or  {'صوت','sound'}
	params.defaultsize    = '280'
	params.numval         = params.numval or 1

    params.wikidata = {wikimod = 'Wikidata.Ca', 
        	property = params.property or 'P51', 
        	qualifier='P407', whitelist1='Q13955', -- for arabic 
        	formatting='table', conjunction = '<br />',
        	rowformat="$0", 
        	}
    params.wikidata2 = {wikimod = 'Wikidata.Ca', 
        	property = params.property or 'P51', listrank='bestrank',
        	qualifier='P407',  -- for other languages 
        	formatting='table', conjunction = '<br />',
        	rowformat="$0", 
        	}

    return params

end

function generic.pronunciation(params)

	if not params then params = {}	end

	params.property = 'P443'

	params.defaultcaption = 'التهجئة'
	params.captionparameter = params.captionparameter or  'تعليق التهجئة'
	params.value		  = params.valueparameter or  {'تهجئة','pronunciation'}
	params.numval        = 1
	
	return p.selectSound(params)
end


function generic.dimensions(default)
	local function getDimensions(args)
	    local Dimensionsfunction = require('Module:Dimensions').main
	
		local noerr,data, nb
		noerr,data = pcall(Dimensionsfunction,args)	
		if noerr 
			then return data 
			else 
				addMaintenanceCat('مقالات بها أخطاء مصدرها وحدة بطاقة')
				mw.log("WD Query Error : "..mw.dumpObject(data))
				return '<span class="error">' .. (data) .. '</span>' 
		end
	end

	return {
		type = 'mixed'
		,label = 'الأبعاد' 
		,value = function() 
			return localdata['أبعاد'] or localdata['الأبعاد'] or localdata.dimensions or localdata.dim 
				or (type(localdata.item) == 'table' and type(localdata.item.id) == 'string'
				   and getDimensions({
				   		item=localdata.item.id
				   		,diameter = localdata.diameter or localdata['قطر']
						,height = localdata.height or localdata['ارتفاع']
						,draft = localdata.draft or localdata['عمق تحت خط الماء']
						,clearance = localdata.clearance or localdata['مسافة تحتية']
						,width = localdata.width or  localdata.beam or localdata['عرض']
						,length = localdata.length or localdata['horizontal depth'] or localdata['طول'] or localdata['عمق أفقي']
						,span = localdata.span or localdata['بين الركائز']
						,thickness = localdata.thickness or localdata['سمك']}) ) 
		end,
	}
end

function generic.awards(params)
	return 	{type = 'row', label = 'الجوائز', value = {'جوائز','جائزة','awards'}
				, wikidata = { wikimod = 'Wikidata.Ca'
					, property='P166', tablesort='1',sorting='-1', separator='<br />'
					, qualifier='P585', qualifier2='P1686'
					, qualifier3 ='P1027',qualifier4 ='P166/P2425',qualifier5 ='P1346'
					, formatting = 'table', rowformat='* $4&nbsp;$0$R0 $1$2$3$5'
					, rowsubformat1='<small>($1)</small>'
					, rowsubformat2="<small><br />, عن عمل ''«$2»''</small>"
					, rowsubformat3='<small><br />&nbsp;تمنحها  $3</small>'
					, rowsubformat4='[[file:$4|30px|link=]]'
					, rowsubformat5='<small><br />منحت لـ $5</small>'
				}}
end

function generic.motto(param)
    return {type = 'row', label = 'الشعار النصي'
				, value = {'شعار_نصي','motto','motto_text'}
				, defaultvalue = getValue{param}
				, wikidata= {wikimod = 'Wikidata.Ca', property = 'P1451'
					, conjunction = "<br />"
					, formatting = '$text {{Language icon|NoCat=y|$language}}'}}
end


-- أدوات تحديد الموقع الجغرافي

function generic.country(default)
    local building = require 'وحدة:بطاقة/أدوات/مبنى'
	return building.country(default)	
end

function generic.geoloc(params)

	if not params then params = {}	end

	if (localdata['خريطة الموقع'] == '-') then
		return nil
	end

    local id = (localdata.item and localdata.item.id) 
    local geotype = 'Point'
    if id and (#(mw.wikibase.getBestStatements(id, 'P3896')) ~=0) then geotype = 'geoshape' end
    --mw.logObject(mw.wikibase.getBestStatements(id, 'P3896')) --P402
	
	return   { 
		type = 'map',
		latitude = {'دائرة عرض','دائرة العرض','latitude'},
		longitude = {'خط طول','خط الطول','longitude'},
		pointtype = params.pointtype,
		maptype = params.type,
		globe = localdata.globe or localdata['كوكب'] or params.globe,
		marker = params.marker,
		markercolor = params.markercolor,
		shapecolor = params.shapecolor,
		markersize= params.markersize,
		markersymbol=params.markersymbol,
		default_zoom = localdata['zoom'] or localdata['تكبير'] or params.default_zoom,
		ids = params.ids or params.id ,
        geotype = geotype,
        --debug = 1
	}
end

function generic.coordinates(params)
	if not params then params = {}	end

	return	{type = 'mixed', label = 'الإحداثيات'
			, value = {'إحداثيات','احداثيات','coordinates'}  
			, wikidata ={ 
				 wikimod = 'Wikidata.Ca' ,listrank='bestrank'
				,property = 'P625' ,formatting="{{coord|$lat|$lon|globe:$globe|format=dms}}" }, 
        }
end

function generic.locationmap(params)

	if not params then params = {}	end

	return {
		type = 'images',
		imageparameters = params.imageparameters or {'صورة خريطة'},
		sizeparameter = params.sizeparameter or 'حجم صورة خريطة',
		captionparameter = params.captionparameter or {'تعليق صورة خريطة'},
		defaultupright = params.upright or '1',
		property = 'P242',
		numval = 1,
	}
end


function generic.detailedmap(params)

	if not params then params = {}	end

	return {
		type = 'images',
		imageparameters = params.imageparameters or {'صورة خريطة'},
		sizeparameter = params.sizeparameter or 'حجم صورة خريطة',
		captionparameter = params.captionparameter or {'تعليق صورة خريطة'},
		defaultupright = params.upright or '1',
		defaultsize = params.defaultsize,

		property = 'P1621',
		numval = 1,
	}
end

return generic