모듈:Navbox: 두 판 사이의 차이

364 바이트 제거됨 ,  2015년 2월 5일 (목)
편집 요약 없음
편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
--
--
-- This module will implement {{Navbox}}
-- This module implements {{Navbox}}
-- 이 모듈은 {{둘러보기 상자}}의 구현에 사용됩니다
--
--
 
local p = {}
local p = {}
 
local HtmlBuilder = require('Module:HtmlBuilder')
local navbar = require('Module:Navbar')._navbar
local navbar = require('Module:Navbar')._navbar
local getArgs -- lazily initialized
local getArgs -- lazily initialized
14번째 줄: 12번째 줄:
local border
local border
local listnums = {}
local listnums = {}
 
local function trim(s)
local function trim(s)
     return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
     return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
31번째 줄: 29번째 줄:
     if tableRowAdded then
     if tableRowAdded then
         tbl
         tbl
             .tag('tr')
             :tag('tr')
                 .css('height', '2px')
                 :css('height', '2px')
                 .tag('td')
                 :tag('td')
                .attr('colspan',2)
                    :attr('colspan',2)
     end
     end
   
 
     tableRowAdded = true
     tableRowAdded = true
   
 
     return tbl.tag('tr')
     return tbl:tag('tr')
end
end


51번째 줄: 49번째 줄:
         -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
         -- 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
         if args.state == 'plain' then spacerSide = 'right' end
     elseif args.navbar == 'plain' or (not args.name and mw.getCurrentFrame():getParent():getTitle() == '틀:둘러보기 상자' and (border == 'subgroup' or border == 'child' or border == 'none')) then
     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.
         -- 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
         if args.state ~= 'plain' then spacerSide = 'left' end
59번째 줄: 57번째 줄:
         if args.state == 'plain' then spacerSide = 'right' end
         if args.state == 'plain' then spacerSide = 'right' end


         titleCell.wikitext(navbar{  
         titleCell:wikitext(navbar{
             args.name,  
             args.name,
             mini = 1,  
             mini = 1,
             fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
             fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
         })
         })
     end
     end
   
 
     -- Render the spacer div.
     -- Render the spacer div.
     if spacerSide then
     if spacerSide then
         titleCell
         titleCell
             .tag('span')
             :tag('span')
                 .css('float', spacerSide)
                 :css('float', spacerSide)
                 .css('width', '6em')
                 :css('width', '6em')
                 .wikitext(' ')
                 :wikitext(' ')
     end
     end
end
end
81번째 줄: 79번째 줄:
local function renderTitleRow(tbl)
local function renderTitleRow(tbl)
     if not args.title then return end
     if not args.title then return end
 
     local titleRow = addTableRow(tbl)
     local titleRow = addTableRow(tbl)
   
 
     if args.titlegroup then
     if args.titlegroup then
         titleRow
         titleRow
             .tag('th')
             :tag('th')
                 .attr('scope', 'row')
                 :attr('scope', 'row')
                 .addClass('navbox-group')
                 :addClass('navbox-group')
                 .addClass(args.titlegroupclass)
                 :addClass(args.titlegroupclass)
                 .cssText(args.basestyle)
                 :cssText(args.basestyle)
                 .cssText(args.groupstyle)
                 :cssText(args.groupstyle)
                 .cssText(args.titlegroupstyle)
                 :cssText(args.titlegroupstyle)
                 .wikitext(args.titlegroup)
                 :wikitext(args.titlegroup)
     end
     end
   
 
     local titleCell = titleRow.tag('th').attr('scope', 'col')
     local titleCell = titleRow:tag('th'):attr('scope', 'col')
           
 
     if args.titlegroup then
     if args.titlegroup then
         titleCell
         titleCell
             .css('border-left', '2px solid #fdfdfd')
             :css('border-left', '2px solid #fdfdfd')
             .css('width', '100%')
             :css('width', '100%')
     end
     end
   
 
     local titleColspan = 2
     local titleColspan = 2
     if args.imageleft then titleColspan = titleColspan + 1 end
     if args.imageleft then titleColspan = titleColspan + 1 end
     if args.image then titleColspan = titleColspan + 1 end
     if args.image then titleColspan = titleColspan + 1 end
     if args.titlegroup then titleColspan = titleColspan - 1 end
     if args.titlegroup then titleColspan = titleColspan - 1 end
   
 
     titleCell
     titleCell
         .cssText(args.basestyle)
         :cssText(args.basestyle)
         .cssText(args.titlestyle)
         :cssText(args.titlestyle)
         .addClass('navbox-title')
         :addClass('navbox-title')
         .attr('colspan', titleColspan)
         :attr('colspan', titleColspan)
 
     renderNavBar(titleCell)
     renderNavBar(titleCell)


     titleCell
     titleCell
         .tag('div')
         :tag('div')
             .addClass(args.titleclass)
             :addClass(args.titleclass)
             .css('font-size', '110%')
             :css('font-size', '110%')
             .wikitext(addNewline(args.title))
             :wikitext(addNewline(args.title))
