Module:User:Kai/sandbox: Difference between revisions

No edit summary
Tag: Manual revert
Add view function to display and filter feedback by status (via update-page on MediaWiki MCP Server)
Line 74: Line 74:


     return tostring(root) .. category
     return tostring(root) .. category
end
function p.view(frame)
    local parent = frame:getParent()
    local args = parent and parent.args or frame.args
    return p._view(args)
end
function p._view(args)
    if not (mw.ext and mw.ext.bucket) then
        return "<em>Bucket extension is not available.</em>"
    end
    local filterStatus = mw.text.trim(args.status or args[1] or 'all'):lower()
    local query = mw.ext.bucket('feedback')
        :select('page', 'user', 'status', 'feedback')
    if filterStatus == 'resolved' or filterStatus == 'unresolved' then
        query = query:where('status', filterStatus)
    end
    local results = query:run()
    if not results or #results == 0 then
        return "<em>No feedback entries found.</em>"
    end
    local tableRoot = mw.html.create('table')
        :addClass('wikitable sortable')
        :css('width', '100%')
    local header = tableRoot:tag('tr')
    header:tag('th'):wikitext('Page')
    header:tag('th'):wikitext('User')
    header:tag('th'):wikitext('Status')
    header:tag('th'):wikitext('Feedback')
    for _, row in ipairs(results) do
        local tr = tableRoot:tag('tr')
        tr:tag('td'):wikitext(string.format('[[%s]]', row.page or ''))
        tr:tag('td'):wikitext(formatUser(row.user))
        local isResolved = row.status == 'resolved'
        local statusText = isResolved and 'Resolved' or 'Unresolved'
        local statusStyle = isResolved and 'color: #2e7d32; font-weight: bold;' or 'color: #c62828; font-weight: bold;'
        tr:tag('td')
            :cssText(statusStyle)
            :wikitext(statusText)
        tr:tag('td'):wikitext(row.feedback or '')
    end
    return tostring(tableRoot)
end
end


return p
return p