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

מאין תקציר עריכה
מ גרסה אחת של הדף wikipedia:he:יחידה:LocationAndCountry יובאה
 
(7 גרסאות ביניים של 3 משתמשים אינן מוצגות)
שורה 96: שורה 96:
local function findClaimForTimestamp(entityId, propertyId, timestamp)
local function findClaimForTimestamp(entityId, propertyId, timestamp)
local propClaims = findSortedClaimsForProperty(entityId, propertyId)
local propClaims = findSortedClaimsForProperty(entityId, propertyId)
local bestClaim = nil
local bestClaims = {}
local bestNoTimeClaim
if propClaims then for _,eachPropClaim in ipairs(propClaims) do
if propClaims then for _,eachPropClaim in ipairs(propClaims) do
if hasValueSnak(eachPropClaim)
if hasValueSnak(eachPropClaim)
שורה 113: שורה 115:
--before = GregorianDate.convertToGregorianIfInInterval(DateUtils.extractDateFromWikidataSnak(eachPropClaim.qualifiers['P582'][1]))
--before = GregorianDate.convertToGregorianIfInInterval(DateUtils.extractDateFromWikidataSnak(eachPropClaim.qualifiers['P582'][1]))
end
end
end
end
 
if timestamp then
if timestamp then
if before and HeDateUtils.le(timestamp, before) then --the claim list is sorted by before
if after == nil and before and not HeDateUtils.le(timestamp, before) then
break
table.insert(bestClaims, eachPropClaim)
elseif after == nil and before and not HeDateUtils.le(timestamp, before) then
return eachPropClaim
elseif after and before and not HeDateUtils.le(timestamp, before) and HeDateUtils.le(timestamp, after)  then  
elseif after and before and not HeDateUtils.le(timestamp, before) and HeDateUtils.le(timestamp, after)  then  
return eachPropClaim
table.insert(bestClaims, eachPropClaim)
elseif after and before == nil and HeDateUtils.le(timestamp, after) then
elseif after and before == nil and HeDateUtils.le(timestamp, after) then
return eachPropClaim
table.insert(bestClaims, eachPropClaim)
end
end
end
end
if not bestClaim or mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(bestClaim.rank)] < mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(eachPropClaim.rank)]  
if not bestNoTimeClaim or mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(bestNoTimeClaim.rank)] < mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(eachPropClaim.rank)]  
or (mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(bestClaim.rank)] < mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(eachPropClaim.rank)] and not after) then
or (mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(bestNoTimeClaim.rank)] < mw.wikibase.entity.claimRanks['RANK_' .. mw.ustring.upper(eachPropClaim.rank)] and not after) then
bestClaim = eachPropClaim
bestNoTimeClaim = eachPropClaim
end
end
end
end
שורה 134: שורה 135:
end end
end end


if bestClaim then
if #bestClaims==0 and bestNoTimeClaim then
return bestClaim
return bestNoTimeClaim
end
if #bestClaims==1 then
return bestClaims[1]
elseif (#bestClaims>1) and timestamp then
-- disambig: return null and log it
mw.log('לא ניתן לשייך מיקום ליישות '..entityId .. ' כיוון שקיימות מספר טענות מתאימות שנכונות ל'..timestamp:toString()..'. ניתן לציין מבחין להגדרה חד ערכית.')
return nil
else
else
return nil
return nil
שורה 149: שורה 157:
local claims = nil
local claims = nil
local workingEntityId = nil
local workingEntityId = nil
local countryProperty = 'P17'
local administrativeUnitProperty = 'P131'
if type(entity) == 'table' then
if type(entity) == 'table' then
workingEntityId = entity.id
workingEntityId = entity.id
שורה 173: שורה 183:
--attempt to also load administrative unit, but only if present as a qualifier
--attempt to also load administrative unit, but only if present as a qualifier
local unitQualifier = actualClaim.qualifiers and actualClaim.qualifiers['P131'] and actualClaim.qualifiers['P131'][1]
local unitQualifier = actualClaim.qualifiers and actualClaim.qualifiers[administrativeUnitProperty] and actualClaim.qualifiers[administrativeUnitProperty][1]
if unitQualifier and unitQualifier.snaktype == 'value' then
if unitQualifier and unitQualifier.snaktype == 'value' then
table.insert(locationEntitiesIds, unitQualifier.datavalue.value.id)
table.insert(locationEntitiesIds, unitQualifier.datavalue.value.id)
שורה 180: שורה 190:
-- attempt to identify country in the qualifier first, but if it's not, go to the entity
-- attempt to identify country in the qualifier first, but if it's not, go to the entity
local countryQualifier = actualClaim.qualifiers and actualClaim.qualifiers['P17'] and actualClaim.qualifiers['P17'][1]
local countryQualifier = actualClaim.qualifiers and actualClaim.qualifiers[countryProperty] and actualClaim.qualifiers[countryProperty][1]
local countryId = nil
local countryId = nil
local ts = nil
local ts = nil
שורה 210: שורה 220:
end
end
countryClaim = findClaimForTimestamp(locationEntityId, 'P17', ts)
countryClaim = findClaimForTimestamp(locationEntityId, countryProperty, ts)
if countryClaim and countryClaim.mainsnak and countryClaim.mainsnak.snaktype == 'value' then
if countryClaim and countryClaim.mainsnak and countryClaim.mainsnak.snaktype == 'value' then
countryId = countryClaim.mainsnak.datavalue.value.id
countryId = countryClaim.mainsnak.datavalue.value.id
שורה 237: שורה 247:
]]
]]
end
end
 
-- don't show in case of missing label
if not missingEntityLabel then
if not missingEntityLabel then
table.insert(locationNamesList, locationNames[eachLocationId])
table.insert(locationNamesList, locationNames[eachLocationId])