మాడ్యూల్:Lok sabha constituency

వికీపీడియా నుండి
Jump to navigation Jump to search
Module documentation[view] [edit] [history] [purge]

Usage[మార్చు]

తిరుపతి లోకసభ నియోజకవర్గం [ edit ]
Current MPCurrent MP (Successful candidate - P991) name is missing at d:Q3764514
PartyQualifier Political party (102) is missing under P585 in d:Q3764514
Elected Year2014 Election
Stateఆంధ్ర ప్రదేశ్
Assembly
Constituencies
సర్వేపల్లి శాసనసభ నియోజకవర్గం
గూడూరు శాసనసభ నియోజకవర్గం
సూళ్ళూరుపేట శాసనసభ నియోజకవర్గం
వెంకటగిరి శాసనసభ నియోజకవర్గం
తిరుపతి శాసనసభ నియోజకవర్గం
శ్రీకాళహస్తి శాసనసభ నియోజకవర్గం
సత్యవేడు శాసనసభ నియోజకవర్గం

Copy this template to any lok sabha constituency page {{Infobox lok sabha constituency1|{{#invoke:Wikidata|pageId}}}}

For another wikipedia, copy & translate the parameter values in: Module:Lok sabha constituency/labels

local loksabha = {}
local args = {}
local QId
local label =mw.loadData('Module:Lok_sabha_constituency/labels')
local lang=mw.language.getContentLanguage().code

local function ifnotempty(s,a,b)
	if (s and s ~= '') then
		return a
	else
		return b
	end
end

local function ifexist(page)
	if not page then return false end
	if mw.title.new(page).exists then return true end
	return false
end

local function getwikidatalabel(id)
	--wikidata label
	return mw.wikibase.label(id) or id
end

local function getwikilink(id)
	if	ifexist(mw.wikibase.sitelink(id)) then
		return '[['.. mw.wikibase.sitelink(id) .. '|'.. mw.wikibase.label(id) ..']]'
	else
		return mw.wikibase.label(id) or id
	end
end

--comma
function comma_value(amount)
	if amount==nil then return end
	local formatted = tonumber(amount)
	while true do
		local k
		formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
		if k==0 then
			break
		end
	end
	return formatted
end

	--print(getProperty('Q1255973','P159'))
function getProperty(id, propertyName )
	local entity = mw.wikibase.getEntityObject(id)
	return getPropertyByEntity(entity,propertyName)

end --getproperty
function getPropertyByEntity(_entity, propertyName )
	local entity = _entity -- mw.wikibase.getEntityObject(id)
	if not entity or not entity.claims then return end--the entity doesnt exist or have no claims
	local property = entity.claims[propertyName]
	if not property then return end--no such property for this item

	--lang=mw.language.getContentLanguage()
	local i=1
	default_lang='en'
	local default_text=''
	for _ in ipairs(property) do

		propy = property[i]
		i=i+1
		local propValue = propy.mainsnak and propy.mainsnak.datavalue
		local propType = propy.mainsnak and propy.mainsnak.datatype
		if not propValue then return end --property doesnt exist


		if propValue and propValue['type'] == 'monolingualtext' and propValue.value['language'] == default_lang then
			default_text = propValue.value['text']..mw.ustring.format( "update at :[[:wikidata:%s|%s]]", _entity.id, _entity.id..':'.. propertyName )
		end

		if propValue['type'] == 'wikibase-entityid' then
			local linkTarget = mw.wikibase.sitelink( "Q" .. propValue.value['numeric-id'] )
			local linkTitle = mw.wikibase.label( "Q" ..propValue.value['numeric-id'] )
			return linkTarget and linkTitle and mw.ustring.format( "[[%s|%s]]", linkTarget, linkTitle )
			--return  linkTitle

		elseif propValue and propValue['type'] == 'monolingualtext' and propValue.value['language'] == lang then
			return propValue.value['text']
		elseif propType and  (propType  == 'commonsMedia' or propType=='string') then
			return propValue['value']
		elseif propType and propType  == 'quantity' then
			return tonumber(propValue.value['amount'])
		end --if

	end --for

	return default_text --incase value for other language missing

end --getproperty

function getQualifierDateValue(_entity,propertyID,qualifierID)
	local pattern = "+(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)Z"
	if _entity.claims[propertyID] ~= nil  then
		local out = {}
		for k, v in pairs(_entity.claims[propertyID]) do
			if v.qualifiers and v.qualifiers[qualifierID] ~= nil  then
				for k2, v2 in pairs(v.qualifiers[qualifierID]) do
					if v2.datatype=='time' and v2.datavalue then
						local xyear=v2.datavalue.value['time']:match(pattern)
						--print(xyear)

						table.insert(out ,xyear)
					elseif v2.datatype=="time"  and v2.snaktype=="novalue" then

						table.insert(out, v2.snaktype)
					end
				end
			end
		end
		return out
	else
		return ""
	end

end

function getExistence(_entity)
	local a={}
	local b={}
	a=getQualifierDateValue(_entity,'P31','P580') --instance of / start time
	b=getQualifierDateValue(_entity,'P31','P582') --instance of / end time

	table.sort(a)
	table.sort(b)

	local str=""

	if a~=nil then
		for k,v in ipairs(a) do
			if str ~="" then	str= str.."<br>" end
			if  tonumber(v) and tonumber(b[k]) and tonumber(v)<tonumber(b[k]) then
				str=tostring(str) .. tostring(v) .." - ".. tostring(b[k])
			elseif  tonumber(b[k]) ==nil then
				if b[k]=="novalue" or b[k]==nil then b[k]= label.Present end --mw.wikibase.label("Q193168") or "[[d:Q193168|]]" end --present
				str=tostring(str) .. tostring(v) .." - ".. tostring(b[k])
			end
		end
	else
		str="Start Time Property value <br />missing at [[d:".. _entity.id ..":P31:P580]]"
	end

	--print(str)
	return(str)
end

--print(getPropertyValue('Q7785493','P991'))
function getPropertyValue(id, propertyName )
	local _entity = mw.wikibase.getEntityObject(id)

	return getPropertyValueByEntity(_entity,propertyName)

end --getPropertyValueById

function getPropertyValueByEntity(_entity, propertyName )
	if not _entity or not _entity.claims then return end--the entity doesnt exist or have no claims
	local property = _entity.claims[propertyName]
	if not property then return end--no such property for this item

	--local lang=mw.language.getContentLanguage().code
	local i=1

	for _ in ipairs(property) do

		propy = property[i]
		i=i+1
		local propValue = propy.mainsnak and propy.mainsnak.datavalue
		local propType = propy.mainsnak and propy.mainsnak.datatype
		if not propValue then return end --property doesnt exist

--	print(mw.dumpObject(propValue))
		if propValue['type'] == 'wikibase-entityid' then
			local numericid =  "Q" .. propValue.value['numeric-id']

			return numericid
		elseif propValue and propValue['type'] == 'monolingualtext' and propValue.value['language'] == lang then
			return propValue.value['text']
		else
			return
		end --if

	end --for

	return default_text --incase value for other language missing

end --getPropertyValueByEntity

local function getReserved(classification)
	--local classification=getPropertyValueByEntity(_entity,'P2502') --P2502:classification
	if not classification then return end
	classification='Q'..classification
	local scst=getPropertyValue(classification,'P361') --P361 :partof
	--print(scst)
	if	ifexist(mw.wikibase.sitelink(scst)) then
		_shortname=getShortName(classification)
		if  _shortname~=nil then --P1813:short name
			return mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(scst), mw.wikibase.label(classification) or classification)
		else
			return mw.ustring.format( "[[%s]]", mw.wikibase.sitelink(scst))
		end
	else
		return mw.wikibase.label(classification) or classification
	end
end
--print(getReserved('22813282'))

function getPartyLink(partyid)--party of successful candidate
	local str="Qualifier Political party (102) is missing under P585 in [[d:".. QId .."]]"
	if partyid==nil then return str end
	--local partyid=getPropertyValue(id,'P102')--member of political party
	partyid='Q'..partyid
	if	ifexist(mw.wikibase.sitelink(partyid)) then
		_shortname=getShortName(partyid)
		if  _shortname~=nil then --short name
			str= mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(partyid), _shortname)
		else
			str= mw.ustring.format( "[[%s]]", mw.wikibase.sitelink(partyid))
		end
	else
		str= mw.wikibase.label(partyid) or "Political party (P102) is missing at [[d:".. QId .."]]"
	end

	return str
end
function getCurrentMP(_id)
	local propertyID ="P991" --successful candidate
	local str="Current MP (Successful candidate - P991) name is missing at [[d:".. QId .."]]"
	if _id==nil then return str

	elseif	ifexist(mw.wikibase.sitelink(_id)) then
		str=mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(_id), mw.wikibase.label(_id))

	elseif mw.wikibase.label(_id) then
		str= mw.ustring.format( "[[%s]]", mw.wikibase.label(_id))
	else
		str=_id
	end

	return str
end

function getElectionYear(_id,elec_year)
	if _id==nil or _id=='Q' then
		return nil
	elseif	mw.wikibase.sitelink(_id)~=nil then
		return mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(_id), elec_year)
	elseif mw.wikibase.label(_id) then
		return mw.ustring.format( "[[%s|%s]]", mw.wikibase.label(_id), elec_year)
	else
		return nil
	end
