|
|
Строка 31: |
Строка 31: |
| end | | end |
|
| |
|
| function p.getRefHtml( wikidataItemId ) | | function p.getRefHtml( code ) |
| | local l = languages[code]; |
| | if l == nil then |
| | mw.log( 'Language description for code ' .. code .. ' not found' ) |
| | return "" |
| | else |
| | return '<span class="ref-info" title="' .. l[ 2 ] .. '" style="cursor:help">(' .. l[ 1 ] .. ')</span>' |
| | end |
| | end |
| | |
| | function p.getWikidataRefHtmlFrame( frame ) |
| | return p.getWikidataRefHtml( trimstr( frame.args[1] ) ) |
| | end |
| | |
| | function p.getWikidataRefHtml( wikidataItemId ) |
| local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" ) | | local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" ) |
| local code = codeByItemId[ wikidataItemId ]; | | local code = codeByItemId[ wikidataItemId ]; |
Строка 37: |
Строка 51: |
| mw.log( 'Language code not found for ' .. wikidataItemId ) | | mw.log( 'Language code not found for ' .. wikidataItemId ) |
| return "" | | return "" |
| else
| |
| local l = languages[code];
| |
| if l == nil then
| |
| mw.log( 'Language description for code ' .. code .. ' not found' )
| |
| return ""
| |
| else
| |
| return '<span class="ref-info" title="' .. l[ 2 ] .. '" style="font-size:85%; cursor:help; color:#888;">(' .. l[ 1 ] .. ')</span>'
| |
| end
| |
| end | | end |
| | return p.getRefHtml( code ) |
| end | | end |
|
| |
|
Строка 119: |
Строка 126: |
| -- принимает zh|tt, возвращает ref-zh, ref-tt | | -- принимает zh|tt, возвращает ref-zh, ref-tt |
| function p.list_ref(frame) | | function p.list_ref(frame) |
| local result = ''
| | local result = '' |
| local v = frame.args['в'] or nil
| | local v = frame.args['в'] or nil |
| local ref = nil | | local ref = nil |
|
| |
|
Строка 129: |
Строка 136: |
| end | | end |
|
| |
|
| for x, lg in pairs( frame.args ) do
| | for x, lg in pairs( frame.args ) do |
| local code = trimstr(lg) | | local code = trimstr(lg) |
| if code ~= '' and code ~= 'в' then | | if code ~= '' and code ~= 'в' then |
Строка 136: |
Строка 143: |
| result = result .. mw.ustring.gsub(mw.ustring.gsub(ref, '%%2%%', p._transform_lang(code)), '%%1%%', l[1]) | | result = result .. mw.ustring.gsub(mw.ustring.gsub(ref, '%%2%%', p._transform_lang(code)), '%%1%%', l[1]) |
| else | | else |
| | if mw.title.new('ref-' .. code, 10).exists == false then |
| | code = 'und' |
| | end |
| result = result .. frame:expandTemplate{ title = 'ref-' .. code } .. '[[Category:Тептар:Статьи с нераспознанным языком (ref)]]' | | result = result .. frame:expandTemplate{ title = 'ref-' .. code } .. '[[Category:Тептар:Статьи с нераспознанным языком (ref)]]' |
| end | | end |
| end | | end |
| end
| | end |
|
| |
|
| return result
| | return result |
| end | | end |
|
| |
|
Строка 174: |
Строка 184: |
| function p.transform_lang(frame) | | function p.transform_lang(frame) |
| return p._transform_lang(trimstr(frame.args[1])) | | return p._transform_lang(trimstr(frame.args[1])) |
| end
| |
|
| |
| -- Проверяет существование страницы и является ли она перенаправлением
| |
| local function getTitle(page)
| |
| local success, result = pcall(function()
| |
| local title = mw.title.new(page)
| |
| return { title.exists, title.isRedirect }
| |
| end)
| |
| return success and result or nil
| |
| end
| |
|
| |
| -- Вспомогательная функция для {{Не переведено 5}}: выводит шаблон
| |
| function p._newIW(title, text, lang, page, state, nocat)
| |
| local mwlang = mw.getContentLanguage()
| |
| local origPage = page
| |
|
| |
| -- Изображения для старой функции показа статуса
| |
| local states = {
| |
| ['ИС'] = {'Тептар:Избранные статьи','Избранная статья','Small Skew Star SVG.svg'},
| |
| ['ХС'] = {'Тептар:Хорошие статьи','Хорошая статья','Blue star unboxed.svg'},
| |
| ['ИСП'] = {'Тептар:Избранные списки и порталы','Избранный список','Purple star unboxed.svg'}
| |
| }
| |
|
| |
| -- Категории для шаблона
| |
| local categoryErrors = '[[Категория:Тептар:Статьи с некорректно заполненным шаблоном Не переведено]]'
| |
| local categoryExists = '[[Категория:Тептар:Статьи с неактуальным шаблоном Не переведено]]'
| |
| local categoryRedirect = '[[Категория:Тептар:Запросы на замену перенаправлений переводами]]'
| |
|
| |
| -- Проверяет существование параметров и заменяет их на альтернативные
| |
| if isEmpty(text) then
| |
| text = title
| |
| end
| |
| if isEmpty(lang) then
| |
| lang = "en"
| |
| end
| |
| if isEmpty(page) then
| |
| page = title
| |
| end
| |
|
| |
| -- Создаёт шаблон
| |
| if title ~= '{{{1}}}' then
| |
| local this = mw.title.getCurrentTitle()
| |
| local titleObj = getTitle(title)
| |
| local ifExists, ifRedirect
| |
| local type = ''
| |
| local s = ''
| |
|
| |
| local langName = ''
| |
| if lang ~= 'd' then
| |
| if isEmpty(languages[lang]) then
| |
| if this.namespace == 0 and isEmpty(nocat) then
| |
| s = s .. categoryErrors
| |
| end
| |
| else
| |
| langName = ' data-lang-name="' .. (languages[lang][1] and languages[lang][1] or '???') .. '"'
| |
| end
| |
| end
| |
|
| |
| -- Проверяет, не ограничен ли лимит вызовов функции
| |
| if titleObj ~= nil then
| |
| ifExists = titleObj[1]
| |
| ifRedirect = titleObj[2]
| |
| end
| |
|
| |
| -- Показывает ссылку на редирект или красную ссылку
| |
| local class = (ifExists and (ifRedirect and ' iw--redirect' or ' iw--exists') or '')
| |
| s = s .. string.format('<span class="iw%s plainlinks" data-title="%s" data-lang="%s"' .. langName .. '>', class, mwlang:ucfirst(title), lang)
| |
|
| |
| if ifRedirect then
| |
| if this.namespace == 0 and isEmpty(nocat) then
| |
| s = s .. categoryRedirect
| |
| end
| |
| s = s .. string.format('[%s %s]', tostring(mw.uri.fullUrl(title,'redirect=no')), text)
| |
| else
| |
| s = s .. string.format('[[%s|%s]]', title, text)
| |
| end
| |
|
| |
| -- Показывает ссылку на иноязычную статью или предложение убрать шаблон
| |
| if ifExists and not ifRedirect then
| |
| s = s .. '<sup class="iw__notice noprint">[[Шаблон:Не переведено 5#Если существует статья|'
| |
| .. '<span style="color:red; font-style:normal; font-weight:bold;" title="Уберите шаблон «Не переведено 5» из статьи '
| |
| .. 'и замените его простой тептар-ссылкой">?!</span>]]</sup>'
| |
| if this.namespace == 0 and isEmpty(nocat) then
| |
| s = s .. categoryExists
| |
| end
| |
| else
| |
| -- Создаёт всплывающую подсказку
| |
| local t = ''
| |
| if lang == 'd' then
| |
| t = string.format('Страница статьи «%s» в Тептар', mwlang:ucfirst(title))
| |
| page = page .. '#sitelinks-wikipedia'
| |
| else
| |
| if not isEmpty(origPage) then
| |
| t = string.format('%s — версия статьи', page)
| |
| else
| |
| t = 'Версия статьи'
| |
| end
| |
| t = t .. string.format(' «%s» на %s', mwlang:ucfirst(title), p._transform_lang(lang))
| |
| end
| |
|
| |
| -- Создаёт примечание о перенаправлении
| |
| local aster = ''
| |
| if ifRedirect then
| |
| aster = '<sup class="iw__notice noprint" style="font-style:normal; font-weight:normal; margin:0 0 0 1px;">'
| |
| .. '[[Шаблон:Не переведено 5#Если существует перенаправление|'
| |
| .. '<span style="color:red; font-weight:bold;" title="Замените название перенаправления на название статьи либо уберите шаблон «Не переведено 5»">*</span>]]'
| |
| .. '</sup>'
| |
| end
| |
|
| |
| -- Выводит ссылку на иноязычную страницу
| |
| s = s .. '<sup class="iw__note noprint" style="font-style:normal; font-weight:normal;">' ..
| |
| string.format('[[:%s:%s|<span class="iw__tooltip" title="%s">[%s]</span>]]</sup>', lang, page, t, lang) ..
| |
| aster
| |
|
| |
| -- Выводит статус иноязычной страницы
| |
| if not isEmpty(state) and not isEmpty(states[state]) then
| |
| s = s .. string.format('<sup class="iw__status noprint" style="margin:0 0 0 1px;">[[Файл:%s|8px|link=%s|%s]]</sup>',
| |
| states[state][3], states[state][1], states[state][2])
| |
| end
| |
| end
| |
|
| |
| return s .. '</span>'
| |
| else
| |
| -- Если нет обязательного параметра, выводит красный текст
| |
| local htmlerror = require('Module:Error').error
| |
| return htmlerror{'Укажите название страницы.'}
| |
| end
| |
| end
| |
|
| |
| -- Вспомогательная функция для {{Не переведено 5}}: выводит подстановку шаблона
| |
| function p._substIW(title, text)
| |
| local s = '[[' .. title
| |
| if not isEmpty(text) and title ~= text then
| |
| s = s .. '|' .. text
| |
| end
| |
|
| |
| return s .. ']]'
| |
| end
| |
|
| |
| -- Выводит {{Не переведено 5}}
| |
| function p.getIW(frame)
| |
| local mwlang = mw.getContentLanguage()
| |
|
| |
| local f = frame.args
| |
| local title = f.title
| |
| local text = f.text
| |
| local lang = mwlang:lc(f.lang)
| |
| local page = f.page
| |
| local state = f.state
| |
| local nocat = f.nocat
| |
|
| |
| if not mw.isSubsting() then
| |
| return p._newIW(title, text, lang, page, state, nocat)
| |
| end
| |
|
| |
| return p._substIW(title, text)
| |
| end | | end |
|
| |
|
| return p | | return p |