Модуль:Wikidata/redLink
Перейти к навигацииПерейти к поиску
Для реализации {{нет статьи}}, простановки красных ссылок модулем Wikidata (дубликата части шаблона {{iw}} с допфункционалом).
Тесты
5 тестов из 20 провалено.
Тест | Ожидаемое значение | Фактическое значение | |
---|---|---|---|
![]() | {{#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 | Земля }} | Земля | Земля |
![]() | {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q3124803 | HD 23985 }} | HD 23985[вд] | HD 23985[вд] |
![]() | {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q100712902 | Я. Венник }} | Я. Венник[вд] | Я. Венник[вд] |
![]() | {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q84437742 | LDS 5078 }} | LDS 5078[вд] | LDS 5078[вд] |
![]() | {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q74169392 | [GS55] 204 }} | [GS55] 204 | [GS55] 204 |
Тест | Ожидаемое значение | Фактическое значение | |
---|---|---|---|
![]() | getBioInfobox() | Персона | Персона |
![]() | getBioInfobox('Q81840636') | Персона | Персона |
![]() | getBioInfobox('Q40192238') | Учёный | Учёный |
Тест | Ожидаемое значение | Фактическое значение | |
---|---|---|---|
![]() | getInfobox() | Универсальная карточка | Универсальная карточка |
![]() | getInfobox('Q6') | Универсальная карточка | Универсальная карточка |
![]() | getInfobox('Q1') | Универсальная карточка | Универсальная карточка |
![]() | getInfobox('Q35762485') | Универсальная карточка | Универсальная карточка |
![]() | getInfobox('Q42') | Персона | Персона |
![]() | getInfobox('Q3427') | Звезда | Универсальная карточка |
![]() | getInfobox('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