"ഘടകം:Navbar" എന്ന താളിന്റെ പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം
ദൃശ്യരൂപം
ഉള്ളടക്കം മായ്ച്ചു ഉള്ളടക്കം ചേർത്തു
handle expensive parser function limit without killing the box |
also trap talk title |
||
വരി 21: | വരി 21: | ||
function getTitle( pageName ) |
function getTitle( pageName ) |
||
pageName = trim( pageName ); |
pageName = trim( pageName ); |
||
local page_title, talk_page_title; |
|||
if mw.ustring.sub(pageName, 1, 1) == ':' then |
if mw.ustring.sub(pageName, 1, 1) == ':' then |
||
page_title = mw.title.new( mw.ustring.sub(pageName, 2) ); |
|||
else |
else |
||
page_title = mw.title.new( pageName, 'Template' ); |
|||
end |
end |
||
if page_title then |
|||
talk_page_title = page_title.talkPageTitle; |
|||
else |
|||
talk_page_title = nil; |
|||
end |
|||
return page_title, talk_page_title; |
|||
end |
end |
||
വരി 33: | വരി 43: | ||
end |
end |
||
local good, title; |
local good, title, talk_title; |
||
good, title = pcall( getTitle, args[1] ); |
good, title, talk_title = pcall( getTitle, args[1] ); |
||
if not good then |
if not good then |
||
return error('Expensive parser function limit exceeded'); |
return error('Expensive parser function limit exceeded'); |
||
വരി 44: | വരി 54: | ||
local mainpage = title.fullText; |
local mainpage = title.fullText; |
||
local talkpage = |
local talkpage = talk_title and talk_title.fullText or '' |
||
local editurl = title:fullUrl( 'action=edit' ); |
local editurl = title:fullUrl( 'action=edit' ); |
||
05:53, 2 ഏപ്രിൽ 2013-നു നിലവിലുണ്ടായിരുന്ന രൂപം
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, 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 protected from editing. |
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('Error: ' .. 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('No name provided')
end
local good, title, talk_title;
good, title, talk_title = pcall( getTitle, args[1] );
if not good then
return error('Expensive parser function limit exceeded');
end
if not title then
return error('Page does not exist')
end
local mainpage = title.fullText;
local talkpage = talk_title and talk_title.fullText or ''
local editurl = title:fullUrl( 'action=edit' );
local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
if args.mini then
viewLink, talkLink, editLink = 'v', 't', 'e'
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 'This box:' )
.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', 'View this template' )
.cssText( args.fontstyle or '' )
.wikitext( viewLink )
.done()
.wikitext( ']]' )
.done()
.tag( 'li' )
.addClass( 'nv-talk' )
.wikitext( '[[' .. talkpage .. '|' )
.tag( 'span ' )
.attr( 'title', 'Discuss this template' )
.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', 'Edit this template' )
.cssText( args.fontstyle or '' )
.wikitext( editLink )
.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