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.

Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
Regel 248: Regel 248:
p.getValueFromTemplateParam = function( pagename, templateName, templateParam )
p.getValueFromTemplateParam = function( pagename, templateName, templateParam )
return mSlot.getValueFromTemplateParam( pagename, templateName, templateParam )
return mSlot.getValueFromTemplateParam( pagename, templateName, templateParam )
end
--[[ used by Class/Book, maybe todo : Class/Title ]]--
p.createSortLabelByAuthor = function( titelBiblio, firstAuthorBiblioName )
local titleBiblioFlattened = mTitle.flattenBibliographicTitle( titelBiblio )
return string.lower( firstAuthorBiblioName .. " - " .. titleBiblioFlattened )
end
end


return p
return p

Versie van 1 okt 2025 20:01

Module:Class/Title




Meergewicht - Peter Andriesse

+ fictieve velden

{"Has title series or world":["Titelreeks/1004203","Titelreeks/1025879","Wereld/1294611"],"Has initial":"M","Has original title":"","Title series available":"true","Has ID":"300","Title plain":"Meergewicht - Peter Andriesse","Has title":"Meergewicht","Has sort label by author":"andriesse, peter - meergewicht¶","Has author":["Persoon/96"],"Has medium form":["Gedrukt"],"Has bibliographic title":"Meergewicht","Has world":["Wereld/1294611"],"Has sort label":"meergewicht - peter andriesse¶","Has label for form":"Meergewicht - Peter Andriesse (Verhaal)","Has series label":"De Kronieken van Narnia, Meriumbe","Has author string":"Persoon/96","Has category":"Science Fiction","Title":"Meergewicht - Peter Andriesse","Has format":"Verhaal","Klasse":"Titel","Has title series":["Titelreeks/1004203","Titelreeks/1025879"],"Has title series sortkey":"99999"}

