שינויים

אין תקציר עריכה
שורה 11: שורה 11:  
function getSpeculativeDate(generalDate, hebrewDate)
 
function getSpeculativeDate(generalDate, hebrewDate)
 
if generalDate == '-' then return nil end
 
if generalDate == '-' then return nil end
if generalDate~=nil and generalDate~='' then return generalDate end
+
if generalDate ~= nil and generalDate ~= '' then return generalDate end
if hebrewDate~=nil and hebrewDate~='' then
+
if hebrewDate ~= nil and hebrewDate ~= '' then
 
local success, sepcDate = pcall(hebrewDateModule.pick, mw.getCurrentFrame():newChild{ args = {hebrew=hebrewDate, world='', exact='כן' } })
 
local success, sepcDate = pcall(hebrewDateModule.pick, mw.getCurrentFrame():newChild{ args = {hebrew=hebrewDate, world='', exact='כן' } })
if not success or sepcDate=='' then return nil end
+
if not success or sepcDate == '' then return nil end
 
return sepcDate
 
return sepcDate
 
end
 
end
שורה 24: שורה 24:  
local fromWikidata=nil
 
local fromWikidata=nil
 
entityId = entityId or mw.wikibase.getEntityIdForCurrentPage()
 
entityId = entityId or mw.wikibase.getEntityIdForCurrentPage()
if ( deathCause == nil or deathCause =='' ) and entityId ~= nil then
+
if ( deathCause == nil or deathCause == '' ) and entityId ~= nil then
 
local deathCauseWikidata = mw.wikibase.getBestStatements(entityId, 'P1196')
 
local deathCauseWikidata = mw.wikibase.getBestStatements(entityId, 'P1196')
 
deathCauseWikidata = deathCauseWikidata and deathCauseWikidata[1] and deathCauseWikidata[1].mainsnak
 
deathCauseWikidata = deathCauseWikidata and deathCauseWikidata[1] and deathCauseWikidata[1].mainsnak
שורה 33: שורה 33:  
end
 
end
   −
-- Use female form of address also for transgender females
  −
if (gender == "אישה טרנסג'נדרית") then gender = 'נקבה' end
  −
   
if deathCause and deathCause ~= '' then
 
if deathCause and deathCause ~= '' then
if deathCause == 'נהרג' or deathCause == 'נהרגה' or deathCause == 'מוות בקרב' or deathCause == 'נהרג בקרב' or deathCause == 'נהרגה בקרב' or deathCause == 'תאונה' then
+
if deathCause == 'נהרג' or deathCause == 'נהרגה' or deathCause == 'מוות בקרב' or deathCause == 'נהרג בקרב' or deathCause == 'נהרגה בקרב' or deathCause == 'תאונה' or deathCause == 'טביעה' then
 
return (gender=='נקבה' and 'נהרגה') or 'נהרג'
 
return (gender=='נקבה' and 'נהרגה') or 'נהרג'
elseif deathCause == 'נרצח' or deathCause == 'נרצחה' or deathCause == 'רצח' or deathCause == 'רעל' then
+
elseif deathCause == 'נעדר' or deathCause == 'נעדרת' then
 +
return (gender=='נקבה' and 'נעדרת') or 'נעדר'
 +
elseif deathCause == 'נרצח' or deathCause == 'נרצחה' or deathCause == 'רצח' or deathCause == 'רצח המוני' or deathCause == 'רעל' then
 
return (gender=='נקבה' and 'נרצחה') or 'נרצח'
 
return (gender=='נקבה' and 'נרצחה') or 'נרצח'
 
    elseif deathCause == 'התאבד' or deathCause == 'התאבדה' or deathCause == 'התאבדות' then
 
    elseif deathCause == 'התאבד' or deathCause == 'התאבדה' or deathCause == 'התאבדות' then
שורה 45: שורה 44:  
elseif deathCause == 'הוצא להורג' or deathCause == 'הוצאה להורג' or deathCause == 'עונש מוות' or deathCause == 'תלייה' then
 
elseif deathCause == 'הוצא להורג' or deathCause == 'הוצאה להורג' or deathCause == 'עונש מוות' or deathCause == 'תלייה' then
 
return 'הוצאה להורג'
 
