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
