删除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(' ') .wikitext(' ') 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 % 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_.._']]