मॉड्यूल:Portal bar
दिखावट
|
|
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 76,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. 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 {{Portal bar/testcases}} 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,trueorinclude, then the portal box will show redlinked portals
Examples
[संपादित करें]{{#invoke:portal bar|main|Art|Science|Literature}}
Produces:
{{#invoke:portal bar|main|Art|Science|Literature|border=no}}
Produces:
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}}.
require('strict')
local p = {}
local function checkPortalExists(portal)
return not (mw.title.makeTitle(100, portal).id == 0)
end
local getImageName = require( 'Module:Portal' ).image
local yesno = require( 'Module:Yesno' )
-- Builds the portal bar used by {{portal bar}}.
function p._main( portals, args )
if #portals < 1 then return '' end -- Don't display a blank navbox if no portals were specified.
local nav = mw.html.create( 'div' )
:addClass( 'noprint metadata' )
:attr( 'role', 'navigation' )
:attr( 'aria-label' , 'प्रवेशद्वार' )
:css( 'font-weight', 'bold' )
if yesno( args.border ) == false then
nav
:css( 'padding', '0.3em 1.7em 0.1em' )
:css( 'font-size', '88%' )
:css( 'text-align', 'center' )
else
nav
:addClass( 'navbox' )
:css( 'padding', '0.4em 0em' )
end
-- scan for nonexistent portals, if they exist remove them from the portals table. If redlinks=yes, then don't remove
local portallen = #portals
-- traverse the list backwards to ensure that no portals are missed
for i=portallen,1,-1 do
if not pcall(checkPortalExists, portals[i]) or not checkPortalExists(portals[i]) then
-- Getting here means a redlinked portal has been found
if (args.redlinks == 'yes') or (args.redlinks == 'y') or (args.redlinks == 'true') or (args.redlinks == 'include') then
nav:wikitext('[[श्रेणी:लाल लिंक वाले प्रवेशद्वार के साथ प्रवेशद्वार टेम्पलेट]]')
break
end
-- remove the portal
table.remove(portals,i)
end
end
-- if the length of the table is different, then rows were removed from the table
if not (portallen == #portals) then
if #portals == 0 then
return '[[श्रेणी:सभी लाल लिंक वाले प्रवेशद्वार के साथ प्रवेशद्वार टेम्पलेट]]'
end
nav:wikitext('[[श्रेणी:सभी लाल लिंक वाले प्रवेशद्वार के साथ प्रवेशद्वार टेम्पलेट]]')
end
local list = mw.html.create( 'ul' )
:css( 'margin', '0.1em 0 0' )
for _, portal in ipairs( portals ) do
list
:tag( 'li' )
:css( 'display', 'inline' )
:tag( 'span' )
:css( 'display', 'inline-block' )
:css( 'white-space', 'nowrap' )
:tag( 'span' )
:css( 'margin', '0 0.5em' )
:wikitext( string.format( '[[File:%s|24x21px]]', getImageName{ portal } ) )
:done()
:wikitext( string.format( '[[प्रवेशद्वार:%s|प्रवेशद्वार:%s]]', portal, portal ) )
end
nav
:node( list )
return tostring( nav )
end
-- Processes external arguments and sends them to the other functions.
function p.main( frame )
local origArgs
if type( frame.getParent ) == 'function' then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local portals, args = {}, {}
for k, v in pairs( origArgs ) do
if type( k ) == 'number' and type( v ) == 'string' then
if mw.ustring.find( v, '%S' ) then
table.insert( portals, k )
end
elseif type( k ) ~= 'number' then
if type( v ) == 'string' then
v = mw.text.trim( v )
end
args[ k ] = v
end
end
table.sort( portals )
for i, v in ipairs( portals ) do
portals[ i ] = mw.text.trim( origArgs[ v ] )
end
return p._main( portals, args )
end
return p