return 'הוצאה להורג'
elseif not fromWikidata then result='[[קטגוריה:ערכים עם סיבת מוות שגויה בתבנית]]'
+
elseif not fromWikidata then result = '[[קטגוריה:ערכים עם סיבת מוות שגויה בתבנית]]'
 
end
 
end
 
end
 
end
 
return result .. 'פטירה'
 
return result .. 'פטירה'
 
end
 
end
 +
 
function getEventDetails(generalDate, hebDate, eventPlace, propDate, propPlace, age, usingWikidata, infoObj)
 
function getEventDetails(generalDate, hebDate, eventPlace, propDate, propPlace, age, usingWikidata, infoObj)
 
entityId = infoObj.args.entityId or mw.wikibase.getEntityIdForCurrentPage()
 
entityId = infoObj.args.entityId or mw.wikibase.getEntityIdForCurrentPage()
שורה 55: שורה 55:  
local formattedEvent
 
local formattedEvent
 
local placeDate = propDate
 
local placeDate = propDate
if generalDate~=nil and generalDate~='' then
+
if generalDate ~= nil and generalDate ~= '' then
 
local success, placeDateParsed  = pcall(Date.newFromWikitext, generalDate)
 
local success, placeDateParsed  = pcall(Date.newFromWikitext, generalDate)
 
if success then
 
if success then
שורה 61: שורה 61:  
end
 
end
 
formattedEvent = generalDate .. age
 
formattedEvent = generalDate .. age
if hebDate~=nil and hebDate~='' then  
+
if hebDate ~= nil and hebDate ~= '' then  
formattedEvent = formattedEvent ..'<br/>' ..hebDate
+
formattedEvent = formattedEvent .. '<br/>' .. hebDate
 
end
 
end
elseif hebDate~=nil and hebDate~='' then
+
elseif hebDate ~= nil and hebDate ~= '' then
 
formattedEvent = hebDate .. age
 
formattedEvent = hebDate .. age
 
end
 
end
שורה 70: שורה 70:  
if (eventPlace == nil or eventPlace == '') and entityId then
 
if (eventPlace == nil or eventPlace == '') and entityId then
 
local success, res  = pcall(LocationAndCountry.displayFromParams, propPlace, entityId, placeDate , 1)
 
local success, res  = pcall(LocationAndCountry.displayFromParams, propPlace, entityId, placeDate , 1)
if success and res and #res>0 then
+
if success and res and #res > 0 then
 
usingWikidata = true
 
usingWikidata = true
 
eventPlace = res
 
eventPlace = res
שורה 77: שורה 77:  
local pageNs = mw.title.getCurrentTitle().namespace
 
local pageNs = mw.title.getCurrentTitle().namespace
 
if pageNs==0 and not infoObj.isNonPerson then
 
if pageNs==0 and not infoObj.isNonPerson then
local matching = WikidataCrossValidation.crossValidate(eventPlace, propPlace, entityId )
+
local matching = WikidataCrossValidation.crossValidate(eventPlace, propPlace, entityId)
 
if matching then
 
if matching then
 
table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, propPlace))
 
table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, propPlace))
שורה 93: שורה 93:     
return formattedEvent, usingWikidata
 
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
 
end
    
function addMissingImage(infoObj, birthDate, deathDate, gender)
 
function addMissingImage(infoObj, birthDate, deathDate, gender)
 
if infoObj.args.image ~= nil and #infoObj.args.image > 0 then return end  -- there is already image  
 
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
 
local latestDate = deathDate or birthDate
 
if latestDate == nil then return end
 
if latestDate == nil then return end
local dateModule = require('Module:תאריך')
+
local success, res = pcall(dateModule.parseDateRange, latestDate, 'raw')
+
-- 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
 
if success==false then return end -- there is no known VALID date
 
local yearsEstimated = res/(60*60*24*365)
 
local yearsEstimated = res/(60*60*24*365)
שורה 106: שורה 144:  
 
 
local frame = mw.getCurrentFrame()
 
local frame = mw.getCurrentFrame()
infoObj.args.image = frame:expandTemplate{ title = 'אין תמונה', args = { gender, ['יישור'] = 'center' } }
+
infoObj.args.image = frame:expandTemplate{ title = 'אין תמונה', args = { gender, ['יישור'] = 'מרכז' } }
 
