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