end

function getMostSuccessfulParty(_entity)

	party_list={}
	local propertyID='P585' --point in time
	if _entity.claims[propertyID]  then
		local pattern="+(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)Z"

		for k, v in pairs(_entity.claims[propertyID]) do
			P585Qual = v['qualifiers']

			if P585Qual~=nil  and P585Qual['P102']~=nil then S102=P585Qual['P102'][1].datavalue.value['numeric-id'] end --classification
			local string s=mw.ustring.format("%s",S102)
			if party_list[s] ~=nil then
				party_list[s]=tonumber(party_list[s])+1
			else
				party_list[s]=1
			end

		end

	end


	local max_val, key = -math.huge


	for k, v in pairs(party_list) do
		if v > max_val then
			max_val, key = v, k
		end
	end

	if key~=nil then
		_shortname=getShortName('Q'..key)
		if mw.wikibase.sitelink('Q'..key)~=nil then
			party=mw.ustring.format("[[%s|%s]]", mw.wikibase.sitelink('Q'..key), _shortname or mw.wikibase.label('Q'..key) or '')
		elseif mw.wikibase.label('Q'..key)~=nil then
			party=mw.ustring.format("[[%s]]", mw.wikibase.label('Q'..key))
		else
			party=mw.ustring.format("[[:d:%s]]", 'Q'..key)
		end

		return mw.ustring.format("%s \(%s %s\)",party, max_val,label.Times)
	else
		return ""
	end
