更改

模块:Navbox

删除233字节2013年4月17日 (三) 01:02
以下行是添加(+)和删除(-)的内容:
---- -- This module will implement {{Navbox}} ---- This module will implement {{Navbox}} --  local HtmlBuilder = require('Module:HtmlBuilder')local HtmlBuilder = require('Module:HtmlBuilder') local Navbar = require('Module:Navbar')local Navbar = require('Module:Navbar')  local args local frame local tableRowAdded = false local border local listnums = {}local args local framelocal tableRowAdded = falselocal borderlocal listnums = {}      if tableRowAdded then  if tableRowAdded then        tbl      tbl            .tag('tr')          .tag('tr')                .css('height', '2px')              .css('height', '2px')                .tag('td')              .tag('td')    end  end    tableRowAdded = true  tableRowAdded = true    return tbl.tag('tr')  return tbl.tag('tr') <br/>-- -- Title row -- function renderTitleRow(tbl)    if not args.title then return end  local titleRow = addTableRow(tbl)--  if args.titlegroup then--  Title row      titleRow--          .tag('th')function renderTitleRow(tbl)              .attr('scope', 'row')    if not args.title then return end              .addClass('navbox-group')              .addClass(args.titlegroupclass)              .cssText(args.basestyle)              .cssText(args.groupstyle)              .cssText(args.titlegroupstyle)              .wikitext(args.titlegroup)  end    local titleRow = addTableRow(tbl)  local titleCell = titleRow.tag('th').attr('scope', 'col')    if args.titlegroup then  if args.titlegroup then        titleRow      titleCell            .tag('th')          .css('border-left', '2px solid #fdfdfd')                .attr('scope', 'row')          .css('width', '100%')                .addClass('navbox-group')  end                .addClass(args.titlegroupclass)                .cssText(args.basestyle)                .cssText(args.groupstyle)                .cssText(args.titlegroupstyle)                .wikitext(args.titlegroup)    end    local titleCell = titleRow.tag('th').attr('scope', 'col')  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    if args.titlegroup then  titleCell        titleCell      .cssText(args.basestyle)            .css('border-left', '2px solid #fdfdfd')      .cssText(args.titlestyle)            .css('width', '100%')      .addClass('navbox-title')    end      .attr('colspan', titleColspan)     local titleColspan = 2     renderNavBar(titleCell)    if args.imageleft then titleColspan = titleColspan + 1 end    if args.image then titleColspan = titleColspan + 1 end    if args.titlegroup then titleColspan = titleColspan - 1 end         .cssText(args.basestyle)         .tag('div')        .cssText(args.titlestyle)            .addClass(args.titleclass)        .addClass('navbox-title')            .css('font-size', '110%')        .attr('colspan', titleColspan)            .newline()             .wikitext(args.title)    renderNavBar(titleCell)      titleCell        .tag('div')            .addClass(args.titleclass)            .css('font-size', '110%')            .newline()            .wikitext(args.title)      -- or right to keep the title centered.  -- or right to keep the title centered.    local spacerSide = nil  local spacerSide = nil    if args.navbar == 'off' then  if args.navbar == 'off' then        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's      -- 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.      -- 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 args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) then  elseif args.navbar == 'plain' or args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) 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    else  else        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right      -- 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.      -- to balance out the width of the navbar.        if args.state == 'plain' then spacerSide = 'right' end      if args.state == 'plain' then spacerSide = 'right' end        titleCell.wikitext(Navbar.navbar({        titleCell.wikitext(Navbar.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', '8em')              .css('width', '8em')                .css('font-size', '80%')              .css('font-size', '80%')                .css('margin-' .. (spacerSide == 'left' and 'right' or 'left'), '0.5em')              .css('margin-' .. (spacerSide == 'left' and 'right' or 'left'), '0.5em')                .wikitext('&nbsp;')              .wikitext('&nbsp;')    end  end    <br/>-- -- Above/Below rows -- function renderAboveRow(tbl)-- --   Above/Below rows--function renderAboveRow(tbl)    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')                .newline()              .newline()                .wikitext(args.above)              .wikitext(args.above)       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')                .newline()              .newline()                .wikitext(args.below)              .wikitext(args.below)       if args.imageleft then ret = ret + 1 end  if args.imageleft then ret = ret + 1 end    if args.image then ret = ret + 1 end  if args.image then ret = ret + 1 end    return ret  return ret    <br/>-- -- List rows -- function renderListRow(tbl, listnum)-- --   List rows--function renderListRow(tbl, listnum)    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')                    .newline()                  .newline()                    .wikitext(args.imageleft)                  .wikitext(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&nbsp;% 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        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end      if isOdd then evenOdd = 'even' else evenOdd = 'odd' end    else  else        if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end      if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end    end  end    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')            .newline()          .newline()            .wikitext(args['list' .. listnum])          .wikitext(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')                    .newline()                  .newline()                    .wikitext(args.image)                  .wikitext(args.image)    end  end    <br/>-- -- Tracking categories -- function renderTrackingCategories(builder)-- --   Tracking categories--function renderTrackingCategories(builder)    if not frame then return end  if not frame then return end    local s = frame:preprocess('{{#ifeq:{{NAMESPACE}}|{{ns:10}}|1|0}}{{SUBPAGENAME}}')  local s = frame:preprocess('{{#ifeq:{{NAMESPACE}}|{{ns:10}}|1|0}}{{SUBPAGENAME}}')    if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space  if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space    local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))  local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))    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('') ''    end  end       if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end  if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end    if hasCustomListSpacing() then table.insert(cats, 'Navigational boxes with custom list spacing') end  if hasCustomListSpacing() then table.insert(cats, 'Navigational boxes with custom list spacing') end    if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end  if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end    return cats  return cats       local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist vcard', 'vcard hlist'}  local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist vcard', 'vcard hlist'}    for i, cls in ipairs(listClasses) do  for i, cls in ipairs(listClasses) do        if args.listclass == cls or args.bodyclass == cls then      if args.listclass == cls or args.bodyclass == cls then            return false          return false        end      end    end  end    return true  return true             args.liststyle == 'padding:0.25em 0; line-height:1.4em; width:auto;' or            args.liststyle == 'padding:0.25em 0; line-height:1.4em; width:auto;' or            args.liststyle == 'padding:0.4em 0; line-height:1.4em;'          args.liststyle == 'padding:0.4em 0; line-height:1.4em;'      <br/>-- -- Main navbox tables -- function renderMainTable()-- --   Main navbox tables--function renderMainTable()        .attr('cellspacing', 0)      .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       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+)$')''        if listnum then table.insert(listnums, tonumber(listnum)) end      if listnum then table.insert(listnums, tonumber(listnum)) end    end  end    table.sort(listnums)  table.sort(listnums)    border = trim(args.border or args[1] or '')  border = trim(args.border or args[1] or '')''    -- render the main body of the navbox  -- render the main body of the navbox    local tbl = renderMainTable()  local tbl = renderMainTable()    -- 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 = HtmlBuilder.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        -- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the      -- 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> -- padding being applied, and at the end add a<div>to balance out the parent's</div>            .tag('/div', {unclosed = true})          .tag('/div', {unclosed = true})                .done()              .done()            .node(tbl)          .node(tbl)            .tag('div', {unclosed = true})          .tag('div', {unclosed = true})    else  else        res      res            .tag('table')          .tag('table')                .attr('cellspacing', 0)              .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)       -- behavior of {{navbox}}, change any empty arguments to nil, so Lua will consider  -- behavior of {{navbox}}, change any empty arguments to nil, so Lua will consider    -- them false too.  -- them false too.    local args = {}  local args = {}    local parent_args = frame:getParent().args;  local parent_args = frame:getParent().args;    -- Out of order parsing bug.  -- Out of order parsing bug.    local temp;  local temp;    temp = parent_args.title;  temp = parent_args.title;    temp = parent_args.above;  temp = parent_args.above;    for i = 1, 35 do  for i = 1, 35 do        temp = parent_args["group" .. tostring(i)];      temp = parent_args["group" .. tostring(i)];        temp = parent_args["list" .. tostring(i)];      temp = parent_args["list" .. tostring(i)];    end       end         temp = parent_args.below;  temp = parent_args.below;    for k, v in pairs(parent_args) do  for k, v in pairs(parent_args) do        if v ~= '' then      if v ~= '' then''            args[k] = v          args[k] = v        end      end    end  end    return p._navbox(args)  return p._navbox(args)   [[Category:' .. cat .. '|'_.._cat_.._']]
匿名用户
220.181.73.78