词条 | Module:Lok sabha constituency |
释义 | 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.label(id) ..'' else return mw.wikibase.label(id) or id end end --commafunction 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 :%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", 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.." if tonumber(v) and tonumber(b[k]) and tonumber(v) 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 "" end --present str=tostring(str) .. tostring(v) .." - ".. tostring(b[k]) end end else str="Start Time Property value end --print(str) return(str) end 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 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", 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 function getPartyLink(partyid)--party of successful candidate local str="Qualifier Political party (102) is missing under P585 in ".. 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", 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 ".. QId .."" end return str end function getCurrentMP(_id) local propertyID ="P991" --successful candidate local str="Current MP (Successful candidate - P991) name is missing at ".. QId .."" if _id==nil then return str elseif ifexist(mw.wikibase.sitelink(_id)) then str=mw.ustring.format( "%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", mw.wikibase.sitelink(_id), elec_year) elseif mw.wikibase.label(_id) then return mw.ustring.format( "%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", 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( "", 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 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.." 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", 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", 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 [ edit ]",abovestr ,QId), ["aboveclass"] = "summary", ["abovestyle"] = "padding-bottom:0.25em; background:" .. bgcolor .. "; line-height:1.2em; text-align:center; font-size:115%;", ["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;", ["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 |
随便看 |
|
开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。