Изменения

поддержка Викиданных в проверке на существование страниц; русскоязычная метка «ВД» для нп1 и нп3; отказ от использования Ref-d в модуле по непредусмотрительности
Строка 1: Строка 1:  
local p = {}
 
local p = {}
 +
 +
local categories = {
 +
['error'] = 'Википедия:Статьи с некорректно заполненным шаблоном Не переведено',
 +
['outdated'] = 'Википедия:Статьи с неактуальным шаблоном Не переведено',
 +
['redirect'] = 'Википедия:Запросы на замену перенаправлений переводами',
 +
['unknown'] = 'Википедия:Статьи с неизвестными параметрами шаблонов серии Не переведено',
 +
['semiold'] = 'Википедия:Статьи с полустарым синтаксисом в шаблонах серии Не переведено',
 +
['probably_wrong'] = 'Википедия:Статьи с предположительно неверными параметрами в шаблонах серии Не переведено',
 +
['lang-not-exists'] = 'Википедия:Статьи с шаблоном Не переведено 2, использующие несуществующий шаблон lang-XX',
 +
}
    
local function is_empty(param)
 
local function is_empty(param)
Строка 5: Строка 15:  
end
 
end
   −
local function getTitle(page)
+
local function is_wikidata(lang)
 +
return lang == 'd'
 +
end
 +
 
 +
local function getTitle(page, iw_title, is_wikidata_link)
 
local success, result = pcall(function()
 
local success, result = pcall(function()
local title = mw.title.new(page)
+
if is_wikidata_link then
return { exists = title.exists, isRedirect = title.isRedirect }
+
local entity = mw.wikibase.getSitelink(iw_title)
 +
if entity ~= nil then
 +
return {
 +
title = entity,
 +
exists = true,
 +
-- предположение, что в Викиданных не перенаправление
 +
isRedirect = false,
 +
}
 +
end
 +
 +
return nil
 +
else
 +
local title = mw.title.new(page)
 +
return {
 +
title = page,
 +
exists = title.exists,
 +
isRedirect = title.isRedirect,
 +
}
 +
end
 
end)
 
end)
 +
 
if success then
 
if success then
 
return result
 
return result
else
  −
return nil
   
end
 
end
 +
 +
return nil
 
end
 
end
   Строка 24: Строка 57:  
title = string.format(':%s:%s', lang, title)
 
title = string.format(':%s:%s', lang, title)
 
end
 
end
if lang == 'd' then
+
if is_wikidata(lang) then
 
title = title .. '#sitelinks-wikipedia'
 
title = title .. '#sitelinks-wikipedia'
 
end
 
end
Строка 52: Строка 85:  
)
 
)
 
end
 
end
  −
local categories = {
  −
['error'] = 'Википедия:Статьи с некорректно заполненным шаблоном Не переведено',
  −
['outdated'] = 'Википедия:Статьи с неактуальным шаблоном Не переведено',
  −
['redirect'] = 'Википедия:Запросы на замену перенаправлений переводами',
  −
['unknown'] = 'Википедия:Статьи с неизвестными параметрами шаблонов серии Не переведено',
  −
['semiold'] = 'Википедия:Статьи с полустарым синтаксисом в шаблонах серии Не переведено',
  −
['probably_wrong'] = 'Википедия:Статьи с предположительно неверными параметрами в шаблонах серии Не переведено',
  −
['lang-not-exists'] = 'Википедия:Статьи с шаблоном Не переведено 2, использующие несуществующий шаблон lang-XX',
  −
}
      
local function throwError(text, category_code, allow_cat)
 
local function throwError(text, category_code, allow_cat)
Строка 92: Строка 115:  
end
 
end
 
 
-- проверка не неизвестные параметры
+
-- проверка на неизвестные параметры
 
local redundant_params = {}
 
local redundant_params = {}
 
local good_params = {'mode', 1, 2, 3, 4, 'l', 'leave', 'r', 'q', 'nocat'}
 
local good_params = {'mode', 1, 2, 3, 4, 'l', 'leave', 'r', 'q', 'nocat'}
Строка 171: Строка 194:  
 
 
-- получение страницы, чтобы знать, существует ли она и является ли она перенаправлением
 
-- получение страницы, чтобы знать, существует ли она и является ли она перенаправлением
 +
local isWikidataLink = is_wikidata(lang)
 
local considerAsExists
 
local considerAsExists
 
local isRedirect
 
local isRedirect
Строка 179: Строка 203:  
considerAsRedirect = false
 
considerAsRedirect = false
 
else
 
else
local titleObject = getTitle(title) -- дорогая функция, после 500 вызова крашится
+
-- дорогая функция, после 500 вызова крашится
 +
local titleObject = getTitle(title, iw_title, isWikidataLink)
 
if titleObject then
 
if titleObject then
 +
title = titleObject.title
 
considerAsExists = titleObject.exists
 
considerAsExists = titleObject.exists
 
isRedirect = titleObject.isRedirect
 
isRedirect = titleObject.isRedirect
Строка 195: Строка 221:  
return throwError('некорректный ISO-код «' .. lang .. '»', 'error', allow_cat)
 
return throwError('некорректный ISO-код «' .. lang .. '»', 'error', allow_cat)
 
end
 
end
if mode == 2 and lang == 'd' then
+
if mode == 2 and isWikidataLink then
 
return throwError('шаблон Не переведено 2 не поддерживает Викиданные вместо языка')
 
return throwError('шаблон Не переведено 2 не поддерживает Викиданные вместо языка')
 
end
 
end
Строка 212: Строка 238:  
local iw_tooltip
 
local iw_tooltip
 
local ucfirst_title = mw.getContentLanguage():ucfirst(title)
 
local ucfirst_title = mw.getContentLanguage():ucfirst(title)
if lang == 'd' then
+
if isWikidataLink then
 
iw_tooltip = string.format('Элемент статьи «%s» в Викиданных', ucfirst_title)
 
iw_tooltip = string.format('Элемент статьи «%s» в Викиданных', ucfirst_title)
 
else
 
else
Строка 238: Строка 264:  
if mode == 1 then
 
if mode == 1 then
 
local lang_text
 
local lang_text
if lang == 'd' then
+
if isWikidataLink then
lang_text = 'd'
+
lang_text = 'ВД'
 
else
 
else
 
lang_text = languages[lang][1]
 
lang_text = languages[lang][1]
Строка 267: Строка 293:  
-- для шаблона "не переведено 3"
 
-- для шаблона "не переведено 3"
 
elseif mode == 3 then
 
elseif mode == 3 then
local args = {};
  −
if lang == 'd' then
  −
args = { iw_title }
  −
end
   
local ref = string.format(
 
local ref = string.format(
 
'<span style="font-size:95%%; position: relative; top: .4em;">%s</span>',
 
'<span style="font-size:95%%; position: relative; top: .4em;">%s</span>',
frame:expandTemplate{ title = 'ref-' .. lang, args = args }
+
frame:expandTemplate{
 +
title = 'ref-' .. (isWikidataLink and 'info' or lang),
 +
args = {
 +
isWikidataLink and 'ВД' or ''
 +
}
 +
}
 
)
 
)
 
local ru_link = wikilink(title, 'русск.')
 
local ru_link = wikilink(title, 'русск.')
Анонимный участник