Module:Feedback
Documentation for this module may be created at Module:Feedback/doc
local pt = require('Module:Paramtest')
local yn = require('Module:Yesno')
local p = {}
p.yn=yn
function p.main(frame)
return p._main(frame:getParent().args)
end
function p._main(args)
local isResolved = false
if pt.has_content(args.resolved) then
isResolved = yn(args.resolved)
end
local stars = tonumber(args.rating) or 0
stars = math.min(math.floor(stars), 5)
local comment = pt.default_to(args.feedback, "''No comment provided''")
local id = pt.default_to(args.id, '')
local fbdate = nil
if pt.has_content(args.date) then
fbdate = args.date
end
local outDiv = mw.html.create('div')
outDiv:addClass('tile gloop-feedback-wrapper')
:attr('id', 'gloop-feedback-scrollto-'..id)
:attr('data-id', id)
:css({
['margin-bottom'] = '0.75em'
})
local toggleDiv = outDiv:tag('div')
toggleDiv:css({
['float'] = 'right',
['padding'] = '0.25em 0.5em',
['border-radius'] = '5px',
['font-size'] = '0.85em',
['font-weight'] = '800',
['margin'] = '0 0 10px 10px'
})
if isResolved then
toggleDiv:addClass('table-bg-green gloop-feedback-resolve-toggle')
:tag('span'):wikitext('Resolved[[Category:Pages with resolved feedback]]')
else
toggleDiv:addClass('table-bg-red gloop-feedback-resolve-toggle')
:tag('span'):wikitext('Unresolved[[Category:Pages with unresolved feedback]]')
end
local starsP = outDiv:tag('div'):addClass('gloop-feedback-rating gloop-feedback-rating-'..tostring(stars)):tag('p')
for i=0,stars-1,1 do
starsP:wikitext('[[File:Star.svg|25px|link=]]')
end
outDiv:newline():newline()
outDiv:tag('div')
:addClass('gloop-feedback-comment')
:wikitext(comment)
outDiv:newline():newline()
:tag('span')
:css({
['font-size'] = '0.9em'
})
:wikitext('—Submitted via [[RuneScape:Article feedback|Article feedback]]')
-- 1 => talk
if mw.title.getCurrentTitle().namespace == 1 then
mw.smw.subobject({
['Feedback resolved'] = tostring(isResolved),
['Feedback comment'] = mw.text.nowiki(comment),
['Feedback ID'] = id,
['Feedback stars'] = stars,
['Feedback timestamp'] = fbdate
})
end
return tostring(outDiv)
end
function p.list(frame)
return p._list(frame:getParent().args)
end
function p._list(args)
function stars(x)
local ret = ''
for i=0,x-1,1 do
ret = ret .. '[[File:Star.svg|15px|link=]]'
end
return ret
end
local query = {
'[[Feedback ID::+]]',
'?Feedback ID',
'?Feedback comment',
'?Feedback stars',
'?Feedback resolved',
'?Feedback timestamp',
'?#-=',
sort='Feedback timestamp',
order='desc',
limit = 2500
}
if pt.has_content(args.page) then
table.insert(query, 2, '[[Talk:'..args.page..']]')
end
local resolvedfilter = '[[Feedback resolved::false]]'
if pt.has_content(args.show) then
if string.lower(args.show) == 'resolved' then
resolvedfilter = '[[Feedback resolved::true]]'
elseif string.lower(args.show) == 'all' then
resolvedfilter = '[[Feedback resolved::+]]'
end
end
table.insert(query, 2, resolvedfilter)
local data = mw.smw.ask(query)
if data == nil then
return tostring('No feedback to display.')
end
local lang = mw.getContentLanguage()
local outT = mw.html.create('table')
local header = outT:addClass('wikitable sortable')
:tag('tr')
:tag('th'):wikitext('Page'):done()
:tag('th'):wikitext('Date'):done()
:tag('th'):wikitext('Comment'):done()
if pt.has_content(args.show) and string.lower(args.show) == 'all' then
header:tag('th'):wikitext('Resolved'):done()
end
for i,v in ipairs(data) do
local tr = outT:newline():tag('tr')
local pagename = string.gsub(v[1], '^Talk:(.*)#.*$', '%1')
local fbdate = v['Feedback timestamp']
local fbsort = 0
if fbdate then
fbsort = fbdate
fbdate = lang:formatDate('Y-m-d H:i:s', '@'..string.sub(fbdate,0,-4))
else
fbdate = ''
end
tr :tag('td')
:wikitext('[['..pagename..']]' .. ' ([[Talk:'..pagename..'#gloop-feedback-scrollto-'..v['Feedback ID']..'|talk]])'):done()
:tag('td')
:attr('data-sort-value', fbsort):wikitext(fbdate):done()
:tag('td')
:wikitext(v['Feedback comment']):done()
if pt.has_content(args.show) and string.lower(args.show) == 'all' then
if yn(v['Feedback resolved']) then
tr:tag('td'):wikitext('[[File:Yes check.svg|15px|link=]]')
else
tr:tag('td'):wikitext('[[File:X mark.svg|15px|link=]]')
end
end
end
return tostring(outT)
end
return p