end

function getImage(_entity)
	local property=getPropertyByEntity(_entity, 'P242' )
	if  property~=nil then
		return mw.ustring.format( "[[File:%s|220px]]", property)
	else
		return ''
	end
end

function getImageLegend(_entity)

	--lang=mw.language.getContentLanguage().code

	local propertyID='P242' --locator map image
	local qualifierID='P2096' --image legend
	local legend ="Image Legend qualifier <br />missing at [[d:".. _entity.id ..":P242:P2096]]"
	if _entity.claims[propertyID]  then
		for k, v in pairs(_entity.claims[propertyID]) do
			if v.qualifiers~=nil and v.qualifiers[qualifierID]  then
				for k2, v2 in pairs(v.qualifiers[qualifierID]) do
					if v2.datatype=='monolingualtext' and v2.datavalue and v2.datavalue.value['language']==lang then
						legend=v2.datavalue.value['text']
					end
				end
			end
		end
	end
	return legend
end

	local function getElectors(_entity)
		local property=getPropertyByEntity(_entity, 'P1867' )--eligible voters
		if  property~=nil then
			return mw.ustring.format( "%s", property)
		else
			return ''
		end
	end

	local function assemblylist(_entity)
		--has part P527
		--local Qid="Q7785493"
		local propertyID ="P527"--has part
		--local entity = mw.wikibase.getEntityObject(Qid)
		local str=""
		if _entity.claims[propertyID] ~= nil then
			for k, v in pairs(_entity.claims[propertyID]) do
				if str ~="" then	str= str.."<br>" end
				local id='Q' ..v.mainsnak.datavalue.value['numeric-id']
				local series=getProperty(id,'P1545')
				if series~=nil then series=series ..". " end
				--	str =str .. (series or '') .. mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(id), mw.wikibase.label(id))

				if	mw.wikibase.sitelink(id)~=nil and mw.wikibase.label(id) ~=nil then
					str =str .. mw.ustring.format( "[[%s|%s]]", mw.wikibase.sitelink(id), mw.wikibase.label(id))
				elseif mw.wikibase.sitelink(id)~=nil then
					str =str .. mw.ustring.format( "[[%s]]", mw.wikibase.sitelink(id))
				elseif mw.wikibase.label(id)~=nil then
					str =str .. mw.ustring.format( "[[%s]]", mw.wikibase.label(id))
				else
					str =str .. mw.ustring.format( "[[:d:%s]]", id)
				end

			end
		--	print(str)
		end
		return str

	end



	function getShortName(_id)
		local _entity = mw.wikibase.getEntityObject(_id)
		if _entity==nil then return
		elseif _entity.claims==nil then return end
		local propertyID='P1813'
		if _entity.claims[propertyID]  then
			for k, v in pairs(_entity.claims[propertyID]) do
		--print(mw.dumpObject(v.mainsnak.datavalue.value))
				if(v.mainsnak.datavalue.value.language==lang)then
					return v.mainsnak.datavalue.value.text
				end

			end

		end
	end
	local function setarg(k, v)
		if(v and v ~= '') then args[k] = v end
	end

	local function loadLokSabha(frame,s)

		local yearstr = string.sub(s,1,4)
		local Elected_Year =frame.args.Elected_Year
		QId=string.sub(s,5) or QId
		local _entity = mw.wikibase.getEntityObject(QId)
		local lokassmlist = assemblylist(_entity)
		local propertyID='P585' --point in time
		local elec_year
		if _entity.claims[propertyID]  then
			local elyear={}
			local pattern = "+(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)Z"

			pos=1
			for k, v in pairs(_entity.claims[propertyID]) do
				local val=mw.ustring.format("%s%s%s",v.mainsnak.datavalue.value.time:match(pattern))
				elyear[pos]=val
				pos=pos+1
			end

			local max_val, key = -math.huge

			for k, v in pairs(elyear) do

				if tonumber(v) > tonumber(max_val) then
					max_val, key = v, k
				end
			end
			P585Qual = _entity.claims[propertyID][key]['qualifiers']
			elec_year = string.sub(max_val,1,4)
			if P585Qual['P2502']~=nil then P2502=P585Qual['P2502'][1].datavalue.value['numeric-id'] end
			if P585Qual['P102'] ~=nil then P102 =P585Qual['P102'][1].datavalue.value['numeric-id'] end
			if P585Qual['P805'] ~=nil then P805 ='Q'..P585Qual['P805'][1].datavalue.value['numeric-id'] end
			if P585Qual['P991'] ~=nil then P991 ='Q'..P585Qual['P991'][1].datavalue.value['numeric-id'] end
			if P585Qual['P1867'] ~=nil then P1867 =P585Qual['P1867'][1].datavalue.value['amount'] end
			if P585Qual['P1868'] ~=nil then P1868 =P585Qual['P1868'][1].datavalue.value['amount'] end
		end

		setarg('title',getwikidatalabel(QId))
		setarg('image',  getImage(_entity) )
		setarg('caption',  getImageLegend(_entity) or '')
		setarg('Existence',  getExistence(_entity) or '')
		setarg('Reservation',  getReserved(P2502) or'')
		setarg('CurrMP', getCurrentMP(P991))
		setarg('Party', getPartyLink(P102))
		setarg('Yr', getElectionYear(P805, elec_year) or Elected_Year or '')
		setarg('State', getPropertyByEntity(_entity,'P131'))--dargs['State']
		setarg('TotElec', comma_value(P1867))--dargs['TotElec']
		setarg('SuccParty', getMostSuccessfulParty(_entity) or'')
		--setarg('Category', dargs['Category'] or '')
		setarg('AssList',lokassmlist or '')


	end

