<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AFeedback</id>
	<title>Module:Feedback - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AFeedback"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Feedback&amp;action=history"/>
	<updated>2026-04-26T05:05:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Feedback&amp;diff=34933&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local pt = require(&#039;Module:Paramtest&#039;) local yn = require(&#039;Module:Yesno&#039;) 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, &quot;&#039;&#039;No comment provided&#039;&#039;&quot;) 	local id = pt.default_to(args....&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Feedback&amp;diff=34933&amp;oldid=prev"/>
		<updated>2024-10-16T23:12:06Z</updated>

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