יחידה:גיל לערכי אישים: הבדלים בין גרסאות בדף

מאין תקציר עריכה
מ 5 גרסאות של הדף wikipedia:he:יחידה:גיל_לערכי_אישים יובאו
 
(36 גרסאות ביניים של 11 משתמשים אינן מוצגות)
שורה 9: שורה 9:
local isValidDate, res = pcall(dateParser.newFromWikitext, Date)
local isValidDate, res = pcall(dateParser.newFromWikitext, Date)
local errors = ''
local errors = ''
if not isValidDate then
if isValidDate and dateParser.age(res).year<0 then
-- invalid date
-- date is in the future
errors = frame:expandTemplate{ title = 'גיל לערכי אישים/בעיה', args = {
['מקורב']=ApproxDate,
['נוסף']=Date,
['מחרוזת']=Date
} }
-- validate
elseif dateParser.age(res)<0 then  
isValidDate = false
isValidDate = false
local title = mw.title.getCurrentTitle()
local title = mw.title.getCurrentTitle()
if title.namespace==0 then
if title.namespace==0 then
errors = Errors['future-date']-- date is in the future
errors = Errors['future-date']
else
else
errors = '<!--' .. Errors['future-date'] .. '-->'
errors = '<!--' .. Errors['future-date'] .. '-->'
end
end
elseif not isValidDate or res.precision < dateParser.PRECISION.YEAR then
-- date is either invalid or is imprecise
isValidDate = false -- mark as invalid anyway, even if "only" imprecise
errors = frame:expandTemplate{ title = 'גיל לערכי אישים/בעיה', args = {
['מקורב']=ApproxDate,
['נוסף']=Date,
['מחרוזת']=Date
} }
end
end
return isValidDate, res, errors
return isValidDate, res, errors
שורה 31: שורה 31:


function consistentWithWikidata(localDate, wikidataClaim)
function consistentWithWikidata(localDate, wikidataClaim)
wikidataClaim = wikidataClaim and wikidataClaim[1] and  wikidataClaim[1].mainsnak and wikidataClaim[1].mainsnak.datavalue and wikidataClaim[1].mainsnak.datavalue.value
local possibleDate, possibleDateValue, isConsistent
if not wikidataClaim then
if not wikidataClaim then
return true
return true
end
end
local iswikidataValid, wikidataDate = pcall(dateParser.newFromWikidataValue, wikidataClaim)
isConsistent = true
if iswikidataValid and localDate.calendar == wikidataDate.calendar then
for i,possibleDate in ipairs(wikidataClaim) do
if (localDate.year ~= wikidataDate.year and wikidataClaim.precision>=dateParser.PRECISION.YEAR) or  
if possibleDate.mainsnak and possibleDate.mainsnak.datavalue and possibleDate.mainsnak.datavalue.value then
  (localDate.month ~= wikidataDate.month and wikidataClaim.precision>=dateParser.PRECISION.MONTH) or  
possibleDateValue = possibleDate.mainsnak.datavalue.value
  (localDate.day ~= wikidataDate.day and wikidataClaim.precision>=dateParser.PRECISION.DAY)  then
local iswikidataValid, wikidataDate = pcall(dateParser.newFromWikidataValue, possibleDateValue)
return false
if iswikidataValid and localDate.calendar == wikidataDate.calendar then
end
if (localDate.year ~= wikidataDate.year and possibleDateValue.precision>=dateParser.PRECISION.YEAR) or  
end
  (localDate.month ~= wikidataDate.month and possibleDateValue.precision>=dateParser.PRECISION.MONTH) or  
  return true
  (localDate.day ~= wikidataDate.day and possibleDateValue.precision>=dateParser.PRECISION.DAY)  then
isConsistent = false
else
isConsistent = true
break
end
end
end
end
 
  return isConsistent
end
end