--[[
@todo rename to Class/Title

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

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

|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 = {}
local mFormatForSorting = require("Module:Format for sorting")
local mCspFunctions = require('Module:CspFunctions')
local mSlot = require("Module:Slot")
local mPerson = require("Module:Class/Person")

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

	-- Wiki template argumentsa
	local ID = frame.args.ID or nil
	local TitelBiblio = frame.args.TitelBiblio or nil
	local TitelGew = frame.args.TitelGew or ""
	local OrigTitel = frame.args.OrigTitel or nil
	local SchrijverNr = frame.args.SchrijverNr or nil
	local Type = frame.args.Type or nil

	-- Reeks (oud, string) => Titelreeks (nieuw, things)
	local Titelreeks = frame.args.Titelreeks or nil
	local Reeks = frame.args.Reeks or nil
	local ReeksNr = frame.args.ReeksNr or nil
	
	-- 'Behoord' (oud, string) => 'Wereld' (nieuw, things)
	local Behoord = frame.args.Behoord or nil
	local Wereld = frame.args.Wereld or nil
	
	local Soort = frame.args.Soort 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 = mPerson.buildAuthorNameTbl( authors ) or {}
	local authorNameStrInTitle = p.formatAuthorNameString( #authors, authorNameTbl, "---" )

	local titlePlain = TitelGew .. " - " .. authorNameStrInTitle

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

	local seriesOrWorld = {}
	local isTitleSeriesAvailable = "false"
	local seriesLabel = Reeks
	local Titelreeksen = {}
	if Titelreeks ~= nil and Titelreeks ~= "" then
		Titelreeksen = mw.text.split( Titelreeks, "," )
		isTitleSeriesAvailable = "true"
		local seriesLabels = {}
		for _,r in ipairs( Titelreeksen ) do 
			-- {{#if:{{{Titelreeks|}}}|{{#show:{{{Titelreeks|}}}|?Title plain}}|{{#var:@reeks}} }}
			table.insert( seriesLabels, mSlot.getValueFromTemplateParam( r, "Title series", "TitelGew" ) )
			table.insert( seriesOrWorld, r )
		end
		seriesLabel = table.concat( seriesLabels, ", " )
	end
	local Werelden = {}
	if Wereld ~= nil and Wereld ~= "" then
		Werelden = mw.text.split( Wereld, "," )
		for _,w in ipairs(Werelden) do
			table.insert( seriesOrWorld, w )
		end
	end

	local mediumVormen = { "Gedrukt" } -- default
	if Mediumvorm ~= nil then
		mediumVormen = mw.text.split( Mediumvorm, "," )
	end

	-- set
	local set = {}
	-- Dutch-language label
	set["Klasse"] = "Titel"
	set["Has ID"] = ID or ""
	set["Title"] = titlePlain
	--|Title plain={{{TitelGew|}}} - {{#var:@naamgew|---}}
	set["Title plain"] = titlePlain
	set["Has title"] = TitelGew
	set["Has bibliographic title"] = titleBiblioFlattened
	set["Has initial"] = initial
	
	-- |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 ""
	-- table
	set["Has author"] = authors
	-- string version, used to preserve the order of appearance
	set["Has author string"] = SchrijverNr

	set["Title series available"] = isTitleSeriesAvailable
	set["Has title series"] = Titelreeksen
	set["Has series label"] = seriesLabel
	set["Has series volume"] = ReeksNr
	-- Has title series sortkey={{#invoke:Format for sorting|textString|1={{#var:@reeksnr|99999}}}}
	set["Has title series sortkey"] = mFormatForSorting.textStringFormat( ReeksNr or "99999" )
	set["Belongs to world"] = Behoord
	set["Has world"] = Werelden
	set["Has title series or world"] = seriesOrWorld

	set["Has format"] = Type
	set["Has medium form"] = mediumVormen
	set["Has category"] = Soort
	if subcategorie ~= nil then
		set["Has subcategory"] = mw.text.split( subcategorie, "," )
	end
	set["Has summary"] = KInhoud
	if ZieOokBij ~= nil then
		set["Has related title"] = mw.text.split( ZieOokBij, ",")
	end
	set["Has comment"] = Opmerking
	set["Has private note"] = Aantekening

	if debugmode == "true" then
		return "<pre>" .. mw.text.jsonEncode( set ) .. "</pre>"
	end

	if mw.smw then
		local setResult = mw.smw.set( set )
	end
	
	mw.ext.displaytitle.set( titlePlain)
	frame:callParserFunction( 'DEFAULTSORT', { sortLabel } )

end

--[[
@titelBiblio string|nil
@return string
]]--
p.flattenBibliographicTitle = function( titelBiblio )
	if titelBiblio == nil then return "" end
	-- {{Strip title for sorting|{{#sub:{{{TitelBiblio|}}}|0|75}} }}
	-- {{#sub:{{{TitelBiblio|}}}|0|75}} 
	local subbed = string.sub( titelBiblio, 1, 75 )
	local stripped = mFormatForSorting.minimalStripForSorting( subbed )
	-- previously:
	--local frame = mw.getCurrentFrame()
	--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

--[[
@deprecated
]]--
p.buildAuthorNameTbl = function( authors )
	--return mPerson.buildAuthorNameTbl( authors )
end

--[[
Format name string for no more than two authors
@authorCount int - total number of authors
@authors table - one or two authors
@return string
]]--
p.formatAuthorNameString = function( authorCount, authors, defaultStr )
	local authorNameStr = defaultStr
	
	if ( authorCount > 0 ) and type(authors[1]["NaamGew"]) == nil then
		mw.log( "Author name could not be retrieved" )
	end

	if ( 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

--[[
@deprecated
]]--
p.getValueFromTemplateParam = function( pagename, templateName, templateParam )
	return mSlot.getValueFromTemplateParam( pagename, templateName, templateParam )
end

--[[ used by Class/Book, maybe todo : Class/Title ]]--
p.createSortLabelByAuthor = function( titelBiblio, firstAuthorBiblioName )
	local titleBiblioFlattened = mTitle.flattenBibliographicTitle( titelBiblio )
	return string.lower( firstAuthorBiblioName .. " - " .. titleBiblioFlattened )
end

return p