יחידה:PropertyLink: הבדלים בין גרסאות בדף
מאין תקציר עריכה |
מ 8 גרסאות של הדף wikipedia:he:יחידה:PropertyLink יובאו |
||
| (34 גרסאות ביניים של 8 משתמשים אינן מוצגות) | |||
| שורה 104: | שורה 104: | ||
local formattedValue | local formattedValue | ||
local missingTranslation = false | local missingTranslation = false | ||
local fallbackLanguage = false | |||
if genderAwareEntity then | if genderAwareEntity then | ||
local gender = mw.wikibase.getBestStatements(genderAwareEntity, 'P21') -- P21 - gender | local gender = mw.wikibase.getBestStatements(genderAwareEntity, 'P21') -- P21 - gender | ||
| שורה 111: | שורה 112: | ||
gender[1].mainsnak.datavalue and | gender[1].mainsnak.datavalue and | ||
gender[1].mainsnak.datavalue.value and | gender[1].mainsnak.datavalue.value and | ||
(gender[1].mainsnak.datavalue.value["numeric-id"] == 6581072 or gender[1].mainsnak.datavalue.value["numeric-id"] == 1052281) | (gender[1].mainsnak.datavalue.value["numeric-id"] == 6581072 | ||
or gender[1].mainsnak.datavalue.value["numeric-id"] == 1052281 | |||
or gender[1].mainsnak.datavalue.value["numeric-id"] == 15145779) | |||
if isFemale then | if isFemale then | ||
| שורה 132: | שורה 135: | ||
isLocalLabel = true | isLocalLabel = true | ||
end | end | ||
if localLabel and isLocalLabel then | if localLabel and isLocalLabel then | ||
if linkTarget and localLabel and linkTarget == localLabel then | if linkTarget and localLabel and linkTarget == localLabel then | ||
| שורה 146: | שורה 148: | ||
missingTranslation = true | missingTranslation = true | ||
-- in that case we would unfourtanly can show only the entity id which is meaningless for users | -- in that case we would unfourtanly can show only the entity id which is meaningless for users | ||
if langLabel=='en' then | |||
fallbackLanguage = true | |||
formattedValue = mw.ustring.format('<span lang="en" dir="ltr">%s</span>', localLabel) | |||
else | |||
formattedValue = mw.ustring.format( "[[:d:%s|%s]]", entityId, entityId ) | |||
end | |||
end | end | ||
return formattedValue, missingTranslation | return formattedValue, missingTranslation, fallbackLanguage | ||
end | end | ||
| שורה 158: | שורה 165: | ||
local warnings = '' | local warnings = '' | ||
for _, optionalQualifier in pairs( qualifiers ) do | for _, optionalQualifier in pairs( qualifiers ) do | ||
if optionalQualifier and property.qualifiers[ | -- handling case of "first or default" qualifier (e.g.: for 'P1/P2' take P1 if exists, otherwise - P2) | ||
for selectableQualifier in string.gmatch(optionalQualifier, '[^/]+') do | |||
if selectableQualifier and property.qualifiers[selectableQualifier] then | |||
local optionalQualifierVal = mw.wikibase.formatValues(property.qualifiers[selectableQualifier]) | |||
local isQualLocalLabel = true | |||
if optionalQualifierVal and property.qualifiers[selectableQualifier][1] and property.qualifiers[selectableQualifier][1]['datatype']=='wikibase-item' then | |||
for i, optionalQValues in ipairs(property.qualifiers[selectableQualifier]) do | |||
local qualLabel, qualLang = mw.wikibase.getLabelWithLang( optionalQValues['datavalue']['value']['id'] ) | |||
isQualLocalLabel = isQualLocalLabel and (qualLang=='he') | |||
end | |||
end | end | ||
if optionalQualifierVal then | |||
local formattedValue = '<span title="'.. mw.wikibase.label(selectableQualifier)..'" class="propertylink-wikidata-qualifier">'..mw.wikibase.formatValues(property.qualifiers[selectableQualifier]) ..'</span>' | |||
local formattedValue = '<span title="'.. mw.wikibase.label( | |||
table.insert(formmatedQualifiers, formattedValue) | table.insert(formmatedQualifiers, formattedValue) | ||
break -- found first available value | |||
end | end | ||
elseif string.sub(selectableQualifier, 1, 1) ~= 'P' then | |||
table.insert(formmatedQualifiers, selectableQualifier) | |||
break -- found first available value | |||
end | end | ||
end | end | ||
| שורה 227: | שורה 237: | ||
if frame.args['entity']==nil then return end | if frame.args['entity']==nil then return end | ||
end | end | ||
return getProperty(string.upper(frame.args[1]), (frame.args[2] and string.len(frame.args[2])>0) or false, true, frame.args['entity']) | return getProperty(string.upper(frame.args[1]), (frame.args[2] and string.len(frame.args[2])>0) or false, true, frame.args['entity'], frame.args['sep'], frame.args['q']) | ||
end | end | ||
| שורה 283: | שורה 293: | ||
options['img-width'] = options['img-width'] or '250px' | options['img-width'] = options['img-width'] or '250px' | ||
options['source'] = options['source'] or false | options['source'] = options['source'] or false | ||
options['filter'] = options['filter'] or nil | |||
options['sort'] = options['sort'] or 'P1545' | |||
local propertyVals = mw.wikibase.getBestStatements(entityId, propertyName) | local propertyVals = mw.wikibase.getBestStatements(entityId, propertyName) | ||
if (not propertyVals) or (#propertyVals==0) then return end --no such property for this item | if (not propertyVals) or (#propertyVals==0) then return end --no such property for this item | ||
local resTable = {} | local resTable = {} | ||
local missingTranslation = false | local missingTranslation = 0 | ||
local hasFallbackTransation = false | |||
local sortByQualifier = function(t1, t2) | |||
if t1 and t2 then | |||
local q1 = t1.qualifiers | |||
local q2 = t2.qualifiers | |||
local c1 = nil | |||
local c2 = nil | |||
if q1 and q2 then | |||
if q1[options['sort']] and q1[options['sort']][1] and q1[options['sort']][1].datavalue and q1[options['sort']][1].datavalue.value then | |||
if q1[options['sort']][1].datavalue.type == 'string' then | |||
c1 = q1[options['sort']][1].datavalue.value | |||
elseif q1[options['sort']][1].datavalue.type == 'quantity' then | |||
c1 = q1[options['sort']][1].datavalue.value.amount | |||
elseif q1[options['sort']][1].datavalue.type == 'time' then | |||
c1 = q1[options['sort']][1].datavalue.value.time | |||
end | |||
end | |||
if q2[options['sort']] and q2[options['sort']][1] and q2[options['sort']][1].datavalue and q2[options['sort']][1].datavalue.value then | |||
if q2[options['sort']][1].datavalue.type == 'string' then | |||
c2 = q2[options['sort']][1].datavalue.value | |||
elseif q2[options['sort']][1].datavalue.type == 'quantity' then | |||
c2 = q2[options['sort']][1].datavalue.value.amount | |||
elseif q2[options['sort']][1].datavalue.type == 'time' then | |||
c2 = q2[options['sort']][1].datavalue.value.time | |||
end | |||
end | |||
if c1 and c2 then | |||
return c1<c2 | |||
elseif c1 then | |||
return true | |||
elseif c2 then | |||
return false | |||
end | |||
elseif q1 then | |||
return true | |||
elseif q2 then | |||
return false | |||
end | |||
else | |||
if t1 then | |||
return true | |||
end | |||
if t2 then | |||
return false | |||
end | |||
end | |||
return false | |||
end | |||
if options['sort'] then | |||
table.sort(propertyVals, sortByQualifier) | |||
end | |||
if options['filter'] then | |||
propertyVals = options['filter'](propertyVals) | |||
end | |||
for i, property in ipairs(propertyVals) do | for i, property in ipairs(propertyVals) do | ||
local propValue = property.mainsnak and property.mainsnak.datavalue | local propValue = property.mainsnak and property.mainsnak.datavalue | ||
| שורה 301: | שורה 370: | ||
local isImage = (property.mainsnak.datatype == 'commonsMedia') | local isImage = (property.mainsnak.datatype == 'commonsMedia') | ||
if propValue['type'] == 'wikibase-entityid' then | if propValue['type'] == 'wikibase-entityid' then | ||
local formattedValue, valueMissingTranslation = formatEntity( | local formattedValue, valueMissingTranslation, fallbackLang = formatEntity( propValue.value['id'], options['entity-gender-aware'] and entityId) | ||
if not valueMissingTranslation then | if not valueMissingTranslation or fallbackLang then | ||
hasFallbackTransation = hasFallbackTransation or fallbackLang | |||
if formattedValue then | if formattedValue then | ||
formattedValue = formattedValue .. formatOptionalQualifiers(property, options['qualifiers'], options['qualifiers-sep']) | formattedValue = formattedValue .. formatOptionalQualifiers(property, options['qualifiers'], options['qualifiers-sep']) | ||
end | end | ||
if options['source'] and property.references then | |||
formattedValue = formattedValue.. refStatement(property) | |||
end | |||
table.insert(resTable, formattedValue) | table.insert(resTable, formattedValue) | ||
else | else | ||
missingTranslation = | missingTranslation = missingTranslation + 1 | ||
end | end | ||
elseif propValue['type'] == 'string' then | elseif propValue['type'] == 'string' then | ||
| שורה 365: | שורה 438: | ||
end | end | ||
end | end | ||
if globe then | if globe then | ||
formattedValue = frame:expandTemplate{ title = 'Coord', args = { propValue.value.latitude, propValue.value.longitude, globe, display = options['coord-display'] or 'inline' } } | local northSouth = (propValue.value.latitude>=0 and 'N') or 'S' | ||
local eastWest = (propValue.value.longitude>=0) and 'E' or 'W' | |||
formattedValue = frame:expandTemplate{ title = 'Coord', args = { math.abs(propValue.value.latitude), northSouth, math.abs(propValue.value.longitude), eastWest, globe, display = options['coord-display'] or 'inline' } } | |||
else | else | ||
formattedValue = frame:expandTemplate{ title = 'Coord', args = { propValue.value.latitude, propValue.value.longitude, display = options['coord-display'] or 'inline' } } | formattedValue = frame:expandTemplate{ title = 'Coord', args = { propValue.value.latitude, propValue.value.longitude, display = options['coord-display'] or 'inline' } } | ||
| שורה 380: | שורה 454: | ||
end | end | ||
if missingTranslation then | if missingTranslation > 0 and #resTable> 0 then | ||
if missingTranslation == 1 then | |||
table.insert(resTable, 'בפסקה זו רשומה אחת נוספת שטרם תורגמה') | |||
else | |||
table.insert(resTable, 'בפסקה זו '..missingTranslation..' רשומות נוספות שטרם תורגמו') | |||
end | |||
end | |||
-- bidi isolation - properly show mix or RTL and LTR statements | -- bidi isolation - properly show mix or RTL and LTR statements | ||
| שורה 392: | שורה 472: | ||
if needIsolation then resTable = isolateValues end | if needIsolation then resTable = isolateValues end | ||
end | end | ||
local result = '' | |||
-- special case * - listify | -- special case * - listify | ||
if options['seperator'] == '*' and #resTable>1 then | if options['seperator'] == '*' and #resTable>1 then | ||
result = '*' .. table.concat( resTable, '\n*' ) | |||
else | else | ||
result = table.concat( resTable, options['seperator'] ) | |||
end | end | ||
if hasFallbackTransation or (missingTranslation > 0 ) then | |||
result = result .. missingLabelCategory( propertyName ) | |||
end | |||
return result | |||
end | end | ||
| שורה 411: | שורה 496: | ||
if propValue['type'] == 'wikibase-entityid' then | if propValue['type'] == 'wikibase-entityid' then | ||
local label, lang = mw.wikibase.label( | local label, lang = mw.wikibase.label( propValue.value['id'] ) | ||
return label | return label | ||
elseif propValue['type'] == 'string' then | elseif propValue['type'] == 'string' then | ||
| שורה 421: | שורה 506: | ||
function label( frame ) | function label( frame ) | ||
return getLabel( string.upper(frame.args[1] )) | return getLabel( string.upper(frame.args[1] )) | ||
end | |||
function getItem( propertyName, entityId ) | |||
local entity = entityId or mw.wikibase.getEntityIdForCurrentPage() | |||
if not entity then return end--the entity doesnt exist or have no claims | |||
local property = mw.wikibase.getBestStatements(entity, propertyName) | |||
if not property or not property[1] then return end --no such property for this item | |||
property = property[1] | |||
local propValue = property.mainsnak.datavalue | |||
if not propValue then return '' end --property doesnt exist | |||
return propValue.value['id'] | |||
end | |||
-- Return the Item for property, or the item of the linked entiy of that property | |||
function item( frame ) | |||
return getItem( string.upper(frame.args[1] )) | |||
end | end | ||
| שורה 452: | שורה 555: | ||
return 1 | return 1 | ||
end | end | ||
-- returns the wikidata Qid, if exists, "" otherwise | |||
function getPageEntry(frame) | |||
return mw.wikibase.getEntityIdForTitle(string.upper(frame.args[1] )) | |||
end | |||
function getSitelinksFromQid(frame) | |||
resTable = mw.wikibase.getEntity(string.upper(frame.args[1] )) | |||
resTable = resTable["sitelinks"] | |||
s= "<table>\n" | |||
for k,v in pairs(resTable) do | |||
if v.title then | |||
s=s.."<tr>".. "<td>" .. k.."</td>".. "<td>" .. v.title.."</td>".."</tr>" .. "\n" | |||
end | |||
end | |||
return s .. "</table>" | |||
end | |||
local function createInterwikiForQid(frame) | |||
local raw = mw.wikibase.getEntity( string.upper( frame.args[1] ) )["sitelinks"] | |||
local interwikis = '' | |||
for site, val in pairs(raw) do | |||
truncated, found = string.gsub(site, 'wiki$', '') | |||
truncated = string.gsub(truncated, '_', '-') | |||
if found == 1 and truncated ~= 'he' and truncated ~= 'commons' then interwikis = interwikis .. '[[' .. truncated .. ':' .. val.title .. ']]' end | |||
end | |||
return interwikis | |||
end | |||
return { | return { | ||
| שורה 458: | שורה 590: | ||
label = label, | label = label, | ||
['תווית'] = label, | ['תווית'] = label, | ||
item = item, | |||
['פריט'] = item, | |||
formatEntity = formatEntity, | formatEntity = formatEntity, | ||
property = property, | property = property, | ||
| שורה 465: | שורה 599: | ||
getPropertyByOptions = getPropertyByOptions, | getPropertyByOptions = getPropertyByOptions, | ||
getPropertyQualifier = getPropertyQualifier, | getPropertyQualifier = getPropertyQualifier, | ||
getItem = getItem, | |||
getImageLink = getImageLink, | getImageLink = getImageLink, | ||
getLabel = getLabel, | getLabel = getLabel, | ||
hasEntry = hasEntry, | hasEntry = hasEntry, | ||
getPageEntry = getPageEntry, | |||
getSitelinksFromQid = getSitelinksFromQid, | |||
createInterwikiForQid = createInterwikiForQid, | |||
['יש פריט'] = hasEntry | ['יש פריט'] = hasEntry | ||
} | } | ||