Semantic MediaWikiDit bericht verdwijnt nadat alle relevante taken zijn afgerond.

Er is één onvoltooide of openstaande taak, die nodig is om het bijwerken van Semantic MediaWiki te voltooien. Een beheerder of gebruiker met voldoende rechten kan deze uitvoeren. Dit moet worden gedaan voordat nieuwe gegevens worden toegevoegd om tegenstrijdigheden te voorkomen.

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

--[[

Module for taking and processing parameters for set in Template:Title
Work in progress

{{#invoke:Title/SMW |set
|page={{FULLPAGENAME}}
|slot=ws-page-props

|ID={{{ID|}}}
|TitelBiblio={{{TitelBiblio|}}}
|TitelGew={{{TitelGew|}}}
|OrigTitel={{{OrigTitel|}}}
|SchrijverNr={{{SchrijverNr|}}}
|Type={{{Type|}}}
|Titelreeks={{{Titelreeks|}}}
|Reeks={{{Reeks|}}}
|ReeksNr={{{ReeksNr|}}}
|Behoord={{{Behoord|}}}
|Soort={{{Soort|}}}
|Wereld={{{Wereld|}}}
|Medium vorm={{{Medium vorm|}}}
|ZieOokBij={{{ZieOokBij|}}}
|subcategorie={{{subcategorie|}}}
|KInhoud={{{KInhoud|}}}
|GUID={{{GUID|}}}
|Verwijderd={{{Verwijderd|}}}
|Opmerking={{{Opmerking|}}}
|Aantekening={{{Aantekening|}}}
}}

]]--

local p = {}

