Module:SDC tracking



From Wikimedia Commons, the free media repository



Jump to navigation  Jump to search  

Lua

CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules

Module for adding tracking categories based on SDC statements. Call it through {{SDC statement exist}} and {{SDC statement has value}} templates.

Code

--[[  
  __  __           _       _        ____  ____   ____    _                  _    _             
 |  \/  | ___   __| |_   _| | ___ _/ ___||  _ \ / ___|  | |_ _ __ __ _  ___| | _(_)_ __   __ _ 
 | |\/| |/ _ \ / _` | | | | |/ _ (_)___ \| | | | |      | __| '__/ _` |/ __| |/ / | '_ \ / _` |
 | |  | | (_) | (_| | |_| | |  __/_ ___) | |_| | |___   | |_| | | (_| | (__|   <| | | | | (_| |
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)____/|____/ \____|___\__|_|  \__,_|\___|_|\_\_|_| |_|\__, |
                                                    |_____|                              |___/ 
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 
]]


-- =======================================
-- === Dependencies ======================
-- =======================================
require('strict') -- used for debugging purposes as it detects cases of unintended global variables

-- =======================================
-- === Local Functions ===================
-- =======================================

local function getArgs(frame)
 -- 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
 local page  = mw.title.getCurrentTitle()
 
 if (page.namespace == 6) then
  args.entity = mw.wikibase.getEntity()
 elseif args.item then
  args.entity = mw.wikibase.getEntity(args.item)
 end 
 return args
end

-----------------------------------------------------------------------
local function Category(catName)
 if catName then
  return '[[Category:' .. catName .. ']]'
 else
  return ''
 end
end

-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}

-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================

function p._statement_exist(entity, property, positive, negative)
 -- check if statement exist
 if entity and entity.statements and entity.statements[property] then
  return positive
 else
  return negative
 end
end

-----------------------------------------------------------------------
function p._statement_has_value(entity, property, value, matching, mismatching, missing)
 value = value or ''
 if entity and entity.statements and entity.statements[property] then
  for _, statement in pairs( entity:getAllStatements( 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==value then
     return matching
    end    
   end
  end
  return mismatching
 else
  return missing
 end
end

-- ===========================================================================
-- === Versions of the function to be called from template namespace
-- ===========================================================================

function p.SDC_statement_exist(frame)
 local args   = getArgs(frame)
 
 -- skip if we are not in file namespace
 local page = mw.title.getCurrentTitle()
 if not (page.namespace==6 or page.namespace==args.namespace or args.namespace=='all') then
  return ''
 end 
 
 local output = p._statement_exist(args.entity, args.property, args.positive_category, args.negative_category)
 return Category(output)
end

-----------------------------------------------------------------------
function p.SDC_statement_has_value (frame)
 local args   = getArgs(frame)
  
 -- skip if we are not in file namespace
 local page = mw.title.getCurrentTitle()
 if not (page.namespace==6 or page.namespace==args.namespace or args.namespace=='all') then
  return ''
 end 
 
 local output = p._statement_has_value(args.entity, args.property, args.value, 
     args.matching_category, args.mismatching_category, args.missing_category)
 return Category(output)
end

return p

Retrieved from "https://commons.wikimedia.org/w/index.php?title=Module:SDC_tracking&oldid=812179064"

Category: 
Modules subject to page protection
 


Navigation menu


Personal tools  




English
Not logged in
Talk
Contributions
Create account
Log in
 


Namespaces  




Module
Discussion