--------------------------------------------------------------------------------
-- Modül:İlknot --
-- --
-- Bu modül ilknot bağlantıları ve ilgili maddelere bağlantılar üretir. --
-- {{ilknot}} ve {{bağlantı biçimlendirme}} meta-şablonlarını uygular ve --
-- diğer Lua ilknot modülleri için yardımcı fonksiyonlar içerir. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local mArguments -- lazily initialise [[Modül:Bağımsız değişkenler]]
local yesno -- lazily initialise [[Modül:Evethayır]]
local p = {}
--------------------------------------------------------------------------------
-- Yardımcı fonksiyonlar
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Üst çerçeveden argümanları alır. Boşluklar kırpılır ve
-- boş olanlar kaldırılır.
mArguments = require('Modül:Bağımsız değişkenler')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Varsa bir dizgenin başındaki iki noktayı kaldırır.
return s:match('^:?(.*)')
end
function p.findNamespaceId(link, removeColon)
-- Bir bağlantının veya sayfa adının ad alanı kimliğini (ad alanı numarası) bulur. Bu
-- fonksiyon, bağlantı çift parantez içine alınmışsa çalışmaz. İki nokta
-- varsayılan olarak bağlantının başından kırpılır. İki nokta kırpmayı atlamak için
-- removeColon parametresini false olarak ayarlayın.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.formatPages(...)
-- formatLink kullanarak bir sayfa listesini biçimlendirir ve bunu bir dizi olarak döndürür. Nil
-- değerlerine izin verilmez.
local pages = {...}
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink(page)
end
return ret
end
function p.formatPageTables(...)
-- Bir sayfa/görüntü tabloları listesini alır ve bunu biçimlendirilmiş
-- bağlantılar listesi olarak döndürür. Nil değerlerine izin verilmez.
local pages = {...}
local links = {}
for i, t in ipairs(pages) do
checkType('formatPageTables', i, t, 'table')
local link = t[1]
local display = t[2]
links[i] = p._formatLink(link, display)
end
return links
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Wikimetne döndürülecek bir hata mesajını biçimlendirir.
-- addTrackingCategory [[Modül:Evethayır]]'dan döndürüldükten sonra false değilse
-- ve bir tartışma sayfasında değilsek, bir izleme kategorisi
-- eklenir.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Modül:Evethayır')
title = title or mw.title.getCurrentTitle()
-- Yardım bağlantısı metnini oluşturun.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|yardım]])'
else
helpText = ''
end
-- Kategori metnini oluşturun.
local category
if not title.isTalkPage and yesno(addTrackingCategory) ~= false then
category = 'Hatalı ilknot şablonları'
category = string.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return string.format(
'<strong class="error">Hata: %s%s.</strong>%s',
msg,
helpText,
category
)
end
function p.disambiguate(page, disambiguator)
-- Bir sayfa adını parantez içinde anlam ayrımı ile biçimlendirir,
-- yani "Örnek" → "Örnek (anlam ayrımı)".
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'anlam ayrımı'
return string.format('%s (%s)', page, disambiguator)
end
--------------------------------------------------------------------------------
-- Bağlantı biçimlendirme
--
-- Verilen bağlantıdan ve görüntüleme değerlerinden bir vikibağlantı oluşturur. Bağlantılar gerekirse
-- iki nokta üst üste ile kaçırılır ve bölümlere bağlantılar tespit edilerek standart MediaWiki "#"
-- yerine ayırıcı olarak " § " ile görüntülenir. {{bağlantı biçimlendirme}}
-- şablonunda kullanılır.
--------------------------------------------------------------------------------
function p.formatLink(frame)
local args = getArgs(frame)
local link = args[1]
local display = args[2]
if not link then
return p.makeWikitextError(
'bağlantı girilmedi',
'Şablon:Bağlantı biçimlendirme#Hatalar',
args.category
)
end
return p._formatLink(link, display)
end
function p._formatLink(link, display)
checkType('_formatLink', 1, link, 'string')
checkType('_formatLink', 2, display, 'string', true)
-- Manuel olarak belirtilen bağlantılar için baştaki iki noktayı kaldırın.
link = removeInitialColon(link)
-- {{!}} sihirli kelimesiyle sahte bir görüntüleme değerinin
-- eklenip eklenmediğini bulun.
if not display then
local prePipe, postPipe = link:match('^(.-)|(.*)$')
link = prePipe or link
display = postPipe
end
-- Görüntüleme değerini bulun.
if not display then
local page, section = link:match('^(.-)#(.*)$')
if page then
display = page .. ' § ' .. section
end
end
-- Bağlantıyı oluşturun.
if display then
return string.format(
'[[:%s|%s]]',
string.gsub(link, '|(.*)$', ''), --görüntüleme manuel borulamayı üzerine yazar
display
)
else
return string.format('[[:%s]]', link)
end
end
--------------------------------------------------------------------------------
-- İlknot
--
-- Standart ilknot metni üretir. {{ilknot}} şablonunu uygular.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
local options = {}
if not s then
return p.makeWikitextError(
'metin girilmedi',
'Hata:İlknot#Hatalar',
args.category
)
end
options.extraclasses = args.extraclasses
options.selfref = args.selfref
return p._hatnote(s, options)
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local classes = {'hatnote', 'navigation-not-searchable'}
local extraclasses = options.extraclasses
local selfref = options.selfref
if type(extraclasses) == 'string' then
classes[#classes + 1] = extraclasses
end
if selfref then
classes[#classes + 1] = 'selfref'
end
local templatestyles = mw.getCurrentFrame():extensionTag(
'templatestyles',
'',
{ src = 'Modül:İlknot/styles.css' }
)
return templatestyles .. string.format(
'<div role="note" class="%s">%s</div>',
table.concat(classes, ' '),
s
)
end
function p.quote(title)
-- Başlıkları tırnak içine alır. Eğer başlık halihazırda bir tırnak işareti ile
-- başlıyor veya bitiyorsa, görsel çakışmayı önlemek için {{-'}} şablonunda
-- olduğu gibi ilgili tarafa dolgu (kerning) ekler.
local quotationMarks = {
["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
}
-- Başlangıç ve bitiş karakterlerinin tırnak olup olmadığını test et
local quoteLeft, quoteRight =
quotationMarks[string.sub(title, 1, 1)],
quotationMarks[string.sub(title, -1, -1)]
if quoteLeft or quoteRight then
title = mw.html.create("span"):wikitext(title)
end
if quoteLeft then title:css("padding-left", "0.15em") end
if quoteRight then title:css("padding-right", "0.15em") end
return '"' .. tostring(title) .. '"'
end
return p