Pagesync (overleg | bijdragen)
Imported by PageSync
Er kan kennelijk meer dan één originele titel zijn: string -> table
 
Regel 142: Regel 142:
if Type ~= nil then labelType = " (" ..  Type .. ")" else labelType = "" end
if Type ~= nil then labelType = " (" ..  Type .. ")" else labelType = "" end
set["Has label for form"] = TitelGew .. " - " .. authorNameStrInTitle .. labelType
set["Has label for form"] = TitelGew .. " - " .. authorNameStrInTitle .. labelType
set["Has original title"] = OrigTitel or ""
set["Has original title"] = mw.text.split( OrigTitel or "", "," )
-- table
-- table
set["Has author"] = authors
set["Has author"] = authors

Huidige versie van 23 mei 2026 13:57

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 (text)":["Persoon/96"],"Has author":["Persoon/96"],"Has medium form":["Gedrukt"],"Has bibliographic title":"Meergewicht","Has world":["Wereld/1294611"],"Has category":"Science Fiction","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 format":"Verhaal","Title":"Meergewicht - Peter Andriesse","Klasse":"Titel","Has title series (text)":["Titelreeks/1004203","Titelreeks/1025879"],"Has title series":["Titelreeks/1004203","Titelreeks/1025879"],"Has title series sortkey":"99999"}

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

{{#invoke:Class/Title |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 )

	-- create two identical tables because it appears we cannot reuse the variable for a second property
	local authors = {}
	local authors2 = {}
	if SchrijverNr ~= nil then
		authors = mw.text.split( SchrijverNr, ",", true )
		authors2 = mw.text.split( SchrijverNr, ",", true )
	end
	local authorNameTbl = mPerson.buildAuthorNameTbl( authors ) or {}
	local authorNameStrInTitle = mPerson.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
	-- create two identical tables because it appears we cannot reuse the variable for a second property
	local Titelreeksen = {}
	local Titelreeksen2 = {}
	if Titelreeks ~= nil and Titelreeks ~= "" then
		Titelreeksen = mw.text.split( Titelreeks, ",", true )
		Titelreeksen2 = mw.text.split( Titelreeks, ",", true )
		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"] = mw.text.split( OrigTitel or "", "," )
	-- table
	set["Has author"] = authors
	set["Has author (text)"] = authors2
	-- 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 title series (text)"] = Titelreeksen2
	--set["Has title series (text)"] = Titelreeksen or {}
	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

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

end

--[[
@title string - pagename of title
Should mirror approach by set supra
]]--
p.getSortLabelByAuthor = function( title )
	if title == nil then return "" end

	-- 1 title
	local titelBiblio = mSlot.getValueFromTemplateData( "ws-page-props", title, "Title", "TitelBiblio" )
	local titleBiblioFlattened = p.flattenBibliographicTitle( titelBiblio )

	-- 2 get author names
	local SchrijverNr = mSlot.getValueFromTemplateData( "ws-page-props", title, "Title", "SchrijverNr" )
	local authors = mw.text.split( SchrijverNr, "," )
	local authorNameTbl = mPerson.buildAuthorNameTbl( authors ) or {}
	local firstAuthorBiblioName = ""
	if authorNameTbl[1] ~= nil then firstAuthorBiblioName = authorNameTbl[1]["NaamBiblio"] or "" end

	-- 3 postprocess and return
	local sortLabelByAuthor = string.lower( firstAuthorBiblioName .. " - " .. titleBiblioFlattened )
	return string.sub( sortLabelByAuthor, 1, 200 ) .. "¶"
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

--[[
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 = p.flattenBibliographicTitle( titelBiblio )
	return string.lower( firstAuthorBiblioName .. " - " .. titleBiblioFlattened )
end

return p