משתמש:ירח אפל/ארגז חול/יחידה:תבנית מידע/אישיות
local Infobox = require('Module:תבנית מידע').Infobox local LocationAndCountry = require('Module:LocationAndCountry') local PropertyLink = require('Module:PropertyLink') local ageModule = require('Module:גיל לערכי אישים') local Date = require('Module:תאריך') local hebrewDateModule = require('Module:תאריך עברי') local WikidataCrossValidation = require('Module:WikidataCrossValidation')
--[[ Get general date if known, otherwise guess from hebrew date. ]] function getSpeculativeDate(generalDate, hebrewDate) if generalDate == '-' then return nil end if generalDate~=nil and generalDate~= then return generalDate end if hebrewDate~=nil and hebrewDate~= then local success, sepcDate = pcall(hebrewDateModule.pick, mw.getCurrentFrame():newChild{ args = {hebrew=hebrewDate, world=, exact='כן' } }) if not success or sepcDate== then return nil end return sepcDate end return nil end
local function getDeathLabel(deathCause, entityId) local result= local fromWikidata=nil entityId = entityId or mw.wikibase.getEntityIdForCurrentPage() if ( deathCause == nil or deathCause == ) and entityId ~= nil then local deathCauseWikidata = mw.wikibase.getBestStatements(entityId, 'P1196') deathCauseWikidata = deathCauseWikidata and deathCauseWikidata[1] and deathCauseWikidata[1].mainsnak if deathCauseWikidata then deathCause = mw.wikibase.renderSnak(deathCauseWikidata) fromWikidata=true end end local gender = PropertyLink.getPropertyByOptions( 'P21', entityId )
if deathCause and deathCause ~= then
if deathCause == 'נהרג' or deathCause == 'נהרגה' then
return (gender=='נקבה' and 'נהרגה') or 'נהרג'
elseif deathCause == 'נרצח' or deathCause == 'נרצחה' or deathCause == 'רצח' then
return (gender=='נקבה' and 'נרצחה') or 'נרצח'
elseif deathCause == 'התאבד' or deathCause == 'התאבדה' or deathCause == 'התאבדות' then
return (gender=='נקבה' and 'התאבדה') or 'התאבד'
elseif deathCause == 'הוצא להורג' or deathCause == 'הוצאה להורג' or deathCause == 'עונש מוות' or deathCause == 'תלייה' then
return 'הוצאה להורג'
elseif not fromWikidata then result='קטגוריה:ערכים עם סיבת מוות שגויה'
end
end
return result .. 'פטירה'
end
function getEventDetails(generalDate, hebDate, eventPlace, propDate, propPlace, age, usingWikidata, infoObj)
entityId = infoObj.args.entityId or mw.wikibase.getEntityIdForCurrentPage()
age = age or
local formattedEvent
local placeDate = propDate
if generalDate~=nil and generalDate~= then
local success, placeDateParsed = pcall(Date.newFromWikitext, generalDate)
if success then
placeDate = placeDateParsed
end
formattedEvent = generalDate .. age
if hebDate~=nil and hebDate~= then
formattedEvent = formattedEvent ..'
' ..hebDate
end
elseif hebDate~=nil and hebDate~= then
formattedEvent = hebDate .. age
end
if (eventPlace == nil or eventPlace == ) and entityId then local success, res = pcall(LocationAndCountry.displayFromParams, propPlace, entityId, placeDate , 1) if success and res and #res>0 then usingWikidata = true eventPlace = res end else local pageNs = mw.title.getCurrentTitle().namespace if pageNs==0 then local matching = WikidataCrossValidation.crossValidate(eventPlace, propPlace, entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, propPlace)) end end end
if eventPlace~= and eventPlace~=nil and eventPlace~='-' then
formattedEvent = formattedEvent..'
' ..eventPlace
end
if usingWikidata and entityId then formattedEvent = formattedEvent .. ' ' end
return formattedEvent, usingWikidata end
function addMissingImage(infoObj, birthDate, deathDate) if infoObj.args.image ~= nil and #infoObj.args.image > 0 then return end -- there is already image local latestDate = deathDate or birthDate if latestDate == nil then return end local dateModule = require('Module:תאריך') local success, res = pcall(dateModule.parseDateRange, latestDate, 'raw') if success==false then return end -- there is no known VALID date local yearsEstimated = res/(60*60*24*365) if yearsEstimated>150 then return end
if infoObj.args.entityId == nil then return false -- no wikidata entity end
local gender = PropertyLink.getPropertyByOptions( 'P21', infoObj.args.entityId ) local frame = mw.getCurrentFrame() infoObj.args.image = frame:expandTemplate{ title = 'אין תמונה', args = { gender, ['יישור'] = 'center' } } end
function fillWikidataParam(templateArgs, paramName, property, infoObj) local usingWikidata = false if infoObj.args.entityId == nil then return false -- no wikidata entity end if templateArgs[paramName]==nil or templateArgs[paramName]== then templateArgs[paramName] = PropertyLink.getPropertyByOptions( property, infoObj.args.entityId ) if templateArgs[paramName] and #templateArgs[paramName]>0 then usingWikidata = true end else local pageNs = mw.title.getCurrentTitle().namespace if pageNs==0 then local matching = WikidataCrossValidation.crossValidate(templateArgs[paramName], property, infoObj.args.entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, property)) end end end return usingWikidata end
function addPersonDetails(frame, infoObj) local templateArgs = frame:getParent().args local usingBirthWikidata = false local usingDeathWikidata = false local birthLabel = 'לידה' local deathLabel = 'פטירה'
-- fill birth/death dates from wikidata is missing usingBirthWikidata = fillWikidataParam(templateArgs, 'תאריך לידה', 'P569', infoObj) usingDeathWikidata = fillWikidataParam(templateArgs, 'תאריך פטירה', 'P570', infoObj)
local birthDate = getSpeculativeDate(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי']) local deathDate = getSpeculativeDate(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'])
if birthDate~=nil then local age = nil if deathDate==nil then age = ageModule.ageCalc(birthDate, nil, true, false, true) or end local birthDetails, usingBirthWikidataEvent = getEventDetails(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'], templateArgs['מקום לידה'], 'P569', 'P19', age, usingBirthWikidata, infoObj) table.insert(infoObj.templateStructure, 1, { label='לידה', data=birthDetails }) usingBirthWikidata = usingBirthWikidata or usingBirthWikidataEvent elseif templateArgs['מקום לידה']~= '-' then fillWikidataParam(templateArgs, 'מקום לידה', 'P19', infoObj) table.insert(infoObj.templateStructure, 1, { label=birthLabel, data= templateArgs['מקום לידה'] }) end
if deathDate~=nil then deathLabel = getDeathLabel(templateArgs['סיבת המוות'], infoObj.args.entityId) local age = ageModule.ageCalc(birthDate, deathDate, false, false, true) or local deathDetails, usingDeathWikidataEvent = getEventDetails(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'], templateArgs['מקום פטירה'], 'P570', 'P20', age, usingDeathWikidata, infoObj) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data=deathDetails }) usingDeathWikidata = usingDeathWikidata or usingDeathWikidataEvent elseif templateArgs['מקום פטירה']~= '-' then fillWikidataParam(templateArgs, 'מקום פטירה', 'P20', infoObj) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data= templateArgs['מקום פטירה'] }) end
if infoObj.isSelfUse then
table.insert(infoObj.templateStructure, 1, {
label=birthLabel,
data='{{{תאריך לידה}}}
{{{מקום לידה}}}'
})
table.insert(infoObj.templateStructure, 2, {
label=deathLabel,
data='{{{תאריך פטירה}}}
{{{מקום פטירה}}}'
})
end
if usingBirthWikidata or usingDeathWikidata then infoObj.args.usingWikidata = true end
if frame.args['כותרת0'] then table.insert(infoObj.templateStructure, 1, { header=1, data=frame.args['כותרת0'], rowstyle=frame.args['עיצוב-שורה0'], rowclass=frame.args['מחלקה-שורה0'], headerstyle=frame.args['כותרת0-עיצוב'] }) end
if frame.args['תמונה']~='-' then addMissingImage(infoObj, birthDate, deathDate) end end
function infobox(frame) local infoObj = Infobox:new() frame.args['תמונה-גודל'] = frame.args['תמונה-גודל'] or '220' infoObj:parseArgs(frame)
if infoObj.args.title~='-' then addPersonDetails(frame, infoObj) end return infoObj:render() end
return {
['מידע']=infobox,
['addPersonDetails'] = addPersonDetails
}