function ageCalc(frame)
function ageCalcFromFrame(frame)
local args = Arguments.getArgs(frame, { ['trim'] = true, ['removeBlanks'] = true })
local args = Arguments.getArgs(frame, { ['trim'] = true, ['removeBlanks'] = true })
--local age_string = args['מציין']
local BirthDateStr = args['תאריך לידה']
local BirthDateStr = args['תאריך לידה']
local DeathDateStr = args['תאריך פטירה']
local DeathDateStr = args['תאריך פטירה']
שורה 54: שורה 65:
local Brackets = args['סוגריים']
local Brackets = args['סוגריים']
local ApproxDate = args['מקורב']
local ApproxDate = args['מקורב']
DisplayForAlive = (DisplayForAlive=='כן')
DisplayForDead = (DisplayForDead=='כן')
Brackets = (Brackets~='לא')
return ageCalc(BirthDateStr, DeathDateStr, DisplayForAlive, DisplayForDead, Brackets, ApproxDate)
end
function ageCalc(BirthDateStr, DeathDateStr, DisplayForAlive, DisplayForDead, Brackets, ApproxDate, gender)
local frame = mw.getCurrentFrame()
local warnings = {}
local warnings = {}
local dateRangeStr
local dateRangeStr
local wikidataBirth, wikidataDeath
local wikidataBirth, wikidataDeath
DisplayForAlive = (DisplayForAlive=='כן')
if BirthDateStr == '' then BirthDateStr = nil end
DisplayForDead = (DisplayForDead=='כן')
if DeathDateStr == '' then DeathDateStr = nil end
Brackets = (Brackets~='לא')
local entityId = mw.wikibase.getEntityIdForCurrentPage()
wikidataBirth = entityId and mw.wikibase.getBestStatements( entityId, 'P569' )
local entity = mw.wikibase.getEntityObject()
wikidataDeath = entityId and wikidataBirth and mw.wikibase.getBestStatements( entityId, 'P570' )
wikidataBirth = entity and entity.claims and entity.claims['P569'] and entity:getBestStatements('P569')
wikidataDeath = entity and entity.claims and entity.claims['P569'] and entity:getBestStatements('P570')