end
end


139번째 줄: 137번째 줄:


     addTableRow(tbl)
     addTableRow(tbl)
         .tag('td')
         :tag('td')
             .addClass('navbox-abovebelow')
             :addClass('navbox-abovebelow')
             .addClass(args.aboveclass)
             :addClass(args.aboveclass)
             .cssText(args.basestyle)
             :cssText(args.basestyle)
             .cssText(args.abovestyle)
             :cssText(args.abovestyle)
             .attr('colspan', getAboveBelowColspan())
             :attr('colspan', getAboveBelowColspan())
             .tag('div')
             :tag('div')
                 .wikitext(addNewline(args.above))
                 :wikitext(addNewline(args.above))
end
end


153번째 줄: 151번째 줄:


     addTableRow(tbl)
     addTableRow(tbl)
         .tag('td')
         :tag('td')
             .addClass('navbox-abovebelow')
             :addClass('navbox-abovebelow')
             .addClass(args.belowclass)
             :addClass(args.belowclass)
             .cssText(args.basestyle)
             :cssText(args.basestyle)
             .cssText(args.belowstyle)
             :cssText(args.belowstyle)
             .attr('colspan', getAboveBelowColspan())
             :attr('colspan', getAboveBelowColspan())
             .tag('div')
             :tag('div')
                 .wikitext(addNewline(args.below))
                 :wikitext(addNewline(args.below))
end
end
 
