Module:SDC tracking
Revision as of 02:25, 13 August 2020 by Mediawiki>Jarekt (SDC_statement_has_value should handle cases with multiple values)
Module for adding tracking categories based on SDC statements. Call it through {{SDC_statement_exist}} and {{SDC_statement_has_value}} templates.
--[[
__ __ _ _ ____ ____ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _/ ___|| _ \ / ___| | |_ _ __ __ _ ___| | _(_)_ __ __ _
| |\/| |/ _ \ / _` | | | | |/ _ (_)___ \| | | | | | __| '__/ _` |/ __| |/ / | '_ \ / _` |
| | | | (_) | (_| | |_| | | __/_ ___) | |_| | |___ | |_| | | (_| | (__| <| | | | | (_| |
|_| |_|\___/ \__,_|\__,_|_|\___(_)____/|____/ \____|___\__|_| \__,_|\___|_|\_\_|_| |_|\__, |
|_____| |___/
This module is intended to be the engine behind "Template:SDC_tracking".
Please do not modify this code without applying the changes first at
"Module:SDC_tracking/sandbox" and testing at "Module:SDC_tracking/testcases".
Authors and maintainers:
* User:Jarekt - original version
]]
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
local function Category(catName)
if catName then
return '[[Category:' .. catName .. ']]'
else
return ''
end
end
function p.SDC_statement_exist(frame)
-- skip if we are not in file namespace
local page = mw.title.getCurrentTitle()
if page.namespace~=6 then
return ''
end
-- switch to lowercase parameters to make them case independent
local args = {}
for name, value in pairs( frame.args ) do
if value ~= '' then -- nuke empty strings
args[string.lower(name)] = value
end
end
-- check if statement exist
local output = ''
local entity = mw.wikibase.getEntity()
if entity and entity.statements and entity.statements[args.property] then
output = Category(args.positive_category)
else
output = Category(args.negative_category)
end
return output
end
-----------------------------------------------------------------------
function p.SDC_statement_has_value (frame)
-- skip if we are not in file namespace
local page = mw.title.getCurrentTitle()
if page.namespace~=6 then
return
end
-- switch to lowercase parameters to make them case independent
local args = {}
for name, value in pairs( frame.args ) do
if value ~= '' then -- nuke empty strings
args[string.lower(name)] = value
end
end
if not args.value then
return
end
-- check if statement exist
local entity = mw.wikibase.getEntity()
if entity and entity.statements and entity.statements[args.property] then
for _, statement in pairs( entity:getBestStatements( args.property )) do
if (statement.mainsnak.snaktype == "value") then
local val = statement.mainsnak.datavalue.value
if val.id then
val = val.id
elseif val.text then
val = val.text
end
if val==args.value then
return Category(args.matching_category)
end
end
end
return Category(args.mismatching_category)
else
return Category(args.missing_category)
end
end
return p