Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:CspCreatePageForm/doc
local ClassDefinitionData = require('Module:ClassDefinitionData')
local CspFunctions = require('Module:CspFunctions')
local p = {}
--[[
Defines table with the following data:
["Class options"] (table) contains classes that can be selected in the form
["Class"] (string)
["Page"] (string) contains pagename of class definition page
["Namespace options"] (string) contains comma-separated namespaces
["CspParameterDefinitions"] (table)
["hasParameterDefinitions"] (string) "yes" or "no"
["Pagetitle format"] (string)
["mwwrite"] (string)
["mwoption"] (string)
["Class options count"] (string) contains a numerical value in a string
["Multiple class options check"] (string) "true" or "false" if class options count > 1
debug console tests:
=p.data("")
=p.data("Persoon")
=p.data("Persoon test,Article")
--]]
function p.data(classes,frame)
local classes = classes
local frame = frame
if frame == nil then frame = mw.getCurrentFrame() end
local classesCount = 0
local classOptions = {}
local results = {}
-- start by filling a table with class options (class and class definition page)
-- if class variable is not used, find all defined classes through query
if classes == nil or classes == "" then
local classesQuery = mw.smw.ask {
"[[Defines class::+]]",
"?#-=Page",
"?Defines class=Class",
"sort=Defines class",
"limit=999"
}
if classesQuery ~= nil then
classesCount = #classesQuery
classOptions = classesQuery
end
-- else loop through class variable to find class definition pages
else
for class in string.gmatch(classes,"([^,]+)") do
local page = CspFunctions.ClassToClassDefinitionPage{args={class}}
local classData = {["Class"] = class,["Page"] = page}
classOptions[#classOptions + 1] = classData
classesCount = classesCount + 1
end
end
-- if no valid class options were found, return
results["Class options count"] = tostring(classesCount)
if classesCount == 0 then
results["Class options"] = {}
return results
elseif classesCount > 1 then
results["Multiple class options check"] = "true"
else
results["Multiple class options check"] = "false"
end
-- loop through class options to add additional data from class definition pages
for i, class in ipairs(classOptions) do
local data = ClassDefinitionData.get(class.Page)
if data and data["ws-data"]["CspParameterDefinitions"] then
class["CspParameterDefinitions"] = data["ws-data"]["CspParameterDefinitions"]
class["hasParameterDefinitions"] = data["var"]["hasParameterDefinitions"]
end
if data and data["ws-class-props"] and data["ws-class-props"]["Csp class properties"] and data["ws-class-props"]["Csp class properties"][1]["Allowed namespaces"]
and data["ws-class-props"]["Csp class properties"][1]["Allowed namespaces"]["_text"] ~= "" then
class["Namespace options"] = data["ws-class-props"]["Csp class properties"][1]["Allowed namespaces"]["_text"]
else
class["Namespace options"] = frame:preprocess("(Main){{#if:{{#spaces:}}|,{{#spaces:}} }}")
end
class["Namespace options array"] = mw.text.split(class["Namespace options"],",",true)
local pagetitleFormat, mwwrite, mwoption
if data then
pagetitleFormat = data["var"]["pagetitleFormat"]
class["Pagetitle format"] = pagetitleFormat
end
if pagetitleFormat == "title" then
mwwrite = "[Namespace]:" .. class.Class .. "/[Title]"
mwoption = ""
else
mwwrite = "[Namespace]:" .. class.Class .. "/"
mwoption = "next_available"
end
class["mwwrite"] = mwwrite
class["mwoption"] = mwoption
end
results["Class options"] = classOptions
mw.logObject(results)
return results
end
--[[
function p.afExport(frame)
frame args:
Class options (string) comma-separated list of classes
{{#invoke:CspCreatePageForm|afExport}}
{{#invoke:CspCreatePageForm|afExport|Class options=Article,Persoon}}
debug console tests:
=p.afExport(mw.getCurrentFrame():newChild{title="whatever",args={["Class options"]="Article,Persoon"}})
--]]
function p.afExport(frame)
local data = p.data(frame.args["Class options"])
return mw.af.export{data}
end
return p