Заглавная
Случайная
Войти
Настройки
О Валленланд Вики
Отказ от ответственности
Валленланд Вики
Найти
Редактирование:
Модуль:Wikidata/Medals
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
local WDS = require( 'Module:WikidataSelectors' ) local moduleDate = require( 'Module:Wikidata/date' ) local awardsOrder = mw.ext.data.get( "Wikidata/awards order.tab" ) local p = {} local config = { --Hide award with key QID if there is a reward with value QID absorption = { Q16675272 = 'Q654471', Q16481808 = 'Q8706404', Q1948730 = 'Q178473', Q1980962 = 'Q208167', Q2032399 = 'Q2046996', Q102183407 = 'Q103819965', Q1262166 = 'Q80589', Q749849 = 'Q1358055', Q4287121 = 'Q4137462', } } --Get string with dates from qualifiers table local function datesFromQualifier( context, options, qualifierId ) local dates = {} local qualifiers = options.qualifiers[ qualifierId ] if qualifiers then for _, qualifier in pairs( qualifiers ) do if qualifier.datavalue then local dateValue = moduleDate.formatDate( context, options, qualifier.datavalue.value ) if dateValue then table.insert( dates, dateValue ) end end end end return table.concat( dates, ', ' ) end --Property function for [[d:Property:P166]] function p.formatProperty( context, options ) if ( not context ) then error( 'context not specified' ); end; if ( not options ) then error( 'options not specified' ); end; if ( not options.entityId ) then error( 'options.entityId missing' ); end; local claims; if options.property then -- TODO: Почему тут может не быть property? claims = context.selectClaims( options, options.property ); end if claims == nil then return '' --TODO error? end -- Обход всех заявлений утверждения и с накоплением оформленых -- предпочтительных заявлений в таблице. local formattedData = {} for i, claim in ipairs( claims ) do if ( claim.mainsnak and claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.type == 'wikibase-entityid' ) then local valueId = claim.mainsnak.datavalue.value.id local formattedStatement = context.formatStatement( options, claim ) -- здесь может вернуться либо оформленный текст заявления, либо строка ошибки, либо nil if ( formattedStatement and formattedStatement ~= '' ) then formattedStatement = '<span class="wikidata-claim" data-wikidata-property-id="' .. string.upper( options.property ) .. '" data-wikidata-claim-id="' .. claim.id .. '">' .. formattedStatement .. '</span>' table.insert( formattedData, { id = valueId, html = formattedStatement, } ) end end end -- Удаление дублей (медаль + звание -> звание) for i, awardData in ipairs( formattedData ) do local isAbsorptionFound = false if config.absorption[ awardData.id ] then local absorptionAwardId = config.absorption[ awardData.id ] for _, absorptionAwardData in ipairs( formattedData ) do if absorptionAwardData.id == absorptionAwardId then isAbsorptionFound = true break end end end if isAbsorptionFound then table.remove( formattedData, i ) end end -- Сортировка медалей по старшинству local orderedData = {} local lastValue; if ( type (awardsOrder) == 'table' ) then -- Если не отсохла stuctured data for i, awardFields in ipairs( awardsOrder.data ) do local awardOrder = awardFields[ 1 ] if awardOrder == '-' then -- separator if lastValue ~= '-' then table.insert( orderedData, '<br>' ) lastHeight = nil end else for k, awardData in ipairs( formattedData ) do if awardOrder == awardData.id and not awardData.used then table.insert( orderedData, awardData.html ) formattedData[ k ].used = true end end end end end for i, awardData in ipairs( formattedData ) do if not awardData.used then table.insert( orderedData, awardData.html ) end end local lastHeight for i, awardHtml in ipairs( orderedData ) do local height = mw.ustring.match( awardHtml, 'x%d+px' ) if height and lastHeight and height ~= lastHeight then table.insert( orderedData, i, '<br>' ) end lastHeight = height end -- создание текстовой строки со списком оформленых заявлений из таблицы local out = mw.text.listToText( orderedData, options.separator, options.conjunction ) if out ~= '' then if options.before then out = options.before .. out end if options.after then out = out .. options.after end end return out end local function getImageFromProperty( entityId, propertyId ) local imageClaims = WDS.load( entityId, propertyId ) if imageClaims and #imageClaims > 0 then for _, claim in ipairs( imageClaims ) do if claim.type == 'statement' and claim.mainsnak.snaktype == 'value' then return claim.mainsnak.datavalue.value end end end return nil end -- Получение изображения (планки или иконки) и его размера function p.getImageFromEntity( entityId, actualDate ) if type( entityId ) ~= "string" then entityId = entityId.id end local image = nil local size = 'x17px' local border = false -- получение изображения планки из элемента image = getImageFromProperty( entityId, 'P2425' ) if image then border = true end -- получение иконки из элемента if not image then image = getImageFromProperty( entityId, 'P2910' ) if image then size = '40x40px' end end return image, size, border end --Value function for [[d:Property:P166]] function p.formatValue( context, options, statement ) local entityId = statement.id if not entityId then return statement end local label = mw.wikibase.getLabel( entityId ) local image, size, border = p.getImageFromEntity( entityId ) local recipientCategory = '' if not options.nocat and options.nocat ~= '' then recipientCategory = context.extractCategory( { category = 'P7084[P4224:Q24571879]' }, entityId ) if recipientCategory == '' then recipientCategory = context.extractCategory( { category = 'P2517' }, entityId ) end end local dates = '' if options.qualifiers then local startDates = {} dates = datesFromQualifier( context, options, 'P580' ) if dates ~= '' then local endDates = datesFromQualifier( context, options, 'P582' ) if endDates and endDates ~= '' then dates = dates .. ' — ' .. endDates end else dates = datesFromQualifier( context, options, 'P585' ) end if options.qualifiers.P27 then mw.log('>>>>>>>>>>>>>') for _, claim in ipairs( options.qualifiers.P27 ) do if claim and claim.datavalue and claim.datavalue.value and claim.datavalue.value.id then local categoryOptions = { category = 'P7084[P27:' .. claim.datavalue.value.id .. ']' } recipientCategory = recipientCategory .. context.extractCategory( categoryOptions, entityId ) end end end end -- получение ссылки по идентификатору и вывод планки if image then local link = mw.wikibase.getSitelink( entityId ) local out = '[[File:' .. image if border == true then out = out .. '|border' end out = out .. '|' .. size .. '|link=' -- получение ссылки из родительского элемента -- для степеней обычно только одна общая статья if not link then local partOfClaims = WDS.load( entityId, 'P361' ) -- часть от if not partOfClaims or #partOfClaims == 0 then partOfClaims = WDS.load( entityId, 'P279' ) -- подкласс от end if partOfClaims and #partOfClaims > 0 then for _, claim in ipairs( partOfClaims ) do if claim.type == 'statement' and claim.mainsnak.snaktype == 'value' then link = mw.wikibase.getSitelink( claim.mainsnak.datavalue.value.id ) if link then break end end end end end if link then out = out .. link else out = out .. 'd:' .. entityId end if label then out = out .. '|' .. label end out = out .. ']]' out = out .. recipientCategory return out end local out = context.formatValueDefault( context, options, statement ) if out and out ~= '' then if dates ~= '' then out = out .. ' (' .. dates .. ')' end return '<span style="display:inline-block; text-align:left>' .. out .. recipientCategory .. '</span>' end return '' end --Table for documentation function p.renderDoc() local out = {} for i, awardFields in ipairs( awardsOrder.data ) do local awardId = awardFields[ 1 ] local link = '[[d:' .. awardId .. '|' .. awardId .. ']]' if i == 351 then -- limits table.insert( out, '| … || … || … || … || …' ) elseif i > 351 and i < #awardsOrder.data then -- do nothing elseif awardId == '-' then -- separator table.insert( out, '|' .. i .. '|| colspan="3" | ----' ) else local image, size, border = p.getImageFromEntity( awardId ) if image then image = '[[File:' .. image if border == true then image = image .. '|border' end image = image .. '|' .. size .. ']]' else image = '' end local label = mw.wikibase.getLabel( awardId ) or '' local article = mw.wikibase.getSitelink( awardId ) if article then if label == '' then label = article end label = '[[' .. article .. '|' .. label .. ']]' end local countryStatements = mw.wikibase.getBestStatements( awardId, 'P17' ) local countries = {} if countryStatements then for _, statement in ipairs( countryStatements ) do if statement.mainsnak.datavalue and statement.mainsnak.datavalue.type == 'wikibase-entityid' then local countryId = statement.mainsnak.datavalue.value.id table.insert( countries, mw.wikibase.getLabel( countryId ) ) end end end table.insert( out, '|' .. i .. '||' .. link .. '||' .. image .. '||' .. label .. '||' .. table.concat( countries, ', ' ) ) end end return '{| class="wikitable"\n' .. '! # !! Элемент !! Планка !! Название !! Государство\n|-\n' .. table.concat( out, '\n|-\n' ) .. '\n|}' end return p
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «Валленланд Вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Валленланд Вики:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
Отменить
Справка по редактированию
(в новом окне)
Шаблон, используемый на этой странице:
Модуль:Wikidata/Medals/doc
(
править
)