local function infobox(frame)
	local abovestr =args['title'] or ''
	local bgcolor = args['background'] or args['bgcolour'] or ''



	return frame:expandTemplate{ title = 'infobox', args = {
		["bodyclass"] = "vevent",
		["bodystyle"] = "width:25em; text-align:left; font-size:90%;",
		["above"] = mw.ustring.format( "%s [ [[d:%s|edit]] ]",abovestr ,QId),
		["aboveclass"] = "summary",
		["abovestyle"] = "padding-bottom:0.25em; background:" .. bgcolor .. "; line-height:1.2em; text-align:center; font-size:115%;",
------------------ Images and maps ------------------
		["image"] = args['image'] or '',
		["imagestyle"] = "padding-bottom:0.5em;",
		["caption"] = args['caption'] or '',
		["captionstyle"] = "padding-top:0.1em; line-height:1.2em; font-size:90%;",
		["headerstyle"] = "background:#eee; font-size:105%;",
		["labelstyle"] = "padding:0 0.5em 0 0; line-height:1.1em;",
		["datastyle"] = "padding:0; line-height:1.2em; vertical-align:middle;",
--		["label1"] =  'Title',
--		["data1"] =  args['title'] or '',

		["label3"] =  label.Existence,
		["data3"] =  args['Existence'] or '',

		["label4"] =  label.Reservation,
		["data4"] =  args['Reservation'] or '',

		["label5"] =  label.CurrentMP,
		["data5"] =  args['CurrMP'] or '',

		["label6"] =  label.Party,
		["data6"] =  args['Party'] or '',

		["label7"] =  label.ElectedYear,
		["data7"] =  args['Yr'] or '',

		["label8"] =  label.State,
		["data8"] =  args['State'] or '',

		["label9"] =  label.TotalElectors,
		["data9"] =  args['TotElec'] or '',

		["label10"] =  label.MostSuccessfulParty,
		["data10"] =  args['SuccParty'] or '',

		["label11"] =  label.Category,
		["data11"] =  args['Category'] or '',

		["label12"] =  label.AssemblyConstituencies,
		["data12"] =  args['AssList'] or '',

		} }