BirthDateStr = BirthDateStr or (wikidataBirth and entity:formatPropertyValues( 'P569' ).value)
BirthDateStr = BirthDateStr or ((wikidataBirth and #wikidataBirth>0 and mw.wikibase.renderSnak( wikidataBirth[1].mainsnak ) or nil))
-- validate dates are valid
-- validate dates are valid
if not BirthDateStr then
if not BirthDateStr then
return -- missing date, nothing to do
return -- missing date, nothing to do
end
end
DeathDateStr = DeathDateStr or (wikidataDeath and entity:formatPropertyValues( 'P570' ).value)
DeathDateStr = DeathDateStr or ((wikidataDeath and #wikidataDeath>0 and mw.wikibase.renderSnak( wikidataDeath[1].mainsnak ) or nil))
if DeathDateStr =='' then DeathDateStr = nil end
if DeathDateStr =='' then DeathDateStr = nil end
local IsDead = (DeathDateStr~=nil)
local IsDead = (DeathDateStr~=nil)
שורה 84: שורה 102:
end
end
if wikidataBirth and wikidataBirth[1] and wikidataBirth[1].mainsnak  then
if wikidataBirth and wikidataBirth[1] and wikidataBirth[1].mainsnak  then
--local iswikidataValid, wikidataBirthDate = pcall(dateParser.newFromWikidataValue, wikidataBirth[1].mainsnak)
if not consistentWithWikidata(BirthDate, wikidataBirth) then
if not consistentWithWikidata(BirthDate, wikidataBirth) then
table.insert(warnings, '[[קטגוריה:דפים עם שנות חיים שלא תואמים את ויקינתונים]]')
table.insert(warnings, '[[קטגוריה:דפים עם שנות חיים שלא תואמים את ויקינתונים]]')
end
end
end
end
-- skip age calculation if we dont have enough precision
if BirthDate.precision < dateParser.PRECISION.YEAR then return nil end
local DeathDate
local DeathDate
שורה 103: שורה 123:
else
else
prefix = frame:expandTemplate{ title = 'לפי מגדר/בדוק', args = { 'בן&nbsp;', 'בת&nbsp;' } }
if gender == nil and entityId~=nil then
local PropertyLink = require('Module:PropertyLink')
gender = PropertyLink.getItem( 'P21', entityId )
if (gender == "Q6581097") then -- male
gender = 'זכר'
elseif (gender == "Q2449503") then -- transgender male
gender = 'זכר'
elseif (gender == "Q15145778") then -- cisgender male
gender = 'זכר'
elseif (gender == "Q6581072") then -- female
gender = 'נקבה'
elseif (gender == "Q1052281") then -- transgender female
gender = 'נקבה'
elseif (gender == "Q15145779") then -- cisgender female
gender = 'נקבה'
end
end
prefix = 'גיל:&nbsp;'
if gender == 'נקבה' then
prefix = 'בת&nbsp;'
elseif gender == 'זכר' then
prefix = 'בן&nbsp;'
end
end
end
-- skip age calculation if we dont have enough precision
if DeathDate and DeathDate.precision and DeathDate.precision < dateParser.PRECISION.YEAR then return nil end
local success, Age = pcall(dateParser.age, BirthDate , DeathDate)
if success then
AgeYears = Age.year
if Age.year <= 0 then
if Age.month == 1 then
result = prefix..'חודש'
elseif Age.month == 2 then
result  = prefix..'חודשיים'
else
result = prefix..tostring(Age.month)..' חודשים'
end
if Age.day > 0 then
if Age.day == 1 then
result = result..' ויום'
elseif Age.day == 2 then
result = result..' ויומיים'
else
result = result..'  ו־'..tostring(Age.day)..' ימים'
end
end
elseif Age.year < 3 then
if Age.year == 1 then
result = prefix..'שנה'
elseif Age.year == 2 then
result = prefix..'שנתיים'
end
if Age.month == 0 then
if Age.day > 0 then
if Age.day == 1 then
result = result..' ויום'
elseif Age.day == 2 then
result = result..' ויומיים'
else
result = result..'  ו־'..tostring(Age.day)..' ימים'
end
end
elseif Age.month == 1 then
result = result..' וחודש'
elseif Age.month == 2 then
result  = result..' וחודשיים'
else
result = result..' ו־'..tostring(Age.month)..' חודשים'
end
else
result = prefix..tostring(Age.year)
end


local success, AgeYears = pcall(dateParser.age, BirthDate , DeathDate)
if success then
if BirthDate.precision < dateParser.PRECISION.MONTH or (DeathDate and DeathDate.precision < dateParser.PRECISION.MONTH) then
result = prefix..tostring(AgeYears)
result = result .. ' בערך'
if AgeYears > 139 then  
end
table.insert(warnings, Errors['future-date'])
elseif AgeYears>109 then  
-- ignore warning in specific template
table.insert(warnings, '[[קטגוריה:אישים שהגיעו לגיל 110]]')
local noAgeWarning = false
elseif AgeYears>100 then
if mw.getCurrentFrame():getParent():getTitle() == 'תבנית:אישיות תנ"כית' or mw.getCurrentFrame():getParent():getTitle() == 'תבנית:בעל חיים מפורסם' then
table.insert(warnings, '[[קטגוריה:אישים שהגיעו לגיל מאה]]')
noAgeWarning = true
end
local title = mw.title.getCurrentTitle()
-- ignore warning in other namespace except the main NS
if title.namespace==0 and not noAgeWarning then
if AgeYears > 139 then  
local instanceOf = entityId and mw.wikibase.getBestStatements( entityId, 'P31' )
local isHuman = instanceOf and instanceOf[1].mainsnak and instanceOf[1].mainsnak.datavalue.value.id=='Q5'
if isHuman then
table.insert(warnings, Errors['future-date'])
end
elseif AgeYears>109 then  
table.insert(warnings, '[[קטגוריה:אישים שהגיעו לגיל 110]]')
elseif AgeYears>99 then
table.insert(warnings, '[[קטגוריה:אישים שהגיעו לגיל מאה]]')
end
end
end
else
else
שורה 124: שורה 232:
} }
} }
end
end
 
warnings = table.concat( warnings, '')
warnings = table.concat( warnings, '')
if #warnings > 0 then
warnings = string.format('%s ', warnings)
end
if Brackets then
if Brackets then
result = string.format(' (%s)', result)
result = string.format(' (%s)', result)
end
end
return string.format('%s <span style="white-space: nowrap;">%s</span>', warnings, result)
return string.format('%s<span style="white-space: nowrap;">%s</span>', warnings, result)
end
end




return {
return {
['גיל'] = ageCalc
['גיל'] = ageCalcFromFrame,
ageCalc = ageCalc
}
}