Module:User:Kai/sandbox: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
local p = {}
local p = {}


function p.test(frame)
local function isTruthy(v)
local root = mw.html.create("div")
    if v == nil then
:addClass("test-class")
        return false
:css({
    end
["padding"] = "10px",
    v = mw.text.trim(tostring(v)):lower()
["border"] = "1px solid red",
    return v ~= '' and v ~= '0' and v ~= 'false' and v ~= 'no' and v ~= 'off'
["width"] = "100px",
end
["height"] = "100px",
 
})
local function formatUser(user)
return tostring(root)
    user = mw.text.trim(tostring(user or ''))
    if user == '' or user:lower() == 'anonymous' then
        return 'Anonymous'
    end
    return string.format('[[User:%s|%s]]', user, user)
end
 
function p.main(frame)
    local parent = frame:getParent()
    local args = parent and parent.args or frame.args
    return p._main(frame, args)
end
 
function p._main(frame, args)
    local feedback = args.feedback or "No feedback provided"
    local user = args.user or "Anonymous"
    local resolved = isTruthy(args.resolved)
    local statusStr = resolved and 'resolved' or 'unresolved'
    local currentPage = mw.title.getCurrentTitle().fullText
 
    -- Write to Bucket database
    -- Syntax equivalent to: {{#bucket:Feedback|page=...|user=...|status=...|feedback=...}}
    local bucketOutput = frame:callParserFunction('#bucket', {
        'Feedback',
        'page=' .. currentPage,
        'user=' .. user,
        'status=' .. statusStr,
        'feedback=' .. feedback
    })
 
    -- HTML presentation
    local root = mw.html.create('div')
        :addClass('feedback-box')
        :addClass(resolved and 'feedback-box--resolved' or 'feedback-box--unresolved')
 
    local meta = root:tag('div')
        :addClass('feedback-meta')
 
    meta:tag('span')
        :addClass('feedback-user')
        :wikitext(formatUser(user))
 
    meta:tag('span')
        :addClass('feedback-separator')
        :wikitext(' • ')
 
    meta:tag('span')
        :addClass('feedback-status')
        :addClass(resolved and 'feedback-status--resolved' or 'feedback-status--unresolved')
        :wikitext(resolved and 'Resolved' or 'Unresolved')
 
    root:tag('div')
        :addClass('feedback-body')
        :wikitext(feedback)
 
    if not resolved then
        root:tag('div')
            :addClass('feedback-instruction')
            :wikitext('If this feedback has been resolved, edit this page and set <code>|resolved=true</code>.')
    end
 
    local category = resolved and '[[Category:Resolved Feedback]]' or '[[Category:Unresolved Feedback]]'
 
    return bucketOutput .. tostring(root) .. category
end
end


return p
return p

Revision as of 20:41, 27 August 2026

Documentation for this module may be created at Module:User:Kai/sandbox/doc

local p = {}

local function isTruthy(v)
    if v == nil then
        return false
    end
    v = mw.text.trim(tostring(v)):lower()
    return v ~= '' and v ~= '0' and v ~= 'false' and v ~= 'no' and v ~= 'off'
end

local function formatUser(user)
    user = mw.text.trim(tostring(user or ''))
    if user == '' or user:lower() == 'anonymous' then
        return 'Anonymous'
    end
    return string.format('[[User:%s|%s]]', user, user)
end

function p.main(frame)
    local parent = frame:getParent()
    local args = parent and parent.args or frame.args
    return p._main(frame, args)
end

function p._main(frame, args)
    local feedback = args.feedback or "No feedback provided"
    local user = args.user or "Anonymous"
    local resolved = isTruthy(args.resolved)
    local statusStr = resolved and 'resolved' or 'unresolved'
    local currentPage = mw.title.getCurrentTitle().fullText

    -- Write to Bucket database
    -- Syntax equivalent to: {{#bucket:Feedback|page=...|user=...|status=...|feedback=...}}
    local bucketOutput = frame:callParserFunction('#bucket', {
        'Feedback',
        'page=' .. currentPage,
        'user=' .. user,
        'status=' .. statusStr,
        'feedback=' .. feedback
    })

    -- HTML presentation
    local root = mw.html.create('div')
        :addClass('feedback-box')
        :addClass(resolved and 'feedback-box--resolved' or 'feedback-box--unresolved')

    local meta = root:tag('div')
        :addClass('feedback-meta')

    meta:tag('span')
        :addClass('feedback-user')
        :wikitext(formatUser(user))

    meta:tag('span')
        :addClass('feedback-separator')
        :wikitext(' • ')

    meta:tag('span')
        :addClass('feedback-status')
        :addClass(resolved and 'feedback-status--resolved' or 'feedback-status--unresolved')
        :wikitext(resolved and 'Resolved' or 'Unresolved')

    root:tag('div')
        :addClass('feedback-body')
        :wikitext(feedback)

    if not resolved then
        root:tag('div')
            :addClass('feedback-instruction')
            :wikitext('If this feedback has been resolved, edit this page and set <code>|resolved=true</code>.')
    end

    local category = resolved and '[[Category:Resolved Feedback]]' or '[[Category:Unresolved Feedback]]'

    return bucketOutput .. tostring(root) .. category
end

return p