Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Slot/doc

local p = {}

--[[
{{#invoke:Slot|getParamValue
|slot= // defaults to main
|page= // defaults to FULLPAGENAME
|template=
|param=Category
}}
]]--
p.getParamValue = function ( frame )
	local slot = frame.args.slot or "main"
	local page = frame.args.page or ""
	-- else present page
	if page == "" then page = mw.title.getCurrentTitle().fullText end
	local template = frame.args.template or nil
	if template == nil then return "" end
	local param = frame.args.param or ""
	return p.getValueFromTemplateData( slot, page, template, param )
end

--[[ helper ]]--
p.getValueFromTemplateData = function( slot, page, template, param, default )

	local slotData = {}
	slotData = mw.slots.slotData(slot,page)
    if slotData == {} then 
    	mw.log( "No slot data found" )
    	return ""
    end

	-- default value if no value was found (unless there are no slotdata at all)
	local default = default or ""
	local res = default
	if template ~= nil then
		local tree = slotData[template]
		if type(tree) == "table" then
			--for k,v in pairs( tree ) do
				--mw.log( "tree key: " .. k )
			--end
			if tree[1] ~= nil and tree[1][param] ~= nil then
				res = tree[1][param]["_text"]
			end
		end
	else
		-- do JSON, too?
	end

	return res
end

--[[ 
Moved from Class/Title
]]--
p.getValueFromTemplateParam = function( pagename, templateName, templateParam )
	if pagename == "" then
		mw.log( "pagename is empty" )
		return ""
	end
	-- pre-check, just in case
	local title = mw.title.new( pagename )
	if title == nil or not title.exists then
		mw.log( "title does not exist" )
		return ""
	end

	local slotContent = p.getSlotContent( pagename, "ws-page-props", templateName )
	if slotContent == nil or slotContent[1] == nil or slotContent[1][templateParam] == nil then
		mw.log( "No value retrieved from page. Template param: " .. templateParam )
		return ""
	end
	if type( slotContent[1][templateParam]["_text"] ) == "string" then
		return slotContent[1][templateParam]["_text"]
	else
		return "?"
	end
end

--[[ 
Moved from Class/Title
]]--
p.getSlotContent = function( page, slot, template )
	local template = template or ""
	if ( template == "" ) then
		-- Assuming JSON
		if slot == "main" then 
			--loadJsonData does not alway work. Use WSSlots instead
			--return mw.loadJsonData( page )
		end
		local str = mw.slots.slotContent( slot, page )
		if type(str) == "table" then
			-- @todo VERY unlikely
			return str
		end
		if str ~= nil then
			return mw.text.jsonDecode( str )
		else
			return {}
		end
	end

	-- template
	local slotData = mw.slots.slotData( slot, page )
	if ( slotData == nil ) then
		return type(slotData)
	end
	return slotData[template]
end

return p