local function buildquery(frame, target) local textToDisplay, leftLink, rightLink, runQueryRightAway, itemObject, itemID, query, coord, bbox, remark, overpassUrl, primitives, timeout, style, logo local args = frame.args if args.display then -- text to display on link textToDisplay = ' ' .. args.display else textToDisplay = end if args.timeout then timeout = '[timeout:' .. args.timeout .. '][out:json];\n' else timeout = '[timeout:20][out:json];\n' end if args.link and args.link
'no' then -- don't run immediately runQueryRightAway = else runQueryRightAway = '&R' end if frame.args.overpass then itemID = "" itemObject = nil else if args.id then -- build query for specific Q-item(s) itemID = args.id pcall(function itemObject = mw.wikibase.getEntityObject(mw.text.split(itemID,";")[1]) end) else itemObject = mw.wikibase.getEntityObject if itemObject
nil then itemID = '"~"(^|;)(' .. itemID:gsub(";", "\|") .. ')(;|$)' leftbracket = '["' rightbracket = '"]' else leftbracket = rightbracket = end
if args.query then -- user can add their own tags to filter on query = args.query else if frame.args.overpass then return "If you invoke with overpass, you have to include a query=" end query = end if args.coord and not(args.limitToBBOX
then return "Please indicate which primitives you want to query for" end primitives = args.prim else primitives = 'nwr' end
if primitives:find("n") then -- Include nodes overpassUrl = overpassUrl .. 'node' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';' .. remark .. '\n' end if primitives:find("w") then -- Include ways overpassUrl = overpassUrl .. 'way' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';\n' end if primitives:find("r") then -- Include relations overpassUrl = overpassUrl .. 'relation' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';\n>>;\n' end overpassUrl = overpassUrl .. ');\n' overpassUrl = overpassUrl .. 'out geom;\n' if args.style then style = args.style else if args.logo then logo = " icon-image: url(" .. args.logo .. ');\n' else if itemObject then logo = tostring(itemObject:formatPropertyValues('P154')['value']):gsub("'", "'") end if logo and not(logo
return leftLink .. 'http://overpass-turbo.eu/?Q=' .. mw.uri.encode(overpassUrl, "PATH") .. coord .. runQueryRightAway .. textToDisplay .. rightLinkend
local p =
function p.overpass(frame) frame.args.overpass = true return buildquery(frame, )end
function p.wd(frame) return buildquery(frame, 'wikidata')end
function p.pt(frame) frame.args.style = "node \nnode[highway=bus_stop], way[highway=bus_stop]" frame.args.prim = "r" frame.args.timeout = 50 return buildquery(frame, 'wikidata')end
function p.etym(frame) return buildquery(frame, 'name:etymology:wikidata')end
function p.subject(frame) return buildquery(frame, 'subject:wikidata')end
function p.artist(frame) return buildquery(frame, 'artist:wikidata')end
function p.architect(frame) return buildquery(frame, 'architect:wikidata')end
function p.operator(frame) return buildquery(frame, 'operator:wikidata')end
function p.brand(frame) return buildquery(frame, 'brand:wikidata')end
return p