Module:Portal bar: Difference between revisions
use the _navbox function instead of the navbox function, and switch from Module:Navbox/sandbox to Module:Navbox |
m Protected Module:Portal bar: High-risk Lua module ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) |
(No difference)
|
Revision as of 05:18, 16 September 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 Lua module is used on approximately 150,000 pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
This module depends on the following other modules: |
This module uses TemplateStyles: |
This module implements the {{portal bar}} template. It displays a horizontal bar of portals.
See here and here for testcases.
Note: in order to make the test cases work, the Sandbox CSS classes have "-sand" appended to their names. If you wish to update the CSS, copy the contents of each class from Module:Portal bar/sandbox/styles.css to Module:Portal bar/styles.css, but do not alter the class names, nor just copy-paste the entire CSS file. For the current difference in CSS between Sandbox and Main, see here.
Usage
{{#invoke:Portal bar|main|''portal 1''|''portal 2 ''|...|border=''no''}}
- Positional parameters - the names of the portals to be displayed.
border
- if|border=
is equal tono
,n
,false
, or0
, then the portal box will have no border.redlinks
- if|redlinks=
is equal toyes
,y
,true
orinclude
, then the portal box will show redlinked portals
Examples
{{#invoke:portal bar|main|Visual arts|Science|Literature}}
Produces:
Lua error in package.lua at line 80: module 'Module:HtmlBuilder' not found.
{{#invoke:portal bar|main|Visual arts|Science|Literature|border=no}}
Produces:
Lua error in package.lua at line 80: module 'Module:HtmlBuilder' not found.
For further examples, see Template:Portal bar/testcases.
Images
This module uses Module:Portal to get portal images. To add, change, or remove images, please see the instructions at Module:Portal#Image.
-- This module implements {{portal bar}}.
local p = {}
local htmlBuilder = require( 'Module:HtmlBuilder' )
local buildNavbox = require( 'Module:Navbox' )._navbox
local getImageName = require( 'Module:Portal' ).image
-- Builds the portal bar used by {{portal bar}}.
function p._main( portals )
if #portals < 1 then return '' end -- Don't display a blank navbox if no portals were specified.
local root = htmlBuilder.create( 'ul' )
for i, portal in ipairs( portals ) do
root
.tag( 'li' )
.css( 'display', 'inline' )
.css( 'white-space', 'nowrap' )
.tag( 'span' )
.css( 'margin', 'auto 0.5em' )
.wikitext( mw.ustring.format( '[[File:%s|24x21px]]', getImageName{ portal } ) )
.done()
.tag( 'span' )
.css( 'font-weight', 'bold' )
.wikitext( mw.ustring.format( '[[Portal:%s|%s portal]]', portal, portal ) )
end
return buildNavbox{
name = 'Portal bar',
bodyclass = 'noprint',
list1 = tostring( root )
}
end
-- Processes external arguments and sends them to the other functions.
function p.main( frame )
-- If called via #invoke, use the args passed into the invoking
-- template, or the args passed to #invoke if any exist. Otherwise
-- assume args are being passed directly in from the debug console
-- or from another Lua module.
local args
if frame == mw.getCurrentFrame() then
args = frame:getParent().args
for k, v in pairs( frame.args ) do
args = frame.args
break
end
else
args = frame
end
-- Process the args to make an array of portal names that can be used with ipairs. We need to use ipairs because we want to list
-- all the portals in the order they were passed to the template, but we also want to be able to deal with positional arguments
-- passed explicitly, for example {{portal|2=Politics}}. The behaviour of ipairs is undefined if nil values are present, so we
-- need to make sure they are all removed.
local portals = {}
for k, v in pairs( args ) do
if type( k ) == 'number' and type( v ) == 'string' then -- Make sure we have no non-string portal names.
if mw.ustring.find( v, '%S' ) then -- Remove blank values.
table.insert( portals, k )
end
end
end
table.sort( portals )
for i, v in ipairs( portals ) do
portals[ i ] = mw.text.trim( args[ v ] ) -- Swap keys with values, trimming whitespace.
end
return p._main( portals )
end
return p