Редактирование:
Модуль: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
(
править
)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Тёмная тема
Вклад
Создать учётную запись
Войти
Пространства имён
Модуль
Обсуждение
English
Просмотры
Читать
Править код
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице
Получить короткий URL