Skabelon:Navboks: Forskelle mellem versioner

Fra Martinus Wiki
(Oprettede siden med "-- -- This module implements {{Navbox}} -- local p = {} local navbar = require('Module:Navbar')._navbar local getArgs -- lazily initialized local args local tableRowAdded...")
m (1 version importeret)
 
(En mellemliggende version af den samme bruger vises ikke)
Linje 1: Linje 1:
--
<includeonly>{{#invoke:Navboks|navbox}}<!--
-- This module implements {{Navbox}}
Link al tool templatetransclusioncheck
--
-->{{#ifeq:Skabelon:{{{navn|}}}|{{FULLPAGENAME}}|{{tjek navboks links}} {{#if:{{{liste_class|}}}{{{ignore_liste_class_tjek|}}} || [[Kategori:Navigationsbokse uden liste class]]}}}}</includeonly><noinclude>


local p = {}
<!--{{pp-template|small=yes}}
{{documentation}}-->
{{template doc}}


local navbar = require('Module:Navbar')._navbar
local getArgs -- lazily initialized


local args
<!-- Add categories and interwikis to the /doc subpage, not here! -->
local tableRowAdded = false
</noinclude>
local border
local listnums = {}
 
local function trim(s)
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
end
 
local function addNewline(s)
    if s:match('^[*:;#]') or s:match('^{|') then
        return '\n' .. s ..'\n'
    else
        return s
    end
end
 
local function addTableRow(tbl)
    -- If any other rows have already been added, then we add a 2px gutter row.
    if tableRowAdded then
        tbl
            :tag('tr')
                :css('height', '2px')
                :tag('td')
                    :attr('colspan',2)
    end
 
    tableRowAdded = true
 
    return tbl:tag('tr')
end
 
local function renderNavBar(titleCell)
    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
    -- or right to keep the title centered.
    local spacerSide = nil
 
    if args.navbar == 'off' then
        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
        if args.status == 'plain' then spacerSide = 'right' end
    elseif args.navbar == 'plain' or (not args.navn and mw.getCurrentFrame():getParent():getTitle():gsub('/sandkasse$', '') == 'Skabelon:Navboks') then
        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
        if args.status ~= 'plain' then spacerSide = 'left' end
    else
        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
        -- to balance out the width of the navbar.
        if args.status == 'plain' then spacerSide = 'right' end
 
        titleCell:wikitext(navbar{
            args.navn,
            mini = 1,
            fontstyle = (args.grund_style or '') .. ';' .. (args.titel_style or '') ..  ';background:none transparent;border:none;'
        })
    end
 
    -- Render the spacer div.
    if spacerSide then
        titleCell
            :tag('span')
                :css('float', spacerSide)
                :css('width', '6em')
                :wikitext('&nbsp;')
    end
end
 
--
--  Title row
--
local function renderTitleRow(tbl)
    if not args.titel then return end
 
    local titleRow = addTableRow(tbl)
 
    if args.titel_gruppe then
        titleRow
            :tag('th')
                :attr('scope', 'row')
                :addClass('navbox-group')
                :addClass(args.titel_gruppe_class)
                :cssText(args.grund_style)
                :cssText(args.gruppe_style)
                :cssText(args.titel_gruppe_style)
                :wikitext(args.titel_gruppe)
    end
 
    local titleCell = titleRow:tag('th'):attr('scope', 'col')
 
    if args.titel_gruppe then
        titleCell
            :css('border-left', '2px solid #fdfdfd')
            :css('width', '100%')
    end
 
    local titleColspan = 2
    if args.billede_venstre then titleColspan = titleColspan + 1 end
    if args.billede then titleColspan = titleColspan + 1 end
    if args.titel_gruppe then titleColspan = titleColspan - 1 end
 
    titleCell
        :cssText(args.grund_style)
        :cssText(args.titel_style)
        :addClass('navbox-title')
        :attr('colspan', titleColspan)
 
    renderNavBar(titleCell)
 
    titleCell
        :tag('div')
            :addClass(args.titel_class)
            :css('font-size', '110%')
            :wikitext(addNewline(args.titel))
end
 
--
--  Above/Below rows
--
 
local function getAboveBelowColspan()
    local ret = 2
    if args.billede_venstre then ret = ret + 1 end
    if args.billede then ret = ret + 1 end
    return ret
end
 
local function renderAboveRow(tbl)
    if not args.over then return end
 
    addTableRow(tbl)
        :tag('td')
            :addClass('navbox-abovebelow')
            :addClass(args.over_class)
            :cssText(args.grund_style)
            :cssText(args.over_style)
            :attr('colspan', getAboveBelowColspan())
            :tag('div')
                :wikitext(addNewline(args.over))
end
 
local function renderBelowRow(tbl)
    if not args.under then return end
 
    addTableRow(tbl)
        :tag('td')
            :addClass('navbox-abovebelow')
            :addClass(args.under_class)
            :cssText(args.grund_style)
            :cssText(args.under_style)
            :attr('colspan', getAboveBelowColspan())
            :tag('div')
                :wikitext(addNewline(args.under))
end
 
--
--  List rows
--
local function renderListRow(tbl, listnum)
    local row = addTableRow(tbl)
 
    if listnum == 1 and args.billede_venstre then
        row
            :tag('td')
                :addClass('navbox-image')
                :addClass(args.billede_class)
                :css('width', '0%')
                :css('padding', '0px 1px 0px 0px')
                :cssText(args.billede_venstre_style)
                :attr('rowspan', 2 * #listnums - 1)
                :tag('div')
                    :wikitext(addNewline(args.billede_venstre))
    end
 
    if args['gruppe' .. listnum] then
        local groupCell = row:tag('th')
 
        groupCell
            :attr('scope', 'row')
            :addClass('navbox-group')
            :addClass(args.gruppe_class)
            :cssText(args.grund_style)
 
        if args.groupwidth then
            groupCell:css('width', args.groupwidth)
        end
 
        groupCell
            :cssText(args.gruppe_style)
            :cssText(args['gruppe' .. listnum .. '_style'])
            :wikitext(args['gruppe' .. listnum])
    end
 
    local listCell = row:tag('td')
 
    if args['gruppe' .. listnum] then
        listCell
            :css('text-align', 'left')
            :css('border-left-width', '2px')
            :css('border-left-style', 'solid')
    else
        listCell:attr('colspan', 2)
    end
 
    if not args.groupwidth then
        listCell:css('width', '100%')
    end
 
    local isOdd = (listnum % 2) == 1
    local rowstyle = args.lige_style
    if isOdd then rowstyle = args.ulige_style end
 
    local evenOdd
    if args.lige_ulige == 'swap' then
        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
    else
        if isOdd then evenOdd = args.lige_ulige or 'odd' else evenOdd = args.lige_ulige or 'even' end
    end
 
    listCell
        :css('padding', '0px')
        :cssText(args.liste_style)
        :cssText(rowstyle)
        :cssText(args['liste' .. listnum .. '_style'])
        :addClass('navbox-list')
        :addClass('navbox-' .. evenOdd)
        :addClass(args.liste_class)
        :tag('div')
            :css('padding', (listnum == 1 and args.list1padding) or args.liste_padding or '0em 0.25em')
            :wikitext(addNewline(args['liste' .. listnum]))
 
    if listnum == 1 and args.billede then
        row
            :tag('td')
                :addClass('navbox-image')
                :addClass(args.billede_class)
                :css('width', '0%')
                :css('padding', '0px 0px 0px 1px')
                :cssText(args.billede_style)
                :attr('rowspan', 2 * #listnums - 1)
                :tag('div')
                    :wikitext(addNewline(args.billede))
    end
end
 
 
--
--  Tracking categories
--
 
local function needsHorizontalLists()
    if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
 
    local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
    for i, cls in ipairs(listClasses) do
        if args.liste_class == cls or args.body_class == cls then
            return false
        end
    end
 
    return true
end
 
local function hasBackgroundColors()
    return mw.ustring.match(args.titel_style or '','background') or mw.ustring.match(args.gruppe_style or '','background') or mw.ustring.match(args.grund_style or '','background')
end
 
local function getTrackingCategories()
    local cats = {}
    if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
    if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end
    return cats
end
 
local function renderTrackingCategories(builder)
    local title = mw.title.getCurrentTitle()
    if title.namespace ~= 10 then return end -- not in template space
    local subpage = title.subpageText
    if subpage == 'doc' or subpage == 'sandkasse' or subpage == 'testcases' then return end
 
    -- for i, cat in ipairs(getTrackingCategories()) do
    --    builder:wikitext('[[Kategori:' .. cat .. ']]')
    -- end
end
 
--
--  Main navbox tables
--
local function renderMainTable()
    local tbl = mw.html.create('table')
        :addClass('nowraplinks')
        :addClass(args.body_class)
 
    if args.titel and (args.status ~= 'plain' and args.status ~= 'off') then
        tbl
            :addClass('collapsible')
            :addClass(args.status or 'autocollapse')
    end
 
    tbl:css('border-spacing', 0)
    if border == 'subgroup' or border == 'child' or border == 'none' then
        tbl
            :addClass('navbox-subgroup')
            :cssText(args.body_style)
            :cssText(args.style)
    else -- regular navobx - bodystyle and style will be applied to the wrapper table
        tbl
            :addClass('navbox-inner')
            :css('background', 'transparent')
            :css('color', 'inherit')
    end
    tbl:cssText(args.indre_style)
 
    renderTitleRow(tbl)
    renderAboveRow(tbl)
    for i, listnum in ipairs(listnums) do
        renderListRow(tbl, listnum)
    end
    renderBelowRow(tbl)
 
    return tbl
end
 
function p._navbox(navboxArgs)
    args = navboxArgs
 
    for k, v in pairs(args) do
        local listnum = ('' .. k):match('^liste(%d+)$')
        if listnum then table.insert(listnums, tonumber(listnum)) end
    end
    table.sort(listnums)
 
    border = trim(args.ramme or args[1] or '')
 
    -- render the main body of the navbox
    local tbl = renderMainTable()
 
    -- render the appropriate wrapper around the navbox, depending on the border param
    local res = mw.html.create()
    if border == 'none' then
        res:node(tbl)
    elseif border == 'subgroup' or border == 'child' then
        -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
        -- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
        -- padding being applied, and at the end add a <div> to balance out the parent's </div>
        res
            :wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
            :node(tbl)
            :wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
    else
        res
            :tag('table')
                :addClass('navbox')
                :css('border-spacing', 0)
                :cssText(args.body_style)
                :cssText(args.style)
                :tag('tr')
                    :tag('td')
                        :css('padding', '2px')
                        :node(tbl)
    end
 
    renderTrackingCategories(res)
 
    return tostring(res)
end
 
function p.navbox(frame)
    if not getArgs then
        getArgs = require('Module:Arguments').getArgs
    end
    args = getArgs(frame, {wrappers = 'Skabelon:Navboks'})
 
    -- Read the arguments in the order they'll be output in, to make references number in the right order.
    local _
    _ = args.titel
    _ = args.over
    for i = 1, 20 do
        _ = args["gruppe" .. tostring(i)]
        _ = args["liste" .. tostring(i)]
    end
    _ = args.under
 
    return p._navbox(args)
end
 
return p

Nuværende version fra 25. jan. 2021, 02:21


Fil:Ambox warning orange.svg
Denne skabelon bliver brugt på 71.542 sider.
For at undgå store forstyrrelser og unødvendigt pres på serverne, bør alle ændringer af skabelonen først afprøves i dens tilhørende /sandkasse eller /test-undersider, eller i din egen sandkasse. De færdigafprøvede ændringer kan derefter overføres til denne side ved en enkelt redigering. Overvej venligst at diskutere alle ændringer på diskussionssiden før du implementerer dem.

Denne skabelon gør opsætningen af en navigationsskabelon hurtig og nem -- det eneste, du skal gøre, er at fodre den med indholdet. Skabelonen er udstyret med et standardstylesheet der burde virke til de fleste navigationsskabeloner -- man kan dog også ændre farver hvis man synes det er passende. At ændre andre ting end farver er også muligt, men frarådes stærkt. Brugen af denne skabelon anbefales stærkt ifm. standardiseringen af navigationsskabeloner.

Brug

Fjern venligst tomme parametre

{{Navboks
|navn      = {{subst:PAGENAME}}
|titel     = 
|liste_class = hlist
|billede   = 
|over      = 
|gruppe1   = 
|liste1    = 
|gruppe2   = 
|liste2    = 
 ...
|gruppe20  = 
|liste20   = 
|under     = 
}}

Parameterliste

Navboksen bruger minuskler til parametrenavne som vist i boksen (til højre). Hvis de obligatoriske parametre navn og titel udelades laver man en en-linje-boks uden overskrift.

Bemærk at "gruppe1" (osv.) er valgfri, ligesom sektionerne kaldet "over/under".
De grundlæggende og mest normale parametre er som følger (se nedenfor for fuld liste):

navn - navnet på skabelonen.
titel - tekst i titellinjen, for eksempel: [[Dyr i middelalderen]].
status - autocollapse, uncollapsed, collapsed: status på boksvisningen, hvor "autocollapse" automatisk slår navboxene sammen hvis der er flere oven på hinanden.
titel_style - et CSS-style til titellinjen, for eksempel: background:gray;
gruppe_style - et CSS-style til gruppe-cellerne, for eksempel: background:#eee;
billede - et valgfrit billede i højre side, skrevet med hele fil-tagget: [[Fil:XX.jpg|90px]] ).
billede_venstre - et valgfrit billede i venstre side med samme kode som "billede"-parameteren.
over - tekst, der fremkommer over group/list-sektionen (kunne fx være en liste af overordnede wikilinks).
gruppen - den vestrestillede tekst før list-n (hvis group-n udelades, starter list-n helt til venstre i boksen).
listen - tekst, der lister wikilinks. Disse wikilinks skal separeres med {{·}}
under - valgfri tekst, der vises under group/list-sektionen. Bruges ofte til portal-henvisninger.

Flere detaljer og komplekse begrænsninger forklares nedenfor i sektionen Parameter descriptions. Se nogle alternative navboxformater under: Layout of table.

Forskel mellem engelske og danske parametre

Hvad der skal ændres for at oversætte "Navbox" til "Navboks":

  1. {{Navbox skal ændres til {{Navboks
  2. | below skal ændres til | under
  3. | above skal ændres til | over
  4. | name skal ændres til | navn
  5. | title skal ændres til | titel
  6. | listn skal ændres til | listen
  7. | groupn skal ændres til | gruppen
  8. | basestyle skal ændres til | grund_style
  9. | bodystyle skal ændres til | body_style
  10. | bodyclass skal ændres til | body_class
  11. | titlestyle skal ændres til | titel_style
  12. | belowstyle skal ændres til | under_style
  13. | belowclass skal ændres til | under_class
  14. | abovestyle skal ændres til | over_style
  15. | aboveclass skal ændres til | over_class
  16. | groupstyle skal ændres til | gruppe_style
  17. | groupclass skal ændres til | gruppe_class
  18. | groupnstyle skal ændres til | gruppen_style
  19. | liststyle skal ændres til | liste_style
  20. | listclass skal ændres til | liste_class
  21. | listnstyle skal ændres til | listen_style
  22. | image skal ændres til | billede
  23. | imageleft skal ændres til | billede_venstre
  24. | listpadding skal ændres til | liste_padding
  25. | oddstyle skal ændres til | ulige_style
  26. | evenstyle skal ændres til | lige_style
  27. | evenodd skal ændres til | lige_ulige
  28. | imagestyle skal ændres til | billede_style
  29. | imageleftstyle skal ændres til | billede_venstre_style
  30. | titlegroup skal ændres til | titel_gruppe
  31. | titlegroupstyle skal ændres til | titel_gruppe_style
  32. | innerstyle skal ændres til | indre_style
  33. | state skal ændres til | status
  34. | border skal ændres til | kant
  35. Efter | name skal der skrives "Navboks" foran det, der kommer bagefter.
  36. Skabelonen skal flyttes til Skabelon:Navboks xxxx

Tabellayout

Tabel genereret af {{Navboks}} uden billede, over og under parametre (grå listebaggrundsfarve kun vist for illustration):

Tabel genereret af {{Navboks}} med billede, over og under parameters (grå listebaggrundsfarve kun vist for illustration):

Tabel genereret af {{Navboks}} med billede, billede_venstre, lists, og uden groups, over, under (grå listebaggrundsfarve kun vist for illustration):

Eksempler

Intet billede

{{Navboks
|navn  = Navboks/doc
|titel = [[Multimedia Super Corridor|MSC (Multimedia Super Corridor) Malaysia]]{{-}}''uden billede''
|liste_class = hlist
|gruppe1 = Centre
|liste1  = [[Cyberjaya]]
|gruppe2 = Area
|liste2  = [[Klang Valley]]
|gruppe3 = Major landmarks
|liste3  =
* [[Petronas Towers|Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
|gruppe4 = Infrastructure
|liste4  = [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
|gruppe5 = Prime applications
|liste5  = [[EGovernment]]
* [[MyKad]]  
}}

Med billede, uden grupper

{{Navboks
|navn  = Navboks/doc
|titel = [[Multimedia Super Corridor|MSC (Multimedia Super Corridor) Malaysia]]
|billede = [[Fil:Flag of Malaysia.svg|80px]]
|liste_class = hlist
|liste1 = [[Petronas Towers|Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
}}

Med to billeder, uden grupper, flere lister

{{Navboks
|navn  = Navboks/doc
|titel = [[Multimedia Super Corridor|MSC (Multimedia Super Corridor) Malaysia]]
|billede = [[Fil:Flag of Malaysia.svg|80px]]
|billede_venstre = [[Fil:Flag of Malaysia.svg|80px]]
|liste_class = hlist
|liste1 =
* [[Petronas Towers|Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
|liste2 =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
|liste3 =
* [[EGovernment]]
* [[MyKad]]
|liste4 =
* [[Klang Valley]]
}}

Med billede, grupper, over, under

{{Navboks
|navn  = Navboks/doc
|titel = [[Multimedia Super Corridor|MSC (Multimedia Super Corridor) Malaysia]]
|billede = [[Fil:Flag of Malaysia.svg|80px]]
|liste_class = hlist
|over = over text goes here
|gruppe1 = Centre
|liste1  =
* [[Cyberjaya]]
|gruppe2 = Area
|liste2  =
* [[Klang Valley]]
|gruppe3 = Major landmarks
|liste3  =
* [[Petronas Towers|Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
|gruppe4 = Infrastructure
|liste4  =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
|gruppe5 = Prime applications
|liste5  =
* [[EGovernment]]
* [[MyKad]]
|under  = Website: [http://www.msc.com.my/ www.msc.com.my]
}}

Se også

  • {{Navboks med kolonner}} (en) – Muliggør kolonner i stedet for grupper/lister
  • {{Navboks med sammenklappelige afsnit}} (en) – Endnu en variant.
  • Linjeombrydning, "word wrap" (en) – The how-to guide about how to handle word wraps (line breaks) on Wikipedia, such as the wrapping of the link lists used in navboxes.
  • {{Nowrap begin}} – The recommended format for adding bullets, pipes, or dashes between list items. The page describes how to go about using them with proper wrapping.
  • {{Nobold}} – To display text at normal font-weight within a context where the default font-weight is bold, e.g. header cells in tables.
  • {{·}} and {{•}} – The dot and bullet commonly used to separate items in Navboks lists.
  • Skabelon:Collapsible list, når man bare skal bruge en sammenklappelig liste uden formatering.
Navigation templates comparison
view · talk · edit Sammenklappelige Overskrift farve Billede Grupper Style (body)
parameter/s
Eksempler
{{Navboks}} collapsible navboks Left/right of body Ja Ja
{{Navboks med sammenklappelige afsnit}} collapsible navboks Left/right of body and/or in each list Ja Ja
{{Navboks med kolonner}} collapsible navboks Left/right of columns Nej Ja
Collapsible attributes
Type CSS classes JavaScript Collapses when Custom
initial state
Nesting
Sammenklappelige tableller collapsible Defined in Common.js 2 or more autocollapse on page Ja Ja