end
 
end
   שורה 118: שורה 156:  
return false -- no wikidata entity
 
return false -- no wikidata entity
 
end
 
end
if templateArgs[paramName]==nil or templateArgs[paramName]=='' then
+
if templateArgs[paramName] == nil or templateArgs[paramName] == '' then
 
templateArgs[paramName] = PropertyLink.getPropertyByOptions( property, infoObj.args.entityId )
 
templateArgs[paramName] = PropertyLink.getPropertyByOptions( property, infoObj.args.entityId )
if templateArgs[paramName] and #templateArgs[paramName]>0 then
+
if templateArgs[paramName] and #templateArgs[paramName] > 0 then
 
usingWikidata = true
 
usingWikidata = true
 
end
 
end
שורה 137: שורה 175:  
local function instanceOfViolation(infoObj)
 
local function instanceOfViolation(infoObj)
 
local pageNs = mw.title.getCurrentTitle().namespace
 
local pageNs = mw.title.getCurrentTitle().namespace
if pageNs~=0 then
+
if pageNs ~= 0 then
 
return true
 
return true
 
end
 
end
שורה 150: שורה 188:  
local matching = WikidataCrossValidation.crossValidate('אדם', 'P31', infoObj.args.entityId )
 
local matching = WikidataCrossValidation.crossValidate('אדם', 'P31', infoObj.args.entityId )
 
if matching then
 
if matching then
mw.logObject(matching)
   
table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, 'P31'))
 
table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, 'P31'))
 
end
 
end
שורה 174: שורה 211:  
local wikidataGender = nil
 
local wikidataGender = nil
 
if not infoObj.isNonPerson then
 
if not infoObj.isNonPerson then
wikidataGender = PropertyLink.getPropertyByOptions( 'P21', infoObj.args.entityId )
+
wikidataGender = PropertyLink.getItem( 'P21', infoObj.args.entityId )
 
if wikidataGender == nil then
 
if wikidataGender == nil then
 
table.insert(infoObj.wikidataCats, '[[קטגוריה:אישים חסרי מגדר בוויקינתונים]]')
 
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
 
end
 
end
-- fill birth/death dates from wikidata is missing
+
-- fill birth/death dates from wikidata if missing and the person is not a human biblical figure
usingBirthWikidata = fillWikidataParam(templateArgs, 'תאריך לידה', 'P569', infoObj)
+
if PropertyLink.getItem('P31', infoObj.args.entityId) ~= "Q20643955" then
usingDeathWikidata = fillWikidataParam(templateArgs, 'תאריך פטירה', 'P570', infoObj)
+
usingBirthWikidata = fillWikidataParam(templateArgs, 'תאריך לידה', 'P569', infoObj)
 +
usingDeathWikidata = fillWikidataParam(templateArgs, 'תאריך פטירה', 'P570', infoObj)
 +
end
 
 
 