--
--
--  List rows
--  List rows
168번째 줄: 166번째 줄:
local function renderListRow(tbl, listnum)
local function renderListRow(tbl, listnum)
     local row = addTableRow(tbl)
     local row = addTableRow(tbl)
   
 
     if listnum == 1 and args.imageleft then
     if listnum == 1 and args.imageleft then
         row
         row
             .tag('td')
             :tag('td')
                 .addClass('navbox-image')
                 :addClass('navbox-image')
                 .addClass(args.imageclass)
                 :addClass(args.imageclass)
                 .css('width', '0%')
                 :css('width', '0%')
                 .css('padding', '0px 2px 0px 0px')
                 :css('padding', '0px 2px 0px 0px')
                 .cssText(args.imageleftstyle)
                 :cssText(args.imageleftstyle)
                 .attr('rowspan', 2 * #listnums - 1)
                 :attr('rowspan', 2 * #listnums - 1)
                 .tag('div')
                 :tag('div')
                     .wikitext(addNewline(args.imageleft))
                     :wikitext(addNewline(args.imageleft))
     end
     end
 
     if args['group' .. listnum] then
     if args['group' .. listnum] then
         local groupCell = row.tag('th')
         local groupCell = row:tag('th')
       
 
         groupCell
         groupCell
              .attr('scope', 'row')
            :attr('scope', 'row')
              .addClass('navbox-group')
            :addClass('navbox-group')
              .addClass(args.groupclass)
            :addClass(args.groupclass)
              .cssText(args.basestyle)
            :cssText(args.basestyle)
             
 
         if args.groupwidth then
         if args.groupwidth then
             groupCell.css('width', args.groupwidth)
             groupCell:css('width', args.groupwidth)
         end
         end
         
 
         groupCell
         groupCell
             .cssText(args.groupstyle)
             :cssText(args.groupstyle)
             .cssText(args['group' .. listnum .. 'style'])
             :cssText(args['group' .. listnum .. 'style'])
             .wikitext(args['group' .. listnum])
             :wikitext(args['group' .. listnum])
     end
     end
   
 
     local listCell = row.tag('td')
     local listCell = row:tag('td')


     if args['group' .. listnum] then
     if args['group' .. listnum] then
         listCell
         listCell
             .css('text-align', 'left')
             :css('text-align', 'left')
             .css('border-left-width', '2px')
             :css('border-left-width', '2px')
             .css('border-left-style', 'solid')
             :css('border-left-style', 'solid')
     else
     else
         listCell.attr('colspan', 2)
         listCell:attr('colspan', 2)
     end
     end
   
 
     if not args.groupwidth then  
     if not args.groupwidth then
         listCell.css('width', '100%')
         listCell:css('width', '100%')
     end
     end
   
 
     local isOdd = (listnum % 2) == 1
     local isOdd = (listnum % 2) == 1
     local rowstyle = args.evenstyle
     local rowstyle = args.evenstyle
     if isOdd then rowstyle = args.oddstyle end
     if isOdd then rowstyle = args.oddstyle end
 
     local evenOdd
     local evenOdd
     if args.evenodd == 'swap' then
     if args.evenodd == 'swap' then
228번째 줄: 226번째 줄:


     listCell
     listCell
         .css('padding', '0px')
         :css('padding', '0px')
         .cssText(args.liststyle)
         :cssText(args.liststyle)
         .cssText(rowstyle)
         :cssText(rowstyle)
         .cssText(args['list' .. listnum .. 'style'])
         :cssText(args['list' .. listnum .. 'style'])
         .addClass('navbox-list')
         :addClass('navbox-list')
         .addClass('navbox-' .. evenOdd)
         :addClass('navbox-' .. evenOdd)
         .addClass(args.listclass)
         :addClass(args.listclass)
         .tag('div')
         :tag('div')
             .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
             :css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
             .wikitext(addNewline(args['list' .. listnum]))
             :wikitext(addNewline(args['list' .. listnum]))


     if listnum == 1 and args.image then
     if listnum == 1 and args.image then
         row
         row
             .tag('td')
             :tag('td')
                 .addClass('navbox-image')
                 :addClass('navbox-image')
                 .addClass(args.imageclass)
                 :addClass(args.imageclass)
                 .css('width', '0%')
                 :css('width', '0%')
                 .css('padding', '0px 0px 0px 2px')
                 :css('padding', '0px 0px 0px 2px')
                 .cssText(args.imagestyle)
                 :cssText(args.imagestyle)
                 .attr('rowspan', 2 * #listnums - 1)
                 :attr('rowspan', 2 * #listnums - 1)
                 .tag('div')
                 :tag('div')
                     .wikitext(addNewline(args.image))
                     :wikitext(addNewline(args.image))
     end
     end
end
end
260번째 줄: 258번째 줄:
local function needsHorizontalLists()
local function needsHorizontalLists()
     if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
     if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
   
 
     local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
     local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
     for i, cls in ipairs(listClasses) do
     for i, cls in ipairs(listClasses) do
277번째 줄: 275번째 줄:
local function getTrackingCategories()
local function getTrackingCategories()
     local cats = {}
     local cats = {}
     if needsHorizontalLists() then table.insert(cats, '가로 목록을 지원하지 않는 둘러보기 상자') end
     if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
     if hasBackgroundColors() then table.insert(cats, '배경색을 이용하는 둘러보기 상자') end
     if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end
     return cats
     return cats
end
end
287번째 줄: 285번째 줄:
     local subpage = title.subpageText
     local subpage = title.subpageText
     if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
     if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
   
 
     for i, cat in ipairs(getTrackingCategories()) do
     for i, cat in ipairs(getTrackingCategories()) do
         builder.wikitext('[[Category:' .. cat .. ']]')  
         builder:wikitext('[[Category:' .. cat .. ']]')
     end
     end
end
end
297번째 줄: 295번째 줄:
--
--
local function renderMainTable()
local function renderMainTable()
     local tbl = HtmlBuilder.create('table')
     local tbl = mw.html.create('table')
         .attr('cellspacing', 0)
         :addClass('nowraplinks')
        .addClass('nowraplinks')
         :addClass(args.bodyclass)
         .addClass(args.bodyclass)
 
           
     if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
     if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
         tbl
         tbl
             .addClass('collapsible')
             :addClass('collapsible')
             .addClass(args.state or 'autocollapse')
             :addClass(args.state or 'autocollapse')
     end
     end
 
     tbl.css('border-spacing', 0)
     tbl:css('border-spacing', 0)
     if border == 'subgroup' or border == 'child' or border == 'none' then
     if border == 'subgroup' or border == 'child' or border == 'none' then
         tbl
         tbl
             .addClass('navbox-subgroup')
             :addClass('navbox-subgroup')
             .cssText(args.bodystyle)
             :cssText(args.bodystyle)
             .cssText(args.style)
             :cssText(args.style)
     else -- regular navobx - bodystyle and style will be applied to the wrapper table
     else -- regular navobx - bodystyle and style will be applied to the wrapper table
         tbl
         tbl
             .addClass('navbox-inner')
             :addClass('navbox-inner')
             .css('background', 'transparent')
             :css('background', 'transparent')
             .css('color', 'inherit')
             :css('color', 'inherit')
     end
     end
     tbl.cssText(args.innerstyle)
     tbl:cssText(args.innerstyle)
 
     renderTitleRow(tbl)
     renderTitleRow(tbl)
     renderAboveRow(tbl)
     renderAboveRow(tbl)
     for i, listnum in ipairs(listnums) do
     for i, listnum in ipairs(listnums) do
         renderListRow(tbl, listnum)  
         renderListRow(tbl, listnum)
     end
     end
     renderBelowRow(tbl)
     renderBelowRow(tbl)
   
 
     return tbl
     return tbl
end
end
334번째 줄: 331번째 줄:
function p._navbox(navboxArgs)
function p._navbox(navboxArgs)
     args = navboxArgs
     args = navboxArgs
   
 
     for k, v in pairs(args) do
     for k, v in pairs(args) do
         local listnum = ('' .. k):match('^list(%d+)$')
         local listnum = ('' .. k):match('^list(%d+)$')
340번째 줄: 337번째 줄:
     end
     end
     table.sort(listnums)
     table.sort(listnums)
 
     border = trim(args.border or args[1] or '')
     border = trim(args.border or args[1] or '')


347번째 줄: 344번째 줄:


     -- render the appropriate wrapper around the navbox, depending on the border param
     -- render the appropriate wrapper around the navbox, depending on the border param
     local res = HtmlBuilder.create()
     local res = mw.html.create()
     if border == 'none' then
     if border == 'none' then
         res.node(tbl)
         res:node(tbl)
     elseif border == 'subgroup' or border == 'child' then
     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
         -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
355번째 줄: 352번째 줄:
         -- padding being applied, and at the end add a <div> to balance out the parent's </div>
         -- padding being applied, and at the end add a <div> to balance out the parent's </div>
         res
         res
             .tag('/div', {unclosed = true})
             :wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
                .done()
             :node(tbl)
             .node(tbl)
             :wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
             .tag('div', {unclosed = true})
     else
     else
         res
         res
             .tag('table')
             :tag('table')
                 .attr('cellspacing', 0)
                 :addClass('navbox')
                .addClass('navbox')
                 :css('border-spacing', 0)
                 .css('border-spacing', 0)
                 :cssText(args.bodystyle)
                 .cssText(args.bodystyle)
                 :cssText(args.style)
                 .cssText(args.style)
                 :tag('tr')
                 .tag('tr')
                     :tag('td')
                     .tag('td')
                         :css('padding', '2px')
                         .css('padding', '2px')
                         :node(tbl)
                         .node(tbl)
     end
     end
 
     renderTrackingCategories(res)
     renderTrackingCategories(res)
 
     return tostring(res)
     return tostring(res)
end
end
local param_ko = {
local param_ko = {
     ['이름'] = 'name',
     ['이름'] = 'name',
익명 사용자