Модуль:Wikidata
Используется в {{Wikidata}}.
local i18n = { ["errors"] = { ["property-param-not-provided"] = "Не дан параметр свойства", ["entity-not-found"] = "Сущность не найдена.", ["unknown-claim-type"] = "Неизвестный тип заявления.", ["unknown-snak-type"] = "Неизвестный тип снэка.", ["unknown-datavalue-type"] = "Неизвестный тип значения данных.", ["unknown-entity-type"] = "Неизвестный тип сущности.", ["unknown-value-module"] = "Вы должны установить и значение-модуль, и значение-функцию.", ["value-module-not-found"] = "Модуль, на который указывает значение, не найден.", ["value-function-not-found"] = "Функция, на которую указывает значение, не найдена." }, ["somevalue"] = "", ["novalue"] = ""}function getEntityFromId( id ) if id then return mw.wikibase.getEntityObject( id ) end return mw.wikibase.getEntityObject()endfunction getEntityIdFromValue( value ) local prefix = '' if value['entity-type'] == 'item' then prefix = 'Q' elseif value['entity-type'] == 'property' then prefix = 'P' else return formatError( 'unknown-entity-type' ) end return prefix .. value['numeric-id']endfunction formatError( key ) return '<span class="error">' .. i18n.errors[key] .. '</span>'endfunction formatStatements( options ) if not options.property then return formatError( 'property-param-not-provided' ) end --Get entity local entity = getEntityFromId( options.entityId ) if not entity then return -- formatError( 'entity-not-found' ) end if (entity.claims == nil) or (not entity.claims[string.upper(options.property)]) then return '' --TODO error? end --Format statement and concat them cleanly local formattedStatements = {} for i, statement in pairs( entity.claims[string.upper(options.property)] ) do table.insert( formattedStatements, formatStatement( statement, options ) ) end return mw.text.listToText( formattedStatements, options.separator, options.conjunction )endfunction formatStatement( statement, options ) if not statement.type or statement.type ~= 'statement' then return formatError( 'unknown-claim-type' ) end return formatSnak( statement.mainsnak, options ) --TODO reference and qualifiersendfunction formatSnak( snak, options ) if snak.snaktype == 'somevalue' then return i18n['somevalue'] elseif snak.snaktype == 'novalue' then return i18n['novalue'] elseif snak.snaktype == 'value' then return formatDatavalue( snak.datavalue, options ) else return formatError( 'unknown-snak-type' ) endendfunction formatGlobeCoordinate( value, options ) if options['subvalue'] == 'latitude' then return value['latitude'] elseif options['subvalue'] == 'longitude' then return value['longitude'] else local eps = 0.0000001 -- < 1/360000 local globe = '' -- TODO local lat = {} lat['abs'] = math.abs(value['latitude']) lat['ns'] = value['latitude'] >= 0 and 'N' or 'S' lat['d'] = math.floor(lat['abs'] + eps) lat['m'] = math.floor((lat['abs'] - lat['d']) * 60 + eps) lat['s'] = math.max(0, ((lat['abs'] - lat['d']) * 60 - lat['m']) * 60) local lon = {} lon['abs'] = math.abs(value['longitude']) lon['ew'] = value['longitude'] >= 0 and 'E' or 'W' lon['d'] = math.floor(lon['abs'] + eps) lon['m'] = math.floor((lon['abs'] - lon['d']) * 60 + eps) lon['s'] = math.max(0, ((lon['abs'] - lon['d']) * 60 - lon['m']) * 60) local coord = '{{coord' if (value['precision'] == nil) or (value['precision'] < 1/60) then -- по умолчанию с точностью до секунды coord = coord .. '|' .. lat['d'] .. '|' .. lat['m'] .. '|' .. lat['s'] .. '|' .. lat['ns'] coord = coord .. '|' .. lon['d'] .. '|' .. lon['m'] .. '|' .. lon['s'] .. '|' .. lon['ew'] elseif value['precision'] < 1 then coord = coord .. '|' .. lat['d'] .. '|' .. lat['m'] .. '|' .. lat['ns'] coord = coord .. '|' .. lon['d'] .. '|' .. lon['m'] .. '|' .. lon['ew'] else coord = coord .. '|' .. lat['d'] .. '|' .. lat['ns'] coord = coord .. '|' .. lon['d'] .. '|' .. lon['ew'] end coord = coord .. '|globe:' .. globe if options['display'] then coord = coord .. '|display=' .. options.display else coord = coord .. '|display=title' end coord = coord .. '}}' return g_frame:preprocess(coord) endendfunction formatDatavalue( datavalue, options ) --Use the customize handler if provided if options['value-module'] or options['value-function'] then if not options['value-module'] or not options['value-function'] then return formatError( 'unknown-value-module' ) end local formatter = require ('Module:' .. options['value-module']) if formatter == nil then return formatError( 'value-module-not-found' ) end local fun = formatter[options['value-function']] if fun == nil then return formatError( 'value-function-not-found' ) end return fun( datavalue.value, options ) end --Default formatters if datavalue.type == 'wikibase-entityid' then return formatEntityId( getEntityIdFromValue( datavalue.value ), options ) elseif datavalue.type == 'string' then return datavalue.value --TODO ids + media elseif datavalue.type == 'globecoordinate' then return formatGlobeCoordinate( datavalue.value, options ) elseif datavalue.type == 'quantity' then return datavalue.value['amount'] else return formatError( 'unknown-datavalue-type' ) endendfunction formatEntityId( entityId, options ) local label = mw.wikibase.label( entityId ) if ( 'true' == options.plain and label ) then return label end local link = mw.wikibase.sitelink( entityId ) if link then if label then return '[[' .. link .. '|' .. label .. ']]' else return '[[' .. link .. ']]' end end if label then return label end-- not good, but better than nothingreturn '[[d:' .. entityId .. '|' .. entityId .. ']]<span style="border-bottom: 1px dotted; cursor: help; white-space: nowrap" title="На Викиданных нет русской подписи к элементу. Вы можете помочь, указав русский вариант подписи.">?</span>[[Категория:Википедия:Статьи со ссылками на элементы Викиданных без русской подписи]]';endlocal p = {}function p.formatStatements( frame ) g_frame = frame local args = frame.args --If a value if already set, use it if args.value and args.value ~= '' then return args.value end return formatStatements( frame.args )endreturn p
🔥 Top keywords: Сүрүн сирэй.neВалюта бэлиэтэАан дойду иккис сэриитэБикипиэдьийэАрассыыйа федерациятын социальнай каартатаwerzmqei6mАналлаах:КөрдөөһүнБикипиэдьийэ:Бүк охсунууE-mailq7n8fБикипиэдьийэ:Саҕалааччыларга көмөБикипиэдьийэ:Бу туһунанЭҕэрдэ сурукЫһыахСахалыы ааттарБэс ыйын 18Былатыан Ойуунускай.bhҮөрэ отоЭдьиий ДораCOVID-19Өй-санааСкворецтыҥылар кэргэннэрэАшвагандаБикипиэдьийэ:Түргэн индексКарпов Вячеслав Павлович800Мигалкин Иван ВасильевичБикипиэдьийэ:Түмсүү сирэАналлаах:Саҥа уларытыыӨксөкүлээх ӨлөксөйДыгын оонньуулараОйуун эттэниитэСаха тылаӨй-санаа уларыйарХомусХагдаҥ эһэ