Модуль:Wikidata/redLink

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
Документация

Для реализации {{нет статьи}}, простановки красных ссылок модулем Wikidata (дубликата части шаблона {{iw}} с допфункционалом).

Тесты

5 тестов из 20 провалено.

test_formatRedLinkFromTemplate
ТестОжидаемое значениеФактическое значение
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate }}Не указан элемент ВикиданныхНе указан элемент Викиданных
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q6 }}Нет метки у элемента Q6Нет метки у элемента Q6
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q42 }}Дуглас АдамсДуглас Адамс
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q42 | Дуглас Ноэль Адамс }}Дуглас Ноэль АдамсДуглас Ноэль Адамс
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q2 | Земля }}ЗемляЗемля
N{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q3124803 | HD 23985 }}HD 23985[вд]HD 23985[вд]
N{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q100712902 | Я. Венник }}Я. Венник[вд]Я. Венник[вд]
N{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q84437742 | LDS 5078 }}LDS 5078[вд]LDS 5078[вд]
✔{{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q74169392 | [GS55] 204 }}[GS55] 204[GS55] 204
test_getBioInfobox
ТестОжидаемое значениеФактическое значение
✔getBioInfobox()ПерсонаПерсона
✔getBioInfobox('Q81840636')ПерсонаПерсона
✔getBioInfobox('Q40192238')УчёныйУчёный
test_getInfobox
ТестОжидаемое значениеФактическое значение
✔getInfobox()Универсальная карточкаУниверсальная карточка
✔getInfobox('Q6')Универсальная карточкаУниверсальная карточка
✔getInfobox('Q1')Универсальная карточкаУниверсальная карточка
✔getInfobox('Q35762485')Универсальная карточкаУниверсальная карточка
✔getInfobox('Q42')ПерсонаПерсона
NgetInfobox('Q3427')ЗвездаУниверсальная карточка
NgetInfobox('Q4869')ГалактикаУниверсальная карточка
✔getInfobox('Q42', 'Писатель')ПисательПисатель
local p = {};function p.formatRedLink(title, text, entityId, infobox)if infobox == nil or infobox == '' theninfobox = 'Универсальная карточка'endlocal qPreloadparams = 'preloadparams%%5B%%5D'local url = mw.title.new( title ):fullUrl( string.format('action=edit&editintro=T:Нет_статьи/editintro&preload=T:Нет_статьи/preload&' .. qPreloadparams .. '=%s&' .. qPreloadparams .. '=%s&' .. qPreloadparams .. '=%s',entityId,mw.uri.encode( title ),mw.uri.encode( infobox )) )local templatestyles = mw.getCurrentFrame():extensionTag{name = 'templatestyles',args = {src = 'Module:Wikidata/redLink/styles.css',}}return templatestyles .. string.format('<span class="ts-Wikidata-redLink plainlinks">[%s %s]</span><sup class="noprint">[[:d:%s#sitelinks-wikipedia|<span>[вд]</span>]]</sup>',url,mw.text.nowiki( text ),entityId)endfunction p.formatRedLinkWithInfobox(title, text, entityId, defaultInfobox)return p.formatRedLink(title, text, entityId, p.getInfobox(entityId, defaultInfobox))endfunction p.getInfobox(entityId, defaultInfobox)if defaultInfobox thenreturn defaultInfoboxendif entityId thenlocal result = mw.wikibase.getBestStatements(entityId, 'P31')for _, statement in pairs(result) doif statement.mainsnak.datavalue thenlocal type = statement.mainsnak.datavalue.value.idiftype == 'Q5'then return p.getBioInfobox(entityId)elseiftype == 'Q523'then return 'Звезда'elseiftype == 'Q318'then return 'Галактика'endendendendreturn 'Универсальная карточка'endfunction p.getBioInfobox(entityId)if entityId thenlocal result = mw.wikibase.getBestStatements(entityId, 'P106')for _, statement in pairs(result) doif statement.mainsnak.datavalue thenlocal occupation = statement.mainsnak.datavalue.value.idif occupation == 'Q901' then return 'Учёный'endendendendreturn 'Персона'endfunction p.formatRedLinkFromTemplate(frame)local args = frame['args']if not args[1] then -- may be arguments are passed from the parent template?args = frame:getParent().argsendif not args[1] thenreturn '<span class="error">Не указан элемент Викиданных</span>'endlocal entityId = mw.text.trim(args[1])local title = mw.wikibase.label(entityId)if not title thenreturn mw.ustring.format('<span class="error">Нет метки у элемента %s</span>', entityId)elseif mw.ustring.match(title, '[%[%]:]') then -- cannot create page with this namereturn titleendlocal text = titleif args[2] thentext = mw.text.trim(args[2])endlocal sitelink = mw.wikibase.sitelink(entityId)if sitelink thenif text == sitelink thenreturn '[[' .. sitelink .. ']]'elsereturn '[[' .. sitelink .. '|' .. text .. ']]'endendreturn p.formatRedLinkWithInfobox(title, text, entityId, args[3])endreturn p

Навигация