この解説は、モジュール:Mapshapes/docから呼び出されています。 (編集 | 履歴) 編集者は、このモジュールをサンドボックス (作成 | 複製)とテストケース (作成)で試すことができます。(解説) このモジュールのサブページ一覧。 |
-- 英語版の3879900版からインポートしました --Tmv -- 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