Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:CspComponents/doc
local CspFunctions = require('Module:CspFunctions')
local ClassDefinitionData = require('Module:ClassDefinitionData')
local p = {}
--[[
function p.parseComponentIfApplicable(frame)
Parse component for given page. Parse the component template specified by the class definition data, or fall back to default if class definition does not have "Class" in the ws-base-props slot.
Frame arguments used:
- component : (sidebar / subheader / footer)
- page : (pagename) page for which the component should be parsed, defaults to current page
- defaultForClassDefinitionWithoutSlots : (wikitext) this will be parsed instead of a component template, when the class definition does not have "Class" in the ws-base-props slot (as it's then assumed to be an older class definition, from before CSP 1.8.0)
debug console test:
=p.parseComponentIfApplicable(mw.getCurrentFrame():newChild{title="whatever",args={[1]="sidebar",["page"]="Template:Sidebar item",["defaultForClassDefinitionWithoutSlots"]="{{#time:r|now}}"}})
=p.parseComponentIfApplicable(mw.getCurrentFrame():newChild{title="whatever",args={[1]="sidebar",["page"]="Persoon test/Tester",["defaultForClassDefinitionWithoutSlots"]="{{#time:r|now}}"}})
--]]
function p.parseComponentIfApplicable(frame)
local component = frame.args[1]
-- return if component is not one of the allowed values
if component ~= "sidebar" and component ~= "subheader" and component ~= "footer" then
return
end
-- get page from frame args or default to current page
local page = frame.args["page"]
if page == nil or page == '' then
page = mw.title.getCurrentTitle().fullText
end
-- get pageData (i.e. slotdata from page)
local pageData = {}
pageData["ws-base-props"] = mw.slots.slotData("ws-base-props",page)
pageData["ws-class-props"] = mw.slots.slotData("ws-class-props",page)
pageData["ws-data"] = mw.slots.slotData("ws-data",page)
-- get class from pageData
local class = ""
if pageData and pageData["ws-base-props"] and pageData["ws-base-props"]["Base properties"] and pageData["ws-base-props"]["Base properties"][1]["Class"] then
class = pageData["ws-base-props"]["Base properties"][1]["Class"]["_text"]
else
return
end
-- get classData (i.e. slotdata and Class definition specific data from class definition page)
local classDefinitionPage = CspFunctions.ClassToClassDefinitionPage{["args"]={class}}
local classData = ClassDefinitionData.get(classDefinitionPage,pageData)
-- if classData contains a Class value in ws-base-props, get template from classData and parse it. Else fall back to default.
local result=""
if classData and classData["ws-base-props"] and classData["ws-base-props"]["Base properties"] and classData["ws-base-props"]["Base properties"][1]["Class"] then
-- check if the component should be parsed, else return
local hasComponent
if component == "sidebar" then
hasComponent = classData["var"]["hasSidebar"]
elseif component == "subheader" then
hasComponent = classData["var"]["hasSubheader"]
elseif component == "footer" then
hasComponent = classData["var"]["hasFooter"]
end
if hasComponent ~= "true" then
return
end
-- parse the component
local componentTemplate = classData["var"][component .. "TemplateName"]
mw.log("parse component template from classData = " .. tostring(componentTemplate) )
result = frame:expandTemplate {
title = componentTemplate,
args = {
["$pageData"] = mw.af.export(pageData),
["$classData"] = mw.af.export(classData)
}
}
else
-- parse default
if frame.args["defaultForClassDefinitionWithoutSlots"] then
mw.log("parsing " .. frame.args["defaultForClassDefinitionWithoutSlots"])
result = frame:preprocess(frame.args["defaultForClassDefinitionWithoutSlots"] )
end
end
--mw.logObject(classData)
--mw.logObject(pageData)
return result
end
return p