p.set = function(frame)
	local page = frame.args.page or nil
	local slot = frame.args.slot or "ws-page-props"

	-- Wiki template argumentsa
	local ID = frame.args.ID or nil
	local TitelBiblio = frame.args.TitelBiblio or nil
	local TitelGew = frame.args.TitelGew or nil
	local OrigTitel = frame.args.OrigTitel or nil
	local SchrijverNr = frame.args.SchrijverNr or nil
	local Type = frame.args.Type or nil
	local Titelreeks = frame.args.Titelreeks or nil
	local Reeks = frame.args.Reeks or nil
	local ReeksNr = frame.args.ReeksNr or nil
	local Behoord = frame.args.Behoord or nil
	local Soort = frame.args.Soort or nil
	local Wereld = frame.args.Wereld or nil
	local Mediumvorm = frame.args["Medium vorm"] or nil
	local ZieOokBij = frame.args.ZieOokBij or nil
	local subcategorie = frame.args.subcategorie or nil
	local KInhoud = frame.args.KInhoud or nil
	local GUID = frame.args.GUID or nil
	local Verwijderd = frame.args.Verwijderd or nil
	local Opmerking = frame.args.Opmerking or nil
	local Aantekening = frame.args.Aantekening or nil

	-- processing
	local titleBiblioFlattened = p.flattenBibliographicTitle( TitelBiblio )
	local initial = p.getUppercaseInitial( titleBiblioFlattened )

	local authors = {}
	if SchrijverNr ~= nil then 
		authors = mw.text.split( SchrijverNr, "," )
	end
	local authorNameTbl = p.buildAuthorNameTbl( authors )
	local authorNameStr = p.formatAuthorNameString( #authors, authorNameTbl )
	local authorNameStrInTitle = "---"
	if authorNameStr ~= "" then authorNameStrInTitle = authorNameStr end

	-- {{lc:{{#var:@titelbiblio}} - {{#var:@naamgew}} }}
	local sortLabel = string.lower( titleBiblioFlattened .. " - " .. authorNameStrInTitle )
	-- {{lc:{{#var:@naambiblioschrijver1}} - {{#var:@titelbiblio}} }} 
	local sortLabelByAuthor = string.lower( ( authorNameTbl[1]["NaamBiblio"] or "" ) .. " - " .. titleBiblioFlattened )

	-- set
	local set = {}
	-- Dutch-language label
	set["Klasse"] = "Titel"
	set["Has ID"] = ID or ""
	set["Title"] = TitelGew .. " - " .. authorNameStrInTitle
	--|Title plain={{{TitelGew|}}} - {{#var:@naamgew|---}}
	set["Title plain"] = TitelGew .. " - " .. authorNameStrInTitle
	set["Has title"] = TitelGew
	set["Has bibliographic title"] = titleBiblioFlattened
	-- |Has sort label={{#sub:{{#var:@sort title}}|0|150}}¶
	set["Has sort label"] = string.sub( sortLabel, 1, 150 ) .. "¶"
	-- |Has sort label by author={{#sub:{{#var:@sort title 2}}|0|200}}¶<!-- author first -->
	set["Has sort label by author"] = string.sub( sortLabelByAuthor, 1, 200 ) .. "¶"
	if Type ~= nil then labelType = " (" ..  Type .. ")" else labelType = "" end
	set["Has label for form"] = TitelGew .. " - " .. authorNameStrInTitle .. labelType
	set["Has original title"] = OrigTitel or ""

	return "<pre>" .. mw.text.jsonEncode( set ) .. "</pre>"

	--[[
	if mw.smw then
		local setResult = mw.smw.set( set )
	end
	]]--
end

p.flattenBibliographicTitle = function( titelBiblio )
	if titleBiblio == nil then return "" end
	-- {{Strip title for sorting|{{#sub:{{{TitelBiblio|}}}|0|75}} }}
	-- {{#sub:{{{TitelBiblio|}}}|0|75}} 
	local subbed = string.sub( titelBiblio, 1, 75 )
	-- todo use Format for sorting module instead
	local stripped = frame:expandTemplate{ title = 'Strip title for sorting', args = { subbed } }
	return stripped
end

p.getUppercaseInitial = function( str )
	local initial = string.sub( str, 1, 1 )
	return string.upper(initial)
end

--[[
Create table with names for no more than two authors
@SchrijverNr string|nil - table of author pages
@return table
]]--
p.buildAuthorNameTbl = function( authors )
	if authors == nil  or #authors == 0 then
		return {}
	end

	local res = {}
	res[1] = {
		["page"] = authors[1],
		["NaamGew"] = p.getValueFromTemplateParam( authors[1], "Person", "NaamGew" ) or "",
		["NaamBiblio"] = p.getValueFromTemplateParam( authors[1], "Person", "NaamBiblio" ) or ""
	}
	
	if authors[2] ~= nil then
		res[2] = {
			["page"] = authors[2],
			["NaamGew"] = p.getValueFromTemplateParam( authors[2], "Person", "NaamGew" ) or "",
			["NaamBiblio"] = p.getValueFromTemplateParam( authors[2], "Person", "NaamBiblio" ) or ""
		}
	end

	return res
end

--[[
Format name string for no more than two authors
@authorCount int - total number of authors
@authors table - one or two authors
@return
]]--
p.formatAuthorNameString = function( authorCount, authors )
	local authorNameStr = ""
	if ( authorCount == 0 ) then
		return ""
	elseif ( authorCount == 1 ) then
		authorNameStr = authors[1]["NaamGew"]
	elseif ( authorCount == 2 ) then
		authorNameStr =  authors[1]["NaamGew"] .. " & " .. authors[2]["NaamGew"]
	elseif ( authorCount > 2 ) then
		authorNameStr =  authors[1]["NaamGew"] .. " & " ..  authors[2]["NaamGew"] .. ", e.a."
	end
	return authorNameStr
end

--[[
UNUSED
titleBiblioFlattened
@title 'flattened' title
]]--
p.getSortkeyByTitleAndAuthor = function( title, firstAuthorName )
	local firstAuthorName = ""
	local str = title .. " - " .. firstAuthorName
	-- {{lc:{{#var:@titelbiblio}} - {{#var:@naamgew}} }} 
	-- string.lowercase( )
end

p.getValueFromTemplateParam = function( pagename, templateName, templateParam )
	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
	return slotContent[1][templateParam]
end

return p