end

function loksabha.currentmember(frame)
	args = require('Module:Arguments').getArgs(frame, {
			wrappers = 'Template:Infobox lok sabha constituency1'  --test
		})

	if( args['2'] and args['2'] ~= '') then
		loadloksabhadb(frame,frame.args.year .. args['1'])
	elseif( args['1'] and args['1'] ~= '') then
		--loadloksabhadb(frame,frame.args.year  .. args['1'])
		local entity=mw.wikibase.getEntityObject()
		if entity then
			--return entity.metatable.id
			--return mw.dumpObject(entity)
		end
		--page id
		if(entity ) then
			if entity.id then QId = entity.id end
		end

		loadLokSabha(frame,frame.args.year  .. args['1'])
	end

	return args['CurrMP'] or ''
	--infobox(frame)
end

function loksabha.box(frame)
	args = require('Module:Arguments').getArgs(frame, {
			wrappers = 'Template:Infobox lok sabha constituency1'  --test
		})

	if( args['2'] and args['2'] ~= '') then
		loadloksabhadb(frame,frame.args.year .. args['1'])
	elseif( args['1'] and args['1'] ~= '') then
		--loadloksabhadb(frame,frame.args.year  .. args['1'])
		local entity=mw.wikibase.getEntityObject()
		if entity then
			--return entity.metatable.id
			--return mw.dumpObject(entity)
		end
		--page id
		if(entity ) then
			if entity.id then QId = entity.id end
		end

		loadLokSabha(frame,frame.args.year  .. args['1'])
	end

	return infobox(frame)
end

return loksabha