Logo Voyage

Module:Mapshapes Voyage Tips and guide

You can check the original Wikivoyage article Here

    Documentation for this module may be created at Module:Mapshapes/doc

    -- This fetches referenced wikidata entries (P527 - has part, or
    -- P2670 - has parts of the class ) and adds mapshapes, with colors acc. to
    -- P465 (sRGB color hex triplet) or P462 (color)
    
    -- TODO: Ideally, this could be merged into Module:map (incl. the Template:Mapshapes)
    
    -- test code:
    -- frame={["args"]={["default-color"] = "#ff0000"}, ["expandTemplate"] =function(a,b) mw.logObject(b); end}
    -- p.showOne(frame, "Q2400801", {})
    
    local p = {}
    
    local function matches_filter(args, id)
    	if (args[2] == "") then
    		return true
    	end
    
    	local idx = 2
    	while (args[idx] ~= "") do
    		if id == args[idx] then
    			return true
    		end
    		idx = idx + 1
    	end
    	return false
    end
    
    p.showOne = function(frame, subentityID, out)
    	local subentity = mw.wikibase.getEntity(subentityID)
    	if subentity.claims == nil then
    		mw.log("empty mapshape " .. subentityID .. "!")
    		return out
    	end
    	local label = subentity:getLabel()
    	if label == nil then label = '' end
    
    	local rgb
    	if subentity.claims.P465 ~= nil then
    		for k, v in pairs(subentity.claims.P465) do
    			if v.rank ~= "deprecated" then
    				rgb = subentity.claims.P465[k].mainsnak.datavalue.value
    				break
    			end
    		end
    	end
    	if rgb == nil or rgb == "" then
    		mw.log("no rgb")
    		if subentity.claims["P462"] == nil then
    			mw.log("no color")
    			rgb = frame.args["default-color"]
    		else
    			if subentity.claims.P462[1].qualifiers ~= nil and subentity.claims.P462[1].qualifiers.P465 ~= nil then
    				rgb = subentity.claims.P462[1].qualifiers.P465[1].datavalue.value
    				mw.logObject(rgb)
    			else
    				colorID = subentity.claims.P462[1].mainsnak.datavalue.value.id
    				color = mw.wikibase.getEntity(colorID)
    				rgb = color.claims.P465[1].mainsnak.datavalue.value
    				mw.logObject(rgb)
    			end
    		end
    	end
    
    	arguments = {
    		wikidata=subentityID,
    		type="geoline",
    		stroke="#"..rgb,
    	}
    	arguments["stroke-width"] = frame.args["stroke-width"]
    	arguments["stroke-opacity"] = frame.args["stroke-opacity"]
    	arguments["group"] = frame.args["group"]
    	arguments["title"] = string.gsub(string.gsub(label, '"', '\\"'), "'", "\'")
    
    	out[#out + 1] = frame:expandTemplate{title='Mapshape', args=arguments}
    	return out
    end
    
    p.show = function(frame)
    	local itemID = mw.text.trim(frame.args[1] or "")
    	local entity = mw.wikibase.getEntity(itemID)
    	local claims = entity.claims.P527
    	if claims == nil then claims = entity.claims.P2670 end
    	if claims then
    		if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
    			local out = {}
    			for k, v in pairs(claims) do
    				local subentityID = v.mainsnak.datavalue.value.id
    				if matches_filter(frame.args, subentityID) then
    					out = p.showOne(frame, subentityID, out)
    				end
    			end
    			return table.concat(out, "")
    		end
    	else
    		return ""
    	end
    end
    
    return p
    


    Discover



    Powered by GetYourGuide