×
Create a new article
Write your page title here:
We currently have 230 articles on Farthest Frontier. Type your article name above or create one of the articles listed here!



    Farthest Frontier

    Module:Message box: Difference between revisions

    Content added Content deleted
    m (1 revision imported)
    (Revising message-box module)
    Line 1: Line 1:
    -- This is a meta-module for producing message box templates, including
    -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.

    -- Load necessary modules.
    require('Module:No globals')
    require('Module:No globals')
    local getArgs
    local getArgs
    local yesno = require('Module:Yesno')
    local yesno = require('Module:Yesno')

    -- Get a language object for formatDate and ucfirst.
    local lang = mw.language.getContentLanguage()
    local lang = mw.language.getContentLanguage()


    -- Define constants
    local CONFIG_MODULE = 'Module:Message box/configuration'
    local CONFIG_MODULE = 'Module:Message box/configuration'
    local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
    local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
    local TEMPLATE_STYLES = 'Module:Message box/%s.css'


    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    Line 67: Line 59:
    args = args or {}
    args = args or {}
    local obj = {}
    local obj = {}

    obj.boxType = boxType


    -- Set the title object and the namespace.
    -- Set the title object and the namespace.
    Line 84: Line 74:
    -- use template from DEMOSPACES
    -- use template from DEMOSPACES
    obj.cfg = cfg[DEMOSPACES[demospace]]
    obj.cfg = cfg[DEMOSPACES[demospace]]
    obj.boxType = DEMOSPACES[demospace]
    elseif string.find( demospace, 'talk' ) then
    elseif string.find( demospace, 'talk' ) then
    -- demo as a talk page
    -- demo as a talk page
    obj.cfg = cfg.tmbox
    obj.cfg = cfg.tmbox
    obj.boxType = 'tmbox'
    else
    else
    -- default to ombox
    -- default to ombox
    obj.cfg = cfg.ombox
    obj.cfg = cfg.ombox
    obj.boxType = 'ombox'
    end
    end
    elseif ns == 0 then
    elseif ns == 0 then
    obj.cfg = cfg.ambox -- main namespace
    obj.cfg = cfg.ambox -- main namespace
    obj.boxType = 'ambox'
    elseif ns == 6 then
    elseif ns == 6 then
    obj.cfg = cfg.imbox -- file namespace
    obj.cfg = cfg.imbox -- file namespace
    obj.boxType = 'imbox'
    elseif ns == 14 then
    elseif ns == 14 then
    obj.cfg = cfg.cmbox -- category namespace
    obj.cfg = cfg.cmbox -- category namespace
    obj.boxType = 'cmbox'
    else
    else
    local nsTable = mw.site.namespaces[ns]
    local nsTable = mw.site.namespaces[ns]
    if nsTable and nsTable.isTalk then
    if nsTable and nsTable.isTalk then
    obj.cfg = cfg.tmbox -- any talk namespace
    obj.cfg = cfg.tmbox -- any talk namespace
    obj.boxType = 'tmbox'
    else
    else
    obj.cfg = cfg.ombox -- other namespaces or invalid input
    obj.cfg = cfg.ombox -- other namespaces or invalid input
    obj.boxType = 'ombox'
    end
    end
    end
    end
    Line 279: Line 261:
    end
    end
    if talkTitle and talkTitle.exists then
    if talkTitle and talkTitle.exists then
    local talkText
    local talkText = 'Relevant discussion may be found on'
    if self.isSmall then
    if talkArgIsTalkPage then
    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
    talkText = string.format(
    talkText = string.format('([[%s|talk]])', talkLink)
    '%s [[%s|%s]].',
    else
    talkText,
    talkText = 'Relevant discussion may be found on'
    talk,
    if talkArgIsTalkPage then
    talkTitle.prefixedText
    talkText = string.format(
    )
    '%s [[%s|%s]].',
    else
    talkText,
    talkText = string.format(
    talk,
    '%s the [[%s#%s|talk page]].',
    talkTitle.prefixedText
    talkText,
    )
    talkTitle.prefixedText,
    else
    talk
    talkText = string.format(
    )
    '%s the [[%s#%s|talk page]].',
    end
    talkText,
    talkTitle.prefixedText,
    talk
    )
    end
    end
    self.talk = talkText
    self.talk = talkText
    end
    end
    Line 308: Line 296:
    end
    end
    if date then
    if date then
    self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
    self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
    end
    end
    self.info = args.info
    self.info = args.info
    Line 330: Line 318:
    self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
    self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
    self.imageEmptyCell = cfg.imageEmptyCell
    self.imageEmptyCell = cfg.imageEmptyCell
    if cfg.imageEmptyCellStyle then
    self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
    end


    -- Left image settings.
    -- Left image settings.
    Line 354: Line 339:
    self.imageRight = imageRight
    self.imageRight = imageRight
    end
    end
    -- set templatestyles
    self.base_templatestyles = cfg.templatestyles
    self.templatestyles = args.templatestyles
    end
    end


    Line 489: Line 478:
    end
    end


    local frame = mw.getCurrentFrame()
    -- Add TemplateStyles
    root:wikitext(mw.getCurrentFrame():extensionTag{
    root:wikitext(frame:extensionTag{
    name = 'templatestyles',
    name = 'templatestyles',
    args = { src = TEMPLATE_STYLES:format(self.boxType) },
    args = { src = self.base_templatestyles },
    })
    })
    -- Add support for a single custom templatestyles sheet. Undocumented as
    -- need should be limited and many templates using mbox are substed; we
    -- don't want to spread templatestyles sheets around to arbitrary places
    if self.templatestyles then
    root:wikitext(frame:extensionTag{
    name = 'templatestyles',
    args = { src = self.templatestyles },
    })
    end


    -- Create the box table.
    -- Create the box table.
    local boxTable
    local boxTable = root:tag('table')
    -- Check for fmbox because not all interface messages have mw-parser-output
    -- which is necessary for TemplateStyles. Add the wrapper class if it is and
    -- then start the actual mbox, else start the mbox.
    if self.boxType == 'fmbox' then
    boxTable = root:tag('div')
    :addClass('mw-parser-output')
    :tag('table')
    else
    boxTable = root:tag('table')
    end

    boxTable:attr('id', self.id or nil)
    boxTable:attr('id', self.id or nil)
    for i, class in ipairs(self.classes or {}) do
    for i, class in ipairs(self.classes or {}) do
    Line 529: Line 516:
    -- image width to 52px. If any images in a div are wider than that,
    -- image width to 52px. If any images in a div are wider than that,
    -- they may overlap with the text or cause other display problems.
    -- they may overlap with the text or cause other display problems.
    imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
    imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
    end
    end
    imageLeftCell:wikitext(self.imageLeft or nil)
    imageLeftCell:wikitext(self.imageLeft or nil)
    Line 539: Line 526:
    row:tag('td')
    row:tag('td')
    :addClass('mbox-empty-cell')
    :addClass('mbox-empty-cell')
    :cssText(self.imageEmptyCellStyle or nil)
    end
    end


    Line 552: Line 538:
    :addClass('mbox-text-span')
    :addClass('mbox-text-span')
    :wikitext(self.issue or nil)
    :wikitext(self.issue or nil)
    if (self.talk or self.fix) and not self.isSmall then
    if (self.talk or self.fix) then
    textCellDiv:tag('span')
    textCellDiv:tag('span')
    :addClass('hide-when-compact')
    :addClass('hide-when-compact')
    Line 566: Line 552:
    end
    end
    if self.removalNotice then
    if self.removalNotice then
    textCellDiv:tag('small')
    textCellDiv:tag('span')
    :addClass('hide-when-compact')
    :addClass('hide-when-compact')
    :tag('i')
    :tag('i')
    Line 584: Line 570:
    -- If we are using a div, redefine imageRightCell so that the image
    -- If we are using a div, redefine imageRightCell so that the image
    -- is inside it.
    -- is inside it.
    imageRightCell = imageRightCell:tag('div'):css('width', '52px')
    imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
    end
    end
    imageRightCell
    imageRightCell
    Line 603: Line 589:
    if self.invalidTypeError then
    if self.invalidTypeError then
    root:tag('div')
    root:tag('div')
    :css('text-align', 'center')
    :addClass('mbox-invalid-type')
    :wikitext(string.format(
    :wikitext(string.format(
    'This message box is using an invalid "type=%s" parameter and needs fixing.',
    'This message box is using an invalid "type=%s" parameter and needs fixing.',
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.