משתמש:ירח אפל/ארגז חול/יחידה:תבנית מידע/אישיות

מתוך ויקיפדיה, האנציקלופדיה החופשית

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 }