Jump to content

Module:Message box: Difference between revisions

Fixed a few of the ambox bugs. Still have to add category support.
m>Mr. Stradivarius
(more ambox stuff - still a little broken)
m>Mr. Stradivarius
(Fixed a few of the ambox bugs. Still have to add category support.)
Line 17: Line 17:
         end
         end
     end
     end
     return page or mw.title.getCurrentTitle()
     return page
end
 
local function presentButBlank(s)
    if type(s) ~= 'string' then return end
    if s and not mw.ustring.find(s, '%S') then
        return true
    else
        return false
    end
end
end


Line 24: Line 33:
     local title = mw.title.getCurrentTitle()
     local title = mw.title.getCurrentTitle()
     local nsid = title.namespace
     local nsid = title.namespace
    -- Get a language object for formatDate.
    local lang = mw.language.getContentLanguage()
      
      
-- Commenting this out for now - this will require tinkering with Namespace detect to differentiate between
-- Commenting this out for now - this will require tinkering with Namespace detect to differentiate between
Line 48: Line 60:


     -- Process data for collapsible text fields
     -- Process data for collapsible text fields
     local text, talk, fix, date, info
     local name, issue, talk, fix, date, info
     if data.useCollapsibleTextFields then
     if data.useCollapsibleTextFields then
         text = args.issue
         name = args.name
        local nameTitle = getTitleObject(name)
        local isTemplatePage = nameTitle and title.prefixedText == ('Template:' .. nameTitle.text) and true or false
        local sect = args.sect
        if presentButBlank(sect) then
            sect = 'This article '
        elseif type(sect) == 'string' then
            sect = 'This ' .. sect .. ' '
        end
        issue = (sect or '') .. (args.issue or '') .. ' ' .. (args.text or '')
         talk = args.talk
         talk = args.talk
        if presentButBlank(talk) and isTemplatePage then
            talk = '#'
        end
         fix = args.fix
         fix = args.fix
         date = args.date
         date = args.date
        if presentButBlank(date) and isTemplatePage then
            date = lang:formatDate('F Y')
        end
         info = args.info
         info = args.info
     else
     end
        text = args.text
 
    -- Process the talk link, if present.
    if talk then
        -- See if the talk link exists and is for a talk or a content namespace.
        local talkTitle = type(talk) == 'string' and getTitleObject(talk)
        if not talkTitle or not talkTitle.isTalkPage then
            -- If we couldn't process the talk page link, get the talk page of the current page.
            local success
            success, talkTitle = pcall(title.talkPageTitle, title)
            if not success then
                talkTitle = nil
            end
        end
        if talkTitle and talkTitle.exists then
            local talkText = ' Relevant discussion may be found on'
            if talkTitle.isTalkPage then
                talkText = mw.ustring.format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
            else
                talkText = mw.ustring.format('%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk)
            end
            talk = talkText
        end
     end
     end


     -- Find whether we are using a small message box and process our data accordingly.
     -- Find whether we are using a small message box and process our data accordingly.
     local isSmall = data.allowSmall and (args.small == 'yes' or args.small == true) and true or false
     local isSmall = data.allowSmall and (args.small == 'yes' or args.small == true) and true or false
     local smallClass, image, imageRight, imageSize
     local smallClass, image, imageRight, text, imageSize
     if isSmall then
     if isSmall then
         smallClass = data.smallClass or 'mbox-small'
         smallClass = data.smallClass or 'mbox-small'
         image = args.smallimage or args.image
         image = args.smallimage or args.image
         imageRight = args.smallimageright or args.imageright
         imageRight = args.smallimageright or args.imageright
         text = args.smalltext or text
         if data.useCollapsibleTextFields then
            text = args.smalltext or issue
        else
            text = args.smalltext or args.text
        end
         imageSize = data.imageSmallSize or '30x30px'
         imageSize = data.imageSmallSize or '30x30px'
     else
     else
Line 72: Line 124:
         imageRight = args.imageright
         imageRight = args.imageright
         imageSize = '40x40px'
         imageSize = '40x40px'
        text = args.text
     end
     end
    ------------------------ Get the box structure ----------------------------
    local root = htmlBuilder.create() -- Includes error messages and categories added after the box.
    local substCheck = root.tag('b').addClass('error')
    local box = root.tag('table')
    local row = box.tag('tr')
    local imageLeftCell = row.tag('td').addClass('mbox-image')
    local textCell = row.tag('td').addClass('mbox-text')
    local imageRightCell = row.tag('td').addClass('mbox-imageright')


     ------------------------ Build the box ----------------------------
     ------------------------ Build the box ----------------------------
   
    local root = htmlBuilder.create()


     -- Do the subst check.
     -- Do the subst check.
     if data.substCheck and args.subst == 'SUBST' then
     if data.substCheck and args.subst == 'SUBST' then
         if type(args.name) == 'string' then
         if type(args.name) == 'string' then
             substCheck
             root
                 .wikitext(mw.ustring.format(
                 .tag('b')
                    'Template <code>%s%s%s</code> has been incorrectly substituted.',
                    .addClass('error')
                    mw.text.nowiki('{{'),
                    .wikitext(mw.ustring.format(
                    args.name,
                        'Template <code>%s%s%s</code> has been incorrectly substituted.',
                    mw.text.nowiki('}}')
                        mw.text.nowiki('{{'),
                ))
                        args.name,
                        mw.text.nowiki('}}')
                    ))
         end
         end
         root.wikitext('[[Category:Pages with incorrectly substituted templates]]') -- This puts the category at the *end* of the output, rather than after the subst error message.
         root.wikitext('[[Category:Pages with incorrectly substituted templates]]')
     end
     end


     -- Build the box.
     -- Build the box.
    local box = root.tag('table')
     box
     box
         .attr('id', args.id)
         .attr('id', args.id)
Line 116: Line 164:


     -- Add the left-hand image.
     -- Add the left-hand image.
    local row = box.tag('tr')
    local imageLeftCell = row.tag('td').addClass('mbox-image')
     local imageCheckBlank = data.imageCheckBlank
     local imageCheckBlank = data.imageCheckBlank
     if image ~= 'none' and not imageCheckBlank or image ~= 'none' and imageCheckBlank and image ~= 'blank' then
     if image ~= 'none' and not imageCheckBlank or image ~= 'none' and imageCheckBlank and image ~= 'blank' then
Line 130: Line 180:


     -- Add the text.
     -- Add the text.
    local textCell = row.tag('td').addClass('mbox-text')
     if data.useCollapsibleTextFields then
     if data.useCollapsibleTextFields then
         textCell
         textCell
Line 136: Line 187:
         textCellSpan
         textCellSpan
             .addClass('mbox-text-span')
             .addClass('mbox-text-span')
             .wikitext(text)
             .wikitext(issue)
         if not isSmall then
         if not isSmall then
             textCellSpan
             textCellSpan
Line 142: Line 193:
                     .addClass('hide-when-compact')
                     .addClass('hide-when-compact')
                     .wikitext(talk)
                     .wikitext(talk)
                    .wikitext(' ')
                     .wikitext(fix)
                     .wikitext(fix)
                     .done()
                     .done()
Line 160: Line 212:


     -- Add the right-hand image.
     -- Add the right-hand image.
    local imageRightCell = row.tag('td').addClass('mbox-imageright')
     if imageRight and not (data.imageRightNone and imageRight == 'none') then
     if imageRight and not (data.imageRightNone and imageRight == 'none') then
         if not isSmall and data.imageCellDiv then
         if not isSmall and data.imageCellDiv then
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.