יחידה:תבנית מידע/אישיות
קפיצה לניווט
קפיצה לחיפוש
ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:תבנית מידע/אישיות/תיעוד
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, gender) 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 if deathCause and deathCause ~= '' then if deathCause == 'נהרג' or deathCause == 'נהרגה' or deathCause == 'מוות בקרב' or deathCause == 'נהרג בקרב' or deathCause == 'נהרגה בקרב' or deathCause == 'תאונה' or deathCause == 'טביעה' then return (gender=='נקבה' and 'נהרגה') or 'נהרג' elseif deathCause == 'נעדר' or deathCause == 'נעדרת' then return (gender=='נקבה' and 'נעדרת') or 'נעדר' elseif deathCause == 'נרצח' or deathCause == 'נרצחה' or 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 .. '<br/>' .. 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 and not infoObj.isNonPerson 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..'<br/>' ..eventPlace end if usingWikidata and entityId then formattedEvent = formattedEvent .. ' [[File:Blue pencil RTL.svg|15px|link=https://www.wikidata.org/wiki/'..entityId.. '?uselang=he#P569|עריכת הנתון בוויקינתונים]]' end return formattedEvent, usingWikidata end -- Split the comma-separated lists into tables and sort them local function splitString(inputstr, sep) local sep, fields = sep or ",", {} local pattern = string.format("([^%s]+)", sep) inputstr:gsub(pattern, function(c) fields[#fields + 1] = c end) return fields end function addMissingImage(infoObj, birthDate, deathDate, gender) if infoObj.args.image ~= nil and #infoObj.args.image > 0 then return end -- there is already image -- Assuming you have defined deathDate and birthDate earlier local latestDate = deathDate or birthDate if latestDate == nil then return end -- Split the comma-separated lists and extract dates local dateList = splitString(latestDate:gsub(" או ", ","), ",") if #dateList == 0 then return end local countSuccess = 0 for i, date in ipairs(dateList) do local success, DateRes = pcall(Date.newFromWikitext, date) if success then dateList[i] = DateRes countSuccess = countSuccess + 1 end end if #dateList > 1 and countSuccess == #dateList then latestDate = dateList[1] for i, date in ipairs(dateList) do if i ~= 1 then local success, DateLeRes = pcall(Date.le, latestDate, date) if DateLeRes then latestDate = date end end end latestDate = os.time(latestDate) latestDate = os.date("%d %m %Y", latestDate) end local success, res = pcall(Date.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 local frame = mw.getCurrentFrame() infoObj.args.image = frame:expandTemplate{ title = 'אין תמונה', args = { gender, ['יישור'] = 'מרכז' } } end function fillWikidataParam(templateArgs, paramName, property, infoObj) local usingWikidata = false if infoObj.args.entityId == nil then local matching = WikidataCrossValidation.crossValidate(templateArgs[paramName], property, infoObj.args.entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, property)) end 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 and not infoObj.isNonPerson 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 local function instanceOfViolation(infoObj) local pageNs = mw.title.getCurrentTitle().namespace if pageNs ~= 0 then return true end local wikidataInstanceOf = nil if infoObj.args.entityId ~= nil then wikidataInstanceOf = mw.wikibase.getBestStatements(infoObj.args.entityId, 'P31') wikidataInstanceOf = wikidataInstanceOf and wikidataInstanceOf[1] and wikidataInstanceOf[1].mainsnak end if wikidataInstanceOf == nil then local matching = WikidataCrossValidation.crossValidate('אדם', 'P31', infoObj.args.entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, 'P31')) end else wikidataInstanceOf = wikidataInstanceOf.datavalue and wikidataInstanceOf.datavalue.value and wikidataInstanceOf.datavalue.value.id if wikidataInstanceOf ~= 'Q5' then table.insert(infoObj.wikidataCats, '[[קטגוריה: ויקינתונים - תבניות אישיות למופע לא מתאים]]') return true end end return false end function addPersonDetails(frame, infoObj) local templateArgs = frame:getParent().args local usingBirthWikidata = false local usingDeathWikidata = false local birthLabel = 'לידה' local deathLabel = 'פטירה' infoObj.isNonPerson = instanceOfViolation(infoObj) local wikidataGender = nil if not infoObj.isNonPerson then wikidataGender = PropertyLink.getItem( 'P21', infoObj.args.entityId ) if wikidataGender == nil then table.insert(infoObj.wikidataCats, '[[קטגוריה:אישים חסרי מגדר בוויקינתונים]]') else if (wikidataGender == "Q6581097") then -- male wikidataGender = 'זכר' elseif (wikidataGender == "Q2449503") then -- transgender male wikidataGender = 'זכר' elseif (wikidataGender == "Q15145778") then -- cisgender male wikidataGender = 'זכר' elseif (wikidataGender == "Q6581072") then -- female wikidataGender = 'נקבה' elseif (wikidataGender == "Q1052281") then -- transgender female wikidataGender = 'נקבה' elseif (wikidataGender == "Q15145779") then -- cisgender female wikidataGender = 'נקבה' elseif (wikidataGender == "Q121307100") then -- intersex woman wikidataGender = 'נקבה' elseif wikidataGender == 'Q1097630' -- intersex or wikidataGender == 'Q48270' -- non binary then wikidataGender = '' -- עד שתחליטו end end end -- fill birth/death dates from wikidata if missing and the person is not a human biblical figure if PropertyLink.getItem('P31', infoObj.args.entityId) ~= "Q20643955" then usingBirthWikidata = fillWikidataParam(templateArgs, 'תאריך לידה', 'P569', infoObj) usingDeathWikidata = fillWikidataParam(templateArgs, 'תאריך פטירה', 'P570', infoObj) end 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, nil, wikidataGender) or '' end local birthDetails, usingBirthWikidataEvent = getEventDetails(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'], templateArgs['מקום לידה'], 'P569', 'P19', age, usingBirthWikidata, infoObj) table.insert(infoObj.templateStructure, 1, { label=birthLabel, data=birthDetails }) usingBirthWikidata = usingBirthWikidata or usingBirthWikidataEvent elseif templateArgs['מקום לידה'] ~= '-' then fillWikidataParam(templateArgs, 'מקום לידה', 'P19', infoObj) if templateArgs['מקום לידה'] ~= nil and templateArgs['מקום לידה'] ~= '' then -- only if we fill the parameter eventually - add to template table.insert(infoObj.templateStructure, 1, { label=birthLabel, data= templateArgs['מקום לידה'] }) end end deathLabel = getDeathLabel(templateArgs['סיבת המוות'], infoObj.args.entityId, wikidataGender) if deathDate ~= nil then 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) if templateArgs['מקום פטירה'] ~= nil and templateArgs['מקום פטירה'] ~= '' then -- only if we fill the parameter eventually - add to template table.insert(infoObj.templateStructure, 2, { label=deathLabel, data= templateArgs['מקום פטירה'] }) end end if infoObj.isSelfUse then table.insert(infoObj.templateStructure, 1, { label=birthLabel, data='{{{תאריך לידה}}}<br/>{{{מקום לידה}}}' }) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data='{{{תאריך פטירה}}}<br/>{{{מקום פטירה}}}' }) 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, wikidataGender) 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 }