「モジュール:Navbar」の版間の差分
提供: ひつじ小屋別館2代目
細 (英語版 2013年9月3日 (火) 13:47 より) |
細 (1版) |
(相違点なし)
|
2013年10月14日 (月) 03:58時点における版
This template is used on 2,150,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to this template should first be tested in its /sandbox or /testcases subpages, or in your own user space. The tested changes can then be added to this page in one single edit. Please consider discussing any changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of articles, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is is protected from editing. |
50x40px | This template's documentation is missing or does not accurately describe its functionality or the parameters in its code. Please help improve it. |
This is a Lua implementation of {{navbar}}. It is used in Module:Navbox.
local p = {}
local HtmlBuilder = require('Module:HtmlBuilder')
function trim(s)
return mw.ustring.match( s, "^%s*(.-)%s*$" )
end
function error(s)
local span = HtmlBuilder.create('span')
span
.addClass('error')
.css('float', 'left')
.css('white-space', 'nowrap')
.wikitext('エラー: ' .. s)
return tostring(span)
end
function getTitle( pageName )
pageName = trim( pageName );
local page_title, talk_page_title;
if mw.ustring.sub(pageName, 1, 1) == ':' then
page_title = mw.title.new( mw.ustring.sub(pageName, 2) );
else
page_title = mw.title.new( pageName, 'Template' );
end
if page_title then
talk_page_title = page_title.talkPageTitle;
else
talk_page_title = nil;
end
return page_title, talk_page_title;
end
function _navbar( args )
if not args[1] then
return error('name の指定なし')
end
local good, title, talk_title;
good, title, talk_title = pcall( getTitle, args[1] );
if not good then
return error(title);
end
if not title then
return error('ページが存在しません')
end
local mainpage = title.fullText;
local talkpage = talk_title and talk_title.fullText or ''
local editurl = title:fullUrl( 'action=edit' );
local histurl = title:fullUrl( 'action=history' );
local viewLink, talkLink, editLink, histLink = '表示', 'ノート', '編集', '履歴'
if args.mini then
viewLink, talkLink, editLink, histLink = '表', '話', '編', '歴'
end
local div = HtmlBuilder.create( 'div' )
div
.addClass( 'noprint' )
.addClass( 'plainlinks' )
.addClass( 'hlist' )
.addClass( 'navbar')
.cssText( args.style )
if args.mini then div.addClass('mini') end
if not (args.mini or args.plain) then
div
.tag( 'span' )
.css( 'word-spacing', 0 )
.cssText( args.fontstyle )
.wikitext( args.text or 'このテンプレートを:' )
.wikitext( ' ' )
end
if args.brackets then
div
.tag('span')
.css('margin-right', '-0.125em')
.cssText( args.fontstyle )
.wikitext( '[' )
.newline();
end
local ul = div.tag('ul');
ul
.tag( 'li' )
.addClass( 'nv-view' )
.wikitext( '[[' .. mainpage .. '|' )
.tag( 'span ' )
.attr( 'title', 'このテンプレートを表示します' )
.cssText( args.fontstyle or '' )
.wikitext( viewLink )
.done()
.wikitext( ']]' )
.done()
.tag( 'li' )
.addClass( 'nv-talk' )
.wikitext( '[[' .. talkpage .. '|' )
.tag( 'span ' )
.attr( 'title', 'このテンプレートのノートを表示します' )
.cssText( args.fontstyle or '' )
.wikitext( talkLink )
.done()
.wikitext( ']]' );
if not args.noedit then
ul
.tag( 'li' )
.addClass( 'nv-edit' )
.wikitext( '[' .. editurl .. ' ' )
.tag( 'span ' )
.attr( 'title', 'このテンプレートを編集します' )
.cssText( args.fontstyle or '' )
.wikitext( editLink )
.done()
.wikitext( ']' );
end
if not args.nohistory then
ul
.tag( 'li' )
.addClass( 'nv-history' )
.wikitext( '[' .. histurl .. ' ' )
.tag( 'span ' )
.attr( 'title', 'このテンプレートの過去の版を表示します' )
.cssText( args.fontstyle or '' )
.wikitext( histLink )
.done()
.wikitext( ']' );
end
if args.brackets then
div
.tag('span')
.css('margin-left', '-0.125em')
.cssText( args.fontstyle or '' )
.wikitext( ']' )
.newline();
end
return tostring(div)
end
function p.navbar(frame)
local origArgs
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
-- ParserFunctions considers the empty string to be false, so to preserve the previous
-- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
-- them false too.
args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
return _navbar(args)
end
return p