Module:Is located in: Difference between revisions
hp>MSGJ create based on Module:Is instance |
Humanipedia (talk | contribs) m 1 revision imported |
(No difference)
|
Latest revision as of 20:15, 3 February 2025
Lua error in package.lua at line 80: module 'Module:Yesno' not found.
Usage[edit source]
{{#invoke:Is located in|main|qid=|value=}}
This module will use Wikidata property Template:Q to determine whether or not an entity is located in a particular area or not.
Example[edit source]
For example:
- Template:Q
- is located in Template:Q, which
- is located in Template:Q, which
- is located in Template:Q.
- is located in Template:Q, which
- is located in Template:Q, which
To know that Template:Q is located in Template:Q, you can use:
{{#invoke:Is located in|main|qid=Q6374700|value=Q132705}}
= Lua error at line 7: attempt to index field 'wikibase' (a nil value).
The output number indicates the minimum recursion depth to find the value required. An output of zero indicates that the item is not located there.
Maximum depth[edit source]
For performance considerations, the module will not go on searching indefinitely. The default maximum recursion depth is 5. If you want to change this, use the |maxdepth=
parameter.
local p = {};
local function checklayer(depth) -- check P131 of items at current depth
checklist[depth+1] = {} -- setup next layer of table
local j = 0
for j = 1,#checklist[depth] do -- loop over items at current depth
local subclasses = mw.wikibase.getBestStatements(checklist[depth][j],"P131") -- get P131 statements
for i,statement in ipairs(subclasses) do -- loop through items at next depth
if statement.mainsnak.snaktype == 'value' then
local newitem = statement.mainsnak.datavalue.value.id
if newitem == value then
isLocated = true
else
checklist[depth+1][#checklist[depth+1]+1] = newitem -- add item to next depth of checklist table
end
end
end
end
return isLocated
end
function p.main(frame)
local args = frame.args
local pargs = frame:getParent().args
value = args.value or pargs.value
local qid = args.qid or pargs.qid or ""
if qid == "" then
qid = mw.wikibase.getEntityIdForCurrentPage()
end
if not qid then
return 0
end
checklist = {{qid}}
local md = args.maxdepth or pargs.maxdepth
if md then
maxdepth = tonumber(md)
else
maxdepth = 5
end
depth = 0 -- current depth
isLocated = false -- assume false until match found
while not isLocated and depth<maxdepth do
depth = depth+1
checklayer(depth)
end
if not isLocated then
depth = 0 -- indicates not isLocated
end
return depth -- return depth that item was found
end
return p