local birthDate = getSpeculativeDate(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'])
 
local birthDate = getSpeculativeDate(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'])
 
local deathDate = getSpeculativeDate(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'])
 
local deathDate = getSpeculativeDate(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'])
 
 
if birthDate~=nil then
+
if birthDate ~= nil then
 
local age = nil
 
local age = nil
if deathDate==nil then
+
if deathDate == nil then
age = ageModule.ageCalc(birthDate, nil, true, false, true) or ''
+
age = ageModule.ageCalc(birthDate, nil, true, false, true, nil, wikidataGender) or ''
 
end
 
end
 
local birthDetails, usingBirthWikidataEvent = getEventDetails(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'], templateArgs['מקום לידה'], 'P569', 'P19', age, usingBirthWikidata, infoObj)
 
local birthDetails, usingBirthWikidataEvent = getEventDetails(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'], templateArgs['מקום לידה'], 'P569', 'P19', age, usingBirthWikidata, infoObj)
 
table.insert(infoObj.templateStructure, 1, {
 
table.insert(infoObj.templateStructure, 1, {
label='לידה',
+
label=birthLabel,
 
data=birthDetails
 
data=birthDetails
 
})
 
})
 
usingBirthWikidata = usingBirthWikidata or usingBirthWikidataEvent
 
usingBirthWikidata = usingBirthWikidata or usingBirthWikidataEvent
elseif templateArgs['מקום לידה']~= '-' then
+
elseif templateArgs['מקום לידה'] ~= '-' then
 
fillWikidataParam(templateArgs, 'מקום לידה', 'P19', infoObj)
 
fillWikidataParam(templateArgs, 'מקום לידה', 'P19', infoObj)
table.insert(infoObj.templateStructure, 1, {
+
if  templateArgs['מקום לידה'] ~= nil and templateArgs['מקום לידה'] ~= '' then -- only if we fill the parameter eventually - add to template
label=birthLabel,
+
table.insert(infoObj.templateStructure, 1, {
data= templateArgs['מקום לידה']
+
label=birthLabel,
})
+
data= templateArgs['מקום לידה']
 +
})
 +
end
 
end
 
end
+
 
 
deathLabel = getDeathLabel(templateArgs['סיבת המוות'], infoObj.args.entityId, wikidataGender)
 
deathLabel = getDeathLabel(templateArgs['סיבת המוות'], infoObj.args.entityId, wikidataGender)
if deathDate~=nil then
+
if deathDate ~= nil then
 
local age =  ageModule.ageCalc(birthDate, deathDate, false, false, true) or ''
 
local age =  ageModule.ageCalc(birthDate, deathDate, false, false, true) or ''
 
local deathDetails, usingDeathWikidataEvent = getEventDetails(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'], templateArgs['מקום פטירה'], 'P570', 'P20', age, usingDeathWikidata, infoObj)
 
local deathDetails, usingDeathWikidataEvent = getEventDetails(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'], templateArgs['מקום פטירה'], 'P570', 'P20', age, usingDeathWikidata, infoObj)
שורה 214: שורה 274:  
})
 
})
 
usingDeathWikidata = usingDeathWikidata or usingDeathWikidataEvent
 
usingDeathWikidata = usingDeathWikidata or usingDeathWikidataEvent
elseif templateArgs['מקום פטירה']~= '-' then
+
elseif templateArgs['מקום פטירה'] ~= '-' then
 
fillWikidataParam(templateArgs, 'מקום פטירה', 'P20', infoObj)
 
fillWikidataParam(templateArgs, 'מקום פטירה', 'P20', infoObj)
table.insert(infoObj.templateStructure, 2, {
+
if templateArgs['מקום פטירה'] ~= nil and templateArgs['מקום פטירה'] ~= '' then -- only if we fill the parameter eventually - add to template
label=deathLabel,
+
table.insert(infoObj.templateStructure, 2, {
data= templateArgs['מקום פטירה']
+
label=deathLabel,
})
+
data= templateArgs['מקום פטירה']
 +
})
 +
end
 
end
 
end
 
 
שורה 229: שורה 291:  
table.insert(infoObj.templateStructure, 2, {
 
table.insert(infoObj.templateStructure, 2, {
 
label=deathLabel,
 
label=deathLabel,
data='{{{תאריך פטירה}}} <br/>{{{מקום פטירה}}}'
+
data='{{{תאריך פטירה}}}<br/>{{{מקום פטירה}}}'
 
})
 
})
 
end
 
end
שורה 247: שורה 309:  
end
 
end
   −
if frame.args['תמונה']~='-' then
+
if frame.args['תמונה'] ~= '-' then
 
addMissingImage(infoObj, birthDate, deathDate, wikidataGender)
 
addMissingImage(infoObj, birthDate, deathDate, wikidataGender)
 
end
 
end
שורה 254: שורה 316:  
function infobox(frame)
 
function infobox(frame)
 
local infoObj = Infobox:new()
 
local infoObj = Infobox:new()
frame.args['תמונה-גודל'] = frame.args['תמונה-גודל'] or '220'
+
frame.args['תמונה-גודל'] = frame.args['תמונה-גודל'] or '220'
 
infoObj:parseArgs(frame)
 
infoObj:parseArgs(frame)
 
 
if infoObj.args.title~='-' then
+
if infoObj.args.title ~= '-' then
 
addPersonDetails(frame, infoObj)
 
addPersonDetails(frame, infoObj)
 
end
 
end
 
return infoObj:render()
 
return infoObj:render()
 
end
 
end
      
return {
 
return {
משתמש אלמוני