Modul:Navbox: Redaktələr arasındakı fərq

Silinən məzmun Əlavə edilmiş məzmun
Redaktənin izahı yoxdur
Teq: Geri qaytarıldı
k Turkmen (Müzakirə) tərəfindən edilmiş dəyişikliklər Toghrul Rahimli tərəfindən edilmiş dəyişikliklərə qaytarıldı.
Teq: Geri qaytarma
 
Sətir 1:
--
-- Bu modul {{Navbox}} şablonunu yerinə yetirir.
--
 
local p = {}
 
local navbar = require('Module:Navbar')._navbar
local getArgs -- lazily initialized
 
local args
local tableRowAdded = false
local border
local listnums = {}
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'
local RESTART_MARKER = '\127_ODDEVEN0_\127'
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'
 
local maintitlefunction trim(s)
return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
local name
end
local navbar
local above
local image
local below
 
local titlestylefunction addNewline(s)
if s:match('^[*:;#]') or s:match('^{|') then
local groupstyle
return '\n' .. s ..'\n'
local bodystyle
else
local basestyle
return s
local liststyle
end
local evenodd_VARIABLE
end
local abovestyle
local belowstyle
local imageleft
local imageleftstyle
local imagestyle
local style
 
local function addTableRow(tbl)
local groupwidth
-- If any other rows have already been added, then we add a 2px gutter row.
local listpadding
if tableRowAdded then
tbl
:tag('tr')
:css('height', '2px')
:tag('td')
:attr('colspan',2)
end
 
tableRowAdded = true
local bodyclass
local titleclass
local aboveclass
local belowclass
local groupclass
local listclass
local imageclass
 
return tbl:tag('tr')
local function striped(wikitext)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = ''
if border == 'subgroup' and args.orphan ~= 'yes' then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = 'odd', 'even'
if evenodd_VARIABLE then
if evenodd_VARIABLE == 'swap' then
first, second = second, first
else
first = evenodd_VARIABLE
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer)) -- () omits gsub count
end
 
local function addNewlinerenderNavBar(stitleCell)
-- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
if s:match('^[*:;#]') or s:match('^{|') then
-- or right to keep the title centered.
return '\n' .. s ..'\n'
local spacerSide = nil
else
return s
end
end
 
if args.navbar == 'off' then
local function renderNavBar(titleCell)
-- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
-- also no show/hide link, then we need a spacer on the right to achieve the left shift.
if args.state == 'plain' then spacerSide = 'right' end
elseif args.navbar == 'plain' or (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then
-- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
if args.state ~= 'plain' then spacerSide = 'left' end
else
-- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
-- to balance out the width of the navbar.
if args.state == 'plain' then spacerSide = 'right' end
 
titleCell:wikitext(navbar{
if navbar ~= 'off' and navbar ~= 'plain' and not (not name and mw.getCurrentFrame():getParent():getTitle():gsub('/qaralama$', '') == 'Şablon:Navbox') then
args.name,
mini = 1,
-- Check color contrast of the gear icon
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;'
local styleratio = require('Module:Color contrast')._styleratio
})
local gearColor = ''
end
local contrastStyle = titlestyle or basestyle
local gearStyleBlack = (contrastStyle and mw.text.unstripNoWiki(contrastStyle) .. '; color:#666;' or '')
local gearStyleWhite = (contrastStyle and mw.text.unstripNoWiki(contrastStyle) .. '; color:#fff;' or '')
if styleratio{gearStyleBlack} < styleratio{gearStyleWhite} then
gearColor = ' white'
end
--- Gear creation
titleCell
:tag('span')
:css('float', 'left')
:css('text-align', 'left')
:css('width', '5em')
:css('margin-right', '0.5em')
:wikitext('[[Şəkil:Wikipedia interwiki section gear icon' .. gearColor .. '.svg|14px|Bu şablona bax|link=Şablon:' .. name .. '|alt=⛭]]')
end
 
-- Render the spacer div.
if spacerSide then
titleCell
:tag('span')
:css('float', spacerSide)
:css('width', '6em')
:wikitext('&nbsp;')
end
end
 
Sətir 120 ⟶ 78:
--
local function renderTitleRow(tbl)
if not maintitleargs.title then return end
 
local titleRow = tbl:tagaddTableRow('tr'tbl)
 
if args.titlegroup then
titleRow
:tag('th')
:attr('scope', 'row')
:addClass('navbox-group')
:addClass(args.titlegroupclass)
:cssText(args.basestyle)
:cssText(args.groupstyle)
:cssText(args.titlegroupstyle)
:wikitext(args.titlegroup)
end
 
local titleCell = titleRow:tag('th'):attr('scope', 'col')
 
if args.titlegroup then
titleCell
:css('border-left', '2px solid #fdfdfd')
:css('width', '100%')
end
 
local titleColspan = 2
if args.imageleft then titleColspan = titleColspan + 1 end
if args.image then titleColspan = titleColspan + 1 end
if args.titlegroup then titleColspan = titleColspan - 1 end
 
titleCell
:cssText(args.basestyle)
:cssText(args.titlestyle)
:addClass('navbox-title')
:attr('colspan', titleColspan)
 
renderNavBar(titleCell)
 
titleCell
:tag('div')
:addClass(args.titleclass)
:attr('id', mw.uri.anchorEncode(maintitle))
:css('font-size', '110%')
:addClass(titleclass)
:wikitext(addNewline(args.title))
:css('font-size', '114%')
:css('margin', '0 5em')
:wikitext(addNewline(maintitle))
end
 
Sətir 171 ⟶ 127:
 
local function getAboveBelowColspan()
local ret = 2
if args.imageleft then ret = ret + 1 end
if args.image then ret = ret + 1 end
return ret
end
 
local function renderAboveRow(tbl)
if not args.above then return end
 
addTableRow(tbl)
tbl:tag('tr')
:tag('td')
:addClass('navbox-abovebelow')
:addClass(args.aboveclass)
:cssText(args.basestyle)
:cssText(args.abovestyle)
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(addNewline(args.above))
end
 
local function renderBelowRow(tbl)
if not args.below then return end
 
addTableRow(tbl)
tbl:tag('tr')
:tag('td')
:addClass('navbox-abovebelow')
:addClass(args.belowclass)
:cssText(args.basestyle)
:cssText(args.belowstyle)
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(addNewline(args.below))
end
 
Sətir 208 ⟶ 164:
-- List rows
--
local function renderListRow(tbl, listnum)
local row = addTableRow(tbl)
 
if listnum == 1 and args.imageleft then
local function haveSubgroups()
for i = 1, 23 do row
:tag('td')
if (args['group' .. i] or args['qrup' .. i]) and (args['list' .. i] or args['siyahı' .. i]) then
:addClass('navbox-image')
return true
:addClass(args.imageclass)
end
:css('width', '0%')
end
:css('padding', '0px 2px 0px 0px')
return false
:cssText(args.imageleftstyle)
end
:attr('rowspan', 2 * #listnums - 1)
:tag('div')
:wikitext(addNewline(args.imageleft))
end
 
if args['group' .. listnum] then
local groupCell = row:tag('th')
 
groupCell
local function renderListRow(tbl, index, listnum)
:attr('scope', 'row')
local row = tbl:tag('tr')
:addClass('navbox-group')
:addClass(args.groupclass)
:cssText(args.basestyle)
 
if index == 1 and imageleft if args.groupwidth then
groupCell:css('width', args.groupwidth)
row
end
:tag('td')
:addClass('navbox-image')
:addClass(imageclass)
:css('width', '1px')
:css('padding', '0px 7px 0px 0px')
:cssText(imageleftstyle)
:attr('rowspan', #listnums)
:tag('div')
:wikitext(addNewline(imageleft))
end
 
groupCell
if (args['group' .. listnum] or args['qrup' .. listnum]) then
:cssText(args.groupstyle)
local groupCell = row:tag('th')
:cssText(args['group' .. listnum .. 'style'])
:wikitext(args['group' .. listnum])
end
 
local listCell = row:tag('td')
groupCell
:attr('scope', 'row')
:addClass('navbox-group')
:addClass(groupclass)
:cssText(basestyle)
:css('width', groupwidth or '1px') -- If groupwidth not specified, minimize width
 
if args['group' .. listnum] then
groupCell
listCell
:cssText(groupstyle)
:css('text-align', 'left')
:cssText(args['group' .. listnum .. 'style'] or args['qrupun stili' .. listnum] or args['qrupların stili' .. listnum])
:css('border-left-width', '2px')
:wikitext(args['group' .. listnum] or args['qrup' .. listnum])
:css('border-left-style', 'solid')
end
else
listCell:attr('colspan', 2)
end
 
if not args.groupwidth then
local listCell = row:tag('td')
listCell:css('width', '100%')
end
 
if (args['group' .. listnum] orlocal args['qrup'isOdd ..= (listnum] % 2) then== 1
local rowstyle = args.evenstyle
listCell
if isOdd then rowstyle = args.oddstyle end
:css('text-align', 'left')
:css('border-left-width', '2px')
:css('border-left-style', 'solid')
else
if haveSubgroups() then
listCell
:attr('colspan', 2)
end
end
 
local evenOdd
if not groupwidth then
if args.evenodd == 'swap' then
listCell:css('width', '100%')
if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
end
else
if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end
end
 
listCell
local listText = args['list' .. listnum] or args['siyahı' .. listnum]
:css('padding', '0px')
local oddEven = ODD_EVEN_MARKER
:cssText(args.liststyle)
if listText:sub(1, 12) == '</div><table' then
:cssText(rowstyle)
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
:cssText(args['list' .. listnum .. 'style'])
oddEven = listText:find('<th[^>]*"navbox%-title"') and RESTART_MARKER or 'odd'
:addClass('navbox-list')
end
:addClass('navbox-' .. evenOdd)
listCell
:addClass(args.listclass)
:css('padding', '0px')
:tag('div')
:cssText(liststyle)
:cssTextcss(args['listpadding', .. (listnum ..== 'style']1 and args.list1padding) or args['siyahının.listpadding or stili'0em 0.. listnum]25em')
:wikitext(addNewline(args['list' .. listnum]))
:addClass('navbox-list')
:addClass('navbox-' .. oddEven)
:addClass(listclass)
:tag('div')
:css('padding', args['list' .. listnum .. 'padding'] or listpadding or '0em 0.25em')
:wikitext(addNewline(listText))
 
if indexlistnum == 1 and args.image then
row
:tag('td')
:addClass('navbox-image')
:addClass(args.imageclass)
:css('width', '1px0%')
:css('padding', '0px 0px 0px 7px2px')
:cssText(args.imagestyle)
:attr('rowspan', 2 * #listnums - 1)
:tag('div')
:wikitext(addNewline(args.image))
end
end
 
 
--
-- Tracking categories
--
local function needsChangetoSubgroups()
for i = 1, 23 do
if (args['group' .. i] or args['qrup' .. i]) and not (args['list' .. i] or args['siyahı' .. i]) then
return true
end
end
return false
end
 
local function needsHorizontalLists()
if border == 'child' or border == 'subgroup' or args.tracking == 'no' then return false end
return false
end
local listClasses = {
['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,
['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,
['hlist vevent'] = true, ['hlist hlist-items-nowrap'] = true, ['hlist-items-nowrap'] = true,
}
return not (listClasses[listclass] or listClasses[bodyclass])
end
 
local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
-- local function hasBackgroundColors()
for i, cls in ipairs(listClasses) do
-- return mw.ustring.match(titlestyle or '','background') or mw.ustring.match(groupstyle or '','background') or mw.ustring.match(basestyle or '','background')
if args.listclass == cls or args.bodyclass == cls then
-- end
return false
end
end
 
return true
local function isIllegible()
end
local styleratio = require('Module:Color contrast')._styleratio
 
local function hasBackgroundColors()
for key, style in pairs(args) do
return mw.ustring.match(args.titlestyle or '','background') or mw.ustring.match(args.groupstyle or '','background') or mw.ustring.match(args.basestyle or '','background')
if tostring(key):match("style$") or tostring(key):match("^стиль") then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
 
local function getTrackingCategories()
local cats = {}
if needsChangetoSubgroupsneedsHorizontalLists() then table.insert(cats, 'Başlıqların yanlış istifadəÜfüqi olunduğusiyahılarsız naviqasiya şablonlarıqutuları') end
if needsHorizontalListshasBackgroundColors() then table.insert(cats, 'ÜfüqiFon rəngləri siyahılarsızistifadə naviqasiyaedən qutularışablonlar') end
return cats
if isIllegible() then table.insert(cats, 'Potensial xətaları olan naviqasiya şablonları') end
return cats
end
 
local function renderTrackingCategories(builder)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == 'doc' or subpage == 'qaralamasandbox' or subpage == 'sınaqlartestcases' then return end
 
for i, cat in ipairs(getTrackingCategories()) do
builder:wikitext('[[KateqoriyaCategory:' .. cat .. ']]')
end
end
 
Sətir 363 ⟶ 295:
--
local function renderMainTable()
local tbl = mw.html.create('table')
:addClass('nowraplinks')
:addClass(args.bodyclass)
 
if maintitleargs.title and (args.state ~= 'plain' and args.state ~= 'off') then
tbl
:addClass('collapsible')
:addClass(args.state or 'autocollapse')
end
 
tbl:css('border-spacing', 0)
if border == 'subgroup' or border == 'child' or border == 'none' then
tbl
:addClass('navbox-subgroup')
:cssText(args.bodystyle)
:cssText(args.style)
else -- regular navboxnavobx - bodystyle and style will be applied to the wrapper table
tbl
:addClass('navbox-inner')
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args.innerstyle)
 
renderTitleRow(tbl)
renderAboveRow(tbl)
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum)
end
renderBelowRow(tbl)
 
return tbl
end
 
function p._navbox(navboxArgs)
args = navboxArgs
 
for k, v in pairs(args) do
local listnum = ('' .. k):match('^list(%d+)$') or ('' .. k):match('^siyahı(%d+)$')
if listnum then table.insert(listnums, tonumber(listnum)) end
end
table.sort(listnums)
table.sort(listnums)
 
border = mw.text.trim(args.border or args[1] or '')
if border == 'child' then
border = 'subgroup'
end
maintitle = args.title or args['başlıq']
navbar = args.navbar or args['baxış üçün keçid']
name = args.name or args['ad']
above = args.above or args['yuxarı']
image = args.image or args['şəkil']
imagestyle = args.imagestyle or args['şəklin stili']
imageleft = args.imageleft or args['şəkil2'] or args['sol şəkil']
imageleftstyle = args.imageleftstyle or args.imagestyle2 or args['sol şəklin stili'] or args['şəklin stili2']
below = args.below or args['aşağı']
titlestyle = args.titlestyle or args['əsas başlığın stili'] or args['başlığın stili']
groupstyle = args.groupstyle or args['başlıqların stili'] or args['qrupun stili'] or args['qrupların stili']
bodystyle = args.bodystyle or args['gövdənin stili']
basestyle = args.basestyle or args['bazanın stili'] or args['stil']
style = args.style
liststyle = args.liststyle or args['siyahıların stili'] or args['siyahının stili']
abovestyle = args.abovestyle or args['yuxarının stili']
belowstyle = args.belowstyle or args['aşağının stili']
evenodd_VARIABLE = args.evenodd or args['tək cüt'] or args['tək_cüt']
groupwidth = args.groupwidth or args['qrupun eni']
listpadding = args.listpadding or args['siyahı boşluğu']
bodyclass = args.bodyclass or args['gövdənin sinfi']
titleclass = args.titleclass or args['başlığın sinfi']
aboveclass = args.aboveclass or args['yuxarının sinfi']
belowclass = args.belowclass or args['aşağının sinfi']
groupclass = args.groupclass or args['qrupun sinfi']
listclass = args.listclass or args['siyahıların sinfi']
imageclass = args.imageclass or args['şəklin sinfi']
-- render the main body of the navbox
local tbl = renderMainTable()
 
-- render the appropriatemain wrapperbody aroundof the navbox, depending on the border param
local restbl = mw.html.createrenderMainTable()
if border == 'none' then
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
if maintitle then
nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle))
else
nav:attr('aria-label', 'Naviqasiya şablonu')
end
elseif border == 'subgroup' then
-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
-- padding being applied, and at the end add a <div> to balance out the parent's </div>
res
:wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
:node(tbl)
:wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
else
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass('navbox')
:cssText(bodystyle)
:cssText(style)
:css('padding', '3px')
:node(tbl)
if maintitle then
nav:attr('aria-labelledby', mw.uri.anchorEncode(maintitle))
else
nav:attr('aria-label', 'Naviqasiya şablonu')
end
end
 
-- render the appropriate wrapper around the navbox, depending on the border param
renderTrackingCategories(res)
local res = mw.html.create()
if border == 'none' then
res:node(tbl)
elseif border == 'subgroup' or border == 'child' then
-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
-- padding being applied, and at the end add a <div> to balance out the parent's </div>
res
:wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
:node(tbl)
:wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
else
res
:tag('table')
:addClass('navbox')
:css('border-spacing', 0)
:cssText(args.bodystyle)
:cssText(args.style)
:tag('tr')
:tag('td')
:css('padding', '2px')
:node(tbl)
end
 
renderTrackingCategories(res)
return striped(tostring(res))
 
return tostring(res)
end
 
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {'ŞablonTemplate:Navbox', 'Şablon:Navbox subgroup'}})
 
if frame.args.border then
-- Read the arguments in the order they'll be output in, to make references number in the right order.
-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.
local _
args.border = frame.args.border
_ = args.title
end
_ = args.above
for i = 1, 20 do
-- Read the arguments in the order they'll be output in, to make references number in the right order.
_ = args["group" .. tostring(i)]
local _
_ = args["list" .. tostring(i)]
_ = maintitle
end
_ = above
_ = args.below
for i = 1, 23 do
_ = args["group" .. tostring(i)] and args["qrup" .. tostring(i)]
_ = args["list" .. tostring(i)] and args["siyahı" .. tostring(i)]
end
_ = below
 
return p._navbox(args)
end