Diferencia entre revisiones de «Módulo:Navbar»
De Familia Sanchez Arjona
(Let's not assume the error is because of the expensive function limit, it could be something else. Especially for people who import this module into MW 1.21 installations.) |
m (2 revisiones importadas) |
||
(No se muestran 20 ediciones intermedias de 10 usuarios) | |||
Línea 1: | Línea 1: | ||
local p = {} | local p = {} | ||
+ | local getArgs | ||
local HtmlBuilder = require('Module:HtmlBuilder') | local HtmlBuilder = require('Module:HtmlBuilder') | ||
− | function trim(s) | + | local function trim(s) |
− | + | return mw.ustring.match(s, "^%s*(.-)%s*$") | |
end | end | ||
− | function | + | local function htmlError(s) |
− | + | local span = HtmlBuilder.create('span') | |
− | + | span | |
− | + | .addClass('error') | |
− | + | .css('float', 'left') | |
− | + | .css('white-space', 'nowrap') | |
− | + | .wikitext('Error: ' .. s) | |
− | + | return tostring(span) | |
end | end | ||
− | function getTitle( pageName ) | + | local 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 | end | ||
− | function _navbar( args ) | + | function p._navbar(args) |
− | + | local good, title, talk_title; | |
− | + | local titleArg = 1 | |
− | + | ||
− | + | if args.collapsible then | |
− | + | titleArg = 2 | |
− | + | if not args.plain then | |
− | + | args.mini = 1 | |
− | + | end | |
− | + | if args.fontcolor then | |
+ | args.fontstyle = 'color:' .. args.fontcolor .. ';' | ||
+ | end | ||
+ | args.style = 'float:left; text-align:left; width:6em;' | ||
+ | end | ||
+ | |||
+ | good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())); | ||
+ | if not good then | ||
+ | return htmlError(title); | ||
+ | end | ||
+ | |||
+ | if not title then | ||
+ | return htmlError('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().tag('div') | ||
+ | div | ||
+ | .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 | |
− | + | ||
− | + | if args.collapsible then | |
− | + | div | |
− | + | .done() | |
− | + | .tag('span') | |
− | + | .css('font-size', '110%') | |
− | + | .cssText(args.fontstyle or '') | |
− | + | .wikitext(args[1]) | |
− | + | end | |
− | + | ||
− | + | return tostring(div.allDone()) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
function p.navbar(frame) | function p.navbar(frame) | ||
− | + | if not getArgs then | |
− | + | getArgs = require('Module:Arguments').getArgs | |
− | + | end | |
− | + | return p._navbar(getArgs(frame)) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | ||
return p | return p |
Revisión actual del 14:43 31 may 2016
Uso
local p = {} local getArgs local HtmlBuilder = require('Module:HtmlBuilder') local function trim(s) return mw.ustring.match(s, "^%s*(.-)%s*$") end local function htmlError(s) local span = HtmlBuilder.create('span') span .addClass('error') .css('float', 'left') .css('white-space', 'nowrap') .wikitext('Error: ' .. s) return tostring(span) end local 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 p._navbar(args) local good, title, talk_title; local titleArg = 1 if args.collapsible then titleArg = 2 if not args.plain then args.mini = 1 end if args.fontcolor then args.fontstyle = 'color:' .. args.fontcolor .. ';' end args.style = 'float:left; text-align:left; width:6em;' end good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())); if not good then return htmlError(title); end if not title then return htmlError('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().tag('div') div .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 if args.collapsible then div .done() .tag('span') .css('font-size', '110%') .cssText(args.fontstyle or '') .wikitext(args[1]) end return tostring(div.allDone()) end function p.navbar(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return p._navbar(getArgs(frame)) end return p