Module:RootFinder: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
| (29 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p. | function p.search(frame) | ||
local | local startTitle = frame.args[1] | ||
if not startTitle or startTitle == "" then | |||
return "Error: No start title provided" | |||
end | |||
local prop = frame.args[2] | |||
if not prop or prop == "" then | |||
return "Error: No property name provided" | |||
end | |||
local title = startTitle | |||
while true do | while true do | ||
local queryString = string.format('[[%s]]|?%s', title, prop) | |||
local | local queryResult = mw.smw.getQueryResult(queryString) | ||
-- Ensure queryResult is valid and extract the first parent | |||
local parent = nil | |||
if queryResult and type(queryResult) == "table" then | |||
for k,v in pairs( queryResult.results ) do | |||
if v.printouts then | |||
if v.printouts[prop] and #v.printouts[prop] > 0 and v.printouts[prop][1].fulltext then | |||
parent = v.printouts[prop][1].fulltext | |||
end | |||
end | |||
end | |||
-- | end | ||
if not | |||
-- If no parent is found, return the current title as root | |||
-- Move to the parent language | if not parent or parent == "" then | ||
return title | |||
end | |||
-- Move up to the parent language | |||
title = parent | |||
end | end | ||
end | end | ||
return p | return p | ||
Latest revision as of 13:43, 26 March 2025
Documentation for this module may be created at Module:RootFinder/doc
local p = {}
function p.search(frame)
local startTitle = frame.args[1]
if not startTitle or startTitle == "" then
return "Error: No start title provided"
end
local prop = frame.args[2]
if not prop or prop == "" then
return "Error: No property name provided"
end
local title = startTitle
while true do
local queryString = string.format('[[%s]]|?%s', title, prop)
local queryResult = mw.smw.getQueryResult(queryString)
-- Ensure queryResult is valid and extract the first parent
local parent = nil
if queryResult and type(queryResult) == "table" then
for k,v in pairs( queryResult.results ) do
if v.printouts then
if v.printouts[prop] and #v.printouts[prop] > 0 and v.printouts[prop][1].fulltext then
parent = v.printouts[prop][1].fulltext
end
end
end
end
-- If no parent is found, return the current title as root
if not parent or parent == "" then
return title
end
-- Move up to the parent language
title = parent
end
end
return p