Pumunta sa nilalaman

Module:Wikidata

Mula sa Wikipedia, ang malayang ensiklopedya
Pagbabago noong 12:32, 3 Setyembre 2015 ni Bluemask (usapan | ambag)
Dokumentasyon sa module [gumawa] [purga]
local p = {}

-- This is used to get a normal wiki-linked value, or a comma separated list of them if multiple values exist
p.getValue = function(frame)
    local propertyID = mw.text.trim(frame.args[1] or "")
    local input_parm = mw.text.trim(frame.args[2] or "")
    if input_parm == "FETCH_WIKIDATA" then
        local entity = mw.wikibase.getEntityObject()
        if entity.claims[propertyID] ~= nil then
            local out = {}
            for k, v in pairs(entity.claims[propertyID]) do
                if (mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])) then
                    out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"]) .. "]]"
                else
                    out[#out + 1] = "[[:d:" .. "Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "]]<small><abbr title='Article is not yet available in this wiki'>[?]</abbr></small>"
                end
            end
            return table.concat(out, ", ")
        else
            return ""
        end
    else
        return input_parm
    end
end

-- This is used to get a value like 'male' (for property p21) which won't be linked
p.getRawValue = function(frame)
    local propertyID = mw.text.trim(frame.args[1] or "")
    local input_parm = mw.text.trim(frame.args[2] or "")
    if input_parm == "FETCH_WIKIDATA" then
        local entity = mw.wikibase.getEntityObject()
        if entity.claims[propertyID] ~= nil then
            local out = {}
            for k, v in pairs(entity.claims[propertyID]) do
                out[#out + 1] = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
            end
            return table.concat(out, ", ")
        else
            return ""
        end
    else
        return input_parm
    end
end

p.getNumericValue = function(frame)
    local propertyID = mw.text.trim(frame.args[1] or "")
    local input_parm = mw.text.trim(frame.args[2] or "")
    if input_parm == "FETCH_WIKIDATA" then
        local entity = mw.wikibase.getEntityObject()
        if entity ~= nil then
	        if entity.claims[propertyID] ~= nil then
	            local out = {}
	            for k, v in pairs(entity.claims[propertyID]) do
	                out[#out + 1] = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
	            end
	            if out ~= nil then
	            	return table.concat(out, ", ")
	            else
	            	return ""
	            end
	        else
	            return ""
	        end
	    else
	    	return ""
	    end
    else
        return input_parm
    end
end

p.getLinkedValue = function(frame)
	local propertyID = mw.text.trim(frame.args[1] or "")
	local input_parm = mw.text.trim(frame.args[2] or "")
	local item_count = 0
	if input_parm == "FETCH_WIKIDATA" then
		local entity = mw.wikibase.getEntityObject()
		if entity ~= nil then
			if entity.claims[propertyID] ~= nil then
				local out = {}
				for k, v in pairs(entity.claims[propertyID]) do
					if v.mainsnak.snaktype == 'value' then
						item_count = item_count + 1
						local item_id = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
						local item_label = mw.wikibase.label( item_id )
						local item_link = mw.wikibase.sitelink( item_id )
						local item_full_link = ""
	
						if item_link == nil then
							if item_label == nil then
								item_full_link = "[https://tools.wmflabs.org/reasonator/?q=" .. item_id .. "&lang=tl " .. item_id .. "]"
							else
								item_full_link = "[https://tools.wmflabs.org/reasonator/?q=" .. item_id .. "&lang=tl " .. item_label .. "]"
							end
						else	
							if item_label == nil then
								item_full_link = "[[" .. item_link .. "]]"
							else
								item_full_link = "[[" .. item_link .. "|" .. item_label .. "]]"
							end
						end
					
						out[#out + 1] = item_full_link
					end
				end
				if item_count == 0 then
					return ""
				else
					return table.concat(out, ", ")
				end
			else
				return ""
			end
		else
			return ""
		end
	else
		return input_parm
	end
end

-- This is used to get a date value for date_of_birth (p569), etc. which won't be linked -- consolidate by testing if entity.claims[propertyID].mainsnak.datavalue.type is "time"
p.getDateValue = function(frame)
    local propertyID = mw.text.trim(frame.args[1] or "")
    local input_parm = mw.text.trim(frame.args[2] or "")
    local date_format = mw.text.trim(frame.args[3] or "dmy")
    if input_parm == "FETCH_WIKIDATA" then
        local entity = mw.wikibase.getEntityObject()
        if entity.claims[propertyID] ~= nil then
            local out = {}
            local dt = {}
            for k, v in pairs(entity.claims[propertyID]) do
                local d = v.mainsnak.datavalue.value.time
                dt.year = string.sub(d, 9, 12)
                dt.month = string.sub(d, 14, 15)
                dt.day = string.sub(d, 17, 18)
                if date_format == "dmy" then
                    out[#out + 1] = os.date("%e %B %Y", os.time(dt))
                else
                    out[#out + 1] = os.date("%B %e, %Y", os.time(dt))
                end
            end
            return table.concat(out, ", ")
        else
            return ""
        end
    else
        return input_parm
    end
end

return p