<?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=MediaWiki%3AGadget-articlefeedback-core.js</id>
	<title>MediaWiki:Gadget-articlefeedback-core.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-articlefeedback-core.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;action=history"/>
	<updated>2026-04-11T05:08:57Z</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=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=42177&amp;oldid=prev</id>
		<title>Alex at 11:06, 20 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=42177&amp;oldid=prev"/>
		<updated>2024-10-20T11:06:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;amp;diff=42177&amp;amp;oldid=39011&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=39011&amp;oldid=prev</id>
		<title>Alex at 16:14, 17 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=39011&amp;oldid=prev"/>
		<updated>2024-10-17T16:14:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;amp;diff=39011&amp;amp;oldid=38879&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=38879&amp;oldid=prev</id>
		<title>Alex at 16:12, 17 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=38879&amp;oldid=prev"/>
		<updated>2024-10-17T16:12:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;amp;diff=38879&amp;amp;oldid=34578&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=34578&amp;oldid=prev</id>
		<title>Alex at 23:09, 16 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=34578&amp;oldid=prev"/>
		<updated>2024-10-16T23:09:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:09, 17 October 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            API_ENDPOINT: &#039;https://api.weirdgloop.org/wiki/feedback&#039;,&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            API_ENDPOINT: &#039;https://api.weirdgloop.org/wiki/feedback&#039;,&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            RESTRICTED_PAGES: [&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            RESTRICTED_PAGES: [&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            	// List of pages where only logged-in users should see the feedback button&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            	// List of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.&lt;/ins&gt;pages where only logged-in users should see the feedback button&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            	&#039;Gender&#039;, &#039;Makeover Mage&#039;, &#039;Pronouns&#039;, &#039;Body type&#039;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            	&#039;Gender&#039;, &#039;Makeover Mage&#039;, &#039;Pronouns&#039;, &#039;Body type&#039;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        	],&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        	],&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 244:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 244:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        };&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        };&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    mw.loader.using([&#039;mediawiki.api&#039;, &#039;ext.gadget.rsw-util&#039;, &#039;oojs-ui-core&#039;, &#039;oojs-ui.styles.icons-interactions&#039;], function () {&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    mw.loader.using([&#039;mediawiki.api&#039;, &#039;ext.gadget.rsw-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.&lt;/ins&gt;util&#039;, &#039;oojs-ui-core&#039;, &#039;oojs-ui.styles.icons-interactions&#039;], function () {&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        $(self.init);&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        $(self.init);&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    });&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    });&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=852&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;/** &lt;nowiki&gt;  * Gadget for the wiki article feedback feature.  * @author Jayden  */  &#039;use strict&#039;; (function($, mw){     var conf = mw.config.get([             &#039;wgNamespaceNumber&#039;,             &#039;wgTitle&#039;,             &#039;wgAction&#039;,             &#039;wgArticleId&#039;,             &#039;wgUserGroups&#039;         ]),          self = {             // Constants             API_ENDPOINT: &#039;https://api.weirdgloop.org/wiki/feedback&#039;,             RESTRICTED_PAGES: [             	// List of pages where...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=MediaWiki:Gadget-articlefeedback-core.js&amp;diff=852&amp;oldid=prev"/>
		<updated>2024-10-13T00:33:00Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;* &amp;lt;nowiki&amp;gt;  * Gadget for the wiki article feedback feature.  * @author Jayden: &lt;/span&gt;  &amp;#039;use strict&amp;#039;; (function($, mw){     var conf = mw.config.get([             &amp;#039;wgNamespaceNumber&amp;#039;,             &amp;#039;wgTitle&amp;#039;,             &amp;#039;wgAction&amp;#039;,             &amp;#039;wgArticleId&amp;#039;,             &amp;#039;wgUserGroups&amp;#039;         ]),          self = {             // Constants             API_ENDPOINT: &amp;#039;https://api.weirdgloop.org/wiki/feedback&amp;#039;,             RESTRICTED_PAGES: [             	// List of pages where...&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/** &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 * Gadget for the wiki article feedback feature.&lt;br /&gt;
 * @author Jayden&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&amp;#039;use strict&amp;#039;;&lt;br /&gt;
(function($, mw){&lt;br /&gt;
    var conf = mw.config.get([&lt;br /&gt;
            &amp;#039;wgNamespaceNumber&amp;#039;,&lt;br /&gt;
            &amp;#039;wgTitle&amp;#039;,&lt;br /&gt;
            &amp;#039;wgAction&amp;#039;,&lt;br /&gt;
            &amp;#039;wgArticleId&amp;#039;,&lt;br /&gt;
            &amp;#039;wgUserGroups&amp;#039;&lt;br /&gt;
        ]),&lt;br /&gt;
&lt;br /&gt;
        self = {&lt;br /&gt;
            // Constants&lt;br /&gt;
            API_ENDPOINT: &amp;#039;https://api.weirdgloop.org/wiki/feedback&amp;#039;,&lt;br /&gt;
            RESTRICTED_PAGES: [&lt;br /&gt;
            	// List of pages where only logged-in users should see the feedback button&lt;br /&gt;
            	&amp;#039;Gender&amp;#039;, &amp;#039;Makeover Mage&amp;#039;, &amp;#039;Pronouns&amp;#039;, &amp;#039;Body type&amp;#039;&lt;br /&gt;
        	],&lt;br /&gt;
&lt;br /&gt;
            // Variables&lt;br /&gt;
            selectedRating: 0,&lt;br /&gt;
            submitBtn: null,&lt;br /&gt;
            $trigger: null,&lt;br /&gt;
            $feedbackInput: null,&lt;br /&gt;
            stack: null,&lt;br /&gt;
            panel1: null,&lt;br /&gt;
            panel2: null,&lt;br /&gt;
            window: null,&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Startup method&lt;br /&gt;
             */&lt;br /&gt;
            init: function () {&lt;br /&gt;
            	if (self.RESTRICTED_PAGES.includes(conf.wgTitle) &amp;amp;&amp;amp; !conf.wgUserGroups.includes(&amp;#039;autoconfirmed&amp;#039;)) {&lt;br /&gt;
            		return;&lt;br /&gt;
            	}&lt;br /&gt;
            	&lt;br /&gt;
                self.buildModal();&lt;br /&gt;
                self.buildTrigger();&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Build the element that triggers the modal.&lt;br /&gt;
             */&lt;br /&gt;
            buildTrigger: function () {&lt;br /&gt;
                var trigger = new OO.ui.ButtonWidget( {&lt;br /&gt;
                    label: &amp;#039;Give feedback&amp;#039;,&lt;br /&gt;
                    icon: &amp;#039;feedback&amp;#039;,&lt;br /&gt;
                } );&lt;br /&gt;
&lt;br /&gt;
                trigger.on(&amp;#039;click&amp;#039;, function() {&lt;br /&gt;
                    self.openModal();&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
                $(&amp;#039;#firstHeading&amp;#039;).append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).addClass(&amp;#039;wgl-feedback-container&amp;#039;).append(trigger.$element)&lt;br /&gt;
                );&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Build the modal we will show for providing article feedback.&lt;br /&gt;
             */&lt;br /&gt;
            buildModal: function () {&lt;br /&gt;
                var init = function (modal) {&lt;br /&gt;
                    self.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );&lt;br /&gt;
&lt;br /&gt;
                    // Create star rating UI&lt;br /&gt;
                    var star = $(&amp;quot;&amp;lt;svg xmlns=&amp;#039;http://www.w3.org/2000/svg&amp;#039; width=&amp;#039;24&amp;#039; height=&amp;#039;24&amp;#039; viewBox=&amp;#039;0 0 24 24&amp;#039;&amp;gt;&amp;lt;path d=&amp;#039;M12 .587l3.668 7.568 8.332 1.151-6.064 5.828 1.48 8.279-7.416-3.967-7.417 3.967 1.481-8.279-6.064-5.828 8.332-1.151z&amp;#039;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;quot;).addClass(&amp;#039;rs-feedback-star&amp;#039;);&lt;br /&gt;
                    var stars = [star.clone(), star.clone(), star.clone(), star.clone(), star.clone()];&lt;br /&gt;
&lt;br /&gt;
                    var i;&lt;br /&gt;
                    stars.map(function (star) {&lt;br /&gt;
                    	// When we click on a star...&lt;br /&gt;
                        star.on(&amp;#039;click&amp;#039;, function () {&lt;br /&gt;
                            i = stars.indexOf(star);&lt;br /&gt;
                            &lt;br /&gt;
                            var selectedLength = $(&amp;#039;.rs-feedback-star-selected&amp;#039;).length - 1;&lt;br /&gt;
                            &lt;br /&gt;
                            // This whole if statement could probably be 10x cleaner but I lack the brain capacity right now to try and do something nice without ES6 syntax&lt;br /&gt;
                            &lt;br /&gt;
                            if (!star.hasClass(&amp;#039;rs-feedback-star-selected&amp;#039;)) {&lt;br /&gt;
                                // ...if this DOES NOT have selected class, give this star + all previous ones it&lt;br /&gt;
                                for (i; i &amp;gt;= 0; --i) stars[i].addClass(&amp;#039;rs-feedback-star-selected&amp;#039;);&lt;br /&gt;
                            } else if (selectedLength === 0 &amp;amp;&amp;amp; selectedLength === i) {&lt;br /&gt;
                            	// ...if this DOES have the selected class, but it&amp;#039;s the only star, remove it&lt;br /&gt;
                            	$(&amp;#039;.rs-feedback-star-selected&amp;#039;).removeClass(&amp;#039;rs-feedback-star-selected&amp;#039;);&lt;br /&gt;
                            } else if (($(&amp;#039;.rs-feedback-star-selected&amp;#039;).length - 1) === i) {&lt;br /&gt;
                                // ...if this DOES have the selected class, and this is the last star, remove the selected class&lt;br /&gt;
                                for (i; i &amp;lt; stars.length; ++i) stars[i].removeClass(&amp;#039;rs-feedback-star-selected&amp;#039;);&lt;br /&gt;
                            } else  {&lt;br /&gt;
                            	// ...if this DOES have the selected class, but this is not the last star, remove everything after this&lt;br /&gt;
                            	stars.forEach(function (ele, ix) {&lt;br /&gt;
                            		if (ix &amp;gt; i) {&lt;br /&gt;
                            			ele.removeClass(&amp;#039;rs-feedback-star-selected&amp;#039;);&lt;br /&gt;
                            		}&lt;br /&gt;
                            	})&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
                            self.selectedRating = $(&amp;#039;.rs-feedback-star-selected&amp;#039;).length;&lt;br /&gt;
                        })&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                    var finalStarUi = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).append(&lt;br /&gt;
                        $(&amp;#039;&amp;lt;h5&amp;gt;&amp;#039;).text(&amp;#039;Give feedback on this page&amp;#039;),&lt;br /&gt;
                        $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).addClass(&amp;#039;rs-feedback-star-container&amp;#039;).append(&lt;br /&gt;
                        	$(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).addClass(&amp;#039;rs-feedback-stars&amp;#039;).append(stars),&lt;br /&gt;
                        	$(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).addClass(&amp;#039;text-grey small&amp;#039;).text(&amp;#039;(optional)&amp;#039;)&lt;br /&gt;
                        )&lt;br /&gt;
                    );&lt;br /&gt;
&lt;br /&gt;
                    self.$feedbackInput = new OO.ui.MultilineTextInputWidget( { placeholder: &amp;#039;What can be improved on this page?&amp;#039;, id: &amp;#039;rs-feedback-feedback&amp;#039;, rows: 5, autosize: true, autofocus: true} );&lt;br /&gt;
&lt;br /&gt;
                    self.submitBtn = new OO.ui.ButtonInputWidget( {&lt;br /&gt;
                        label: &amp;#039;Submit&amp;#039;,&lt;br /&gt;
                        flags: [ &amp;#039;primary&amp;#039;, &amp;#039;progressive&amp;#039; ]&lt;br /&gt;
                    } );&lt;br /&gt;
                    var b1click = (&amp;#039;click&amp;#039;, function(modal) {&lt;br /&gt;
                        // When the submit button is clicked, do the submission...&lt;br /&gt;
                        self.submit();&lt;br /&gt;
                    });&lt;br /&gt;
                    self.submitBtn.on(&amp;#039;click&amp;#039;, b1click, [modal]);&lt;br /&gt;
&lt;br /&gt;
                    var cancelBtn = new OO.ui.ButtonInputWidget( {&lt;br /&gt;
                        label: &amp;#039;Cancel&amp;#039;,&lt;br /&gt;
                    } );&lt;br /&gt;
                    var close = function(modal) {&lt;br /&gt;
                        self.closeModal();&lt;br /&gt;
                    };&lt;br /&gt;
                    cancelBtn.on(&amp;#039;click&amp;#039;, close, [modal]);&lt;br /&gt;
&lt;br /&gt;
                    self.panel1.$element.append(finalStarUi, self.$feedbackInput.$element, $(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).addClass(&amp;#039;wgl-feedback-error&amp;#039;), self.submitBtn.$element, cancelBtn.$element );&lt;br /&gt;
&lt;br /&gt;
                    self.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );&lt;br /&gt;
                    self.panel2.$element.append(&lt;br /&gt;
                        $(&amp;#039;&amp;lt;h3&amp;gt;&amp;#039;).text(&amp;#039;Thank you!&amp;#039;),&lt;br /&gt;
                        $(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).html(&amp;#039;Your feedback has been brought up for discussion on our Discord server. You can join by clicking &amp;lt;strong&amp;gt;Open Discord App&amp;lt;/strong&amp;gt;.&amp;#039;),&lt;br /&gt;
                        $(&amp;#039;&amp;lt;iframe&amp;gt;&amp;#039;)&lt;br /&gt;
                            .addClass(&amp;#039;rs-feedback-discord&amp;#039;)&lt;br /&gt;
                            .css(&amp;#039;border-top&amp;#039;, &amp;#039;1px&amp;#039;)&lt;br /&gt;
                            .css(&amp;#039;margin&amp;#039;, &amp;#039;1em 0&amp;#039;)&lt;br /&gt;
                            .attr(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
                            .attr(&amp;#039;height&amp;#039;, &amp;#039;500px&amp;#039;)&lt;br /&gt;
                            .attr(&amp;#039;frameBorder&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                    self.stack = new OO.ui.StackLayout({&lt;br /&gt;
                        items: [self.panel1, self.panel2]&lt;br /&gt;
                    })&lt;br /&gt;
                    modal.$body.append( self.stack.$element );&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                rs.createOOUIWindow(&amp;#039;feedback&amp;#039;, &amp;#039;Submit feedback for &amp;#039; + conf.wgTitle, {size: &amp;#039;large&amp;#039;, classes: [&amp;#039;rs-feedback-modal&amp;#039;]}, init, false, true, true).then(function (w) {&lt;br /&gt;
                    self.window = w;&lt;br /&gt;
                    self.window.$element.on(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
                        if (e.target !== this) return;&lt;br /&gt;
                        self.closeModal();&lt;br /&gt;
                    })&lt;br /&gt;
                });&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Open the modal&lt;br /&gt;
             */&lt;br /&gt;
            openModal: function (e) {&lt;br /&gt;
                if (e) { e.preventDefault(); }&lt;br /&gt;
                window.OOUIWindowManager.openWindow( &amp;#039;feedback&amp;#039; );&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Close the modal&lt;br /&gt;
             */&lt;br /&gt;
            closeModal: function () {&lt;br /&gt;
                self.resetForm();&lt;br /&gt;
                window.OOUIWindowManager.closeWindow( &amp;#039;feedback&amp;#039; );&lt;br /&gt;
                self.stack.setItem(self.panel1);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Reset the form entirely&lt;br /&gt;
             */&lt;br /&gt;
            resetForm: function () {&lt;br /&gt;
                self.setError(&amp;#039;&amp;#039;);&lt;br /&gt;
                self.submitBtn.setDisabled(false);&lt;br /&gt;
                $(&amp;#039;.rs-feedback-star-selected&amp;#039;).removeClass(&amp;#039;rs-feedback-star-selected&amp;#039;);&lt;br /&gt;
                self.selectedRating = 0;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Actually do the submission&lt;br /&gt;
             */&lt;br /&gt;
            submit: function () {&lt;br /&gt;
                self.submitBtn.setDisabled(true);&lt;br /&gt;
                self.setError(&amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
                // Ensure that feedback was provided&lt;br /&gt;
                var feedbackInputValue = self.$feedbackInput.value.trim();&lt;br /&gt;
                if (!feedbackInputValue) {&lt;br /&gt;
                    self.setError(&amp;#039;Please provide feedback!&amp;#039;);&lt;br /&gt;
                    self.submitBtn.setDisabled(false);&lt;br /&gt;
                    return;&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                // Make API call to save feedback&lt;br /&gt;
                self.submitToAPI(self.selectedRating, feedbackInputValue);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            showResultPage: function () {&lt;br /&gt;
              self.stack.setItem(self.panel2);&lt;br /&gt;
              // This is here so that we don&amp;#039;t load the iframe until the result page is displayed&lt;br /&gt;
              $(&amp;#039;.rs-feedback-discord&amp;#039;).attr(&amp;#039;src&amp;#039;, &amp;#039;https://e.widgetbot.io/channels/177206626514632704/269673599554551808&amp;#039;);&lt;br /&gt;
              self.window.updateSize();&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Make API call&lt;br /&gt;
             */&lt;br /&gt;
            submitToAPI: function (rating, feedback) {&lt;br /&gt;
                $.ajax(self.API_ENDPOINT, {&lt;br /&gt;
                    data: JSON.stringify({wiki: &amp;#039;osw&amp;#039;, page: conf.wgArticleId, rating: rating, feedback: feedback}),&lt;br /&gt;
                    type: &amp;#039;POST&amp;#039;,&lt;br /&gt;
                    contentType: &amp;#039;application/json&amp;#039;&lt;br /&gt;
                })&lt;br /&gt;
                    .done(function () {&lt;br /&gt;
                        self.showResultPage();&lt;br /&gt;
                    })&lt;br /&gt;
                    .fail(function (jqXHR) {&lt;br /&gt;
                        self.setError(&amp;#039;There was a problem. Please try again later.&amp;#039;);&lt;br /&gt;
                        self.submitBtn.setDisabled(false);&lt;br /&gt;
                    })&lt;br /&gt;
                ;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Set an error message&lt;br /&gt;
             */&lt;br /&gt;
            setError: function(error) {&lt;br /&gt;
                $(&amp;#039;.wgl-feedback-error&amp;#039;).text(error);&lt;br /&gt;
                self.window.updateSize();&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
    mw.loader.using([&amp;#039;mediawiki.api&amp;#039;, &amp;#039;ext.gadget.rsw-util&amp;#039;, &amp;#039;oojs-ui-core&amp;#039;, &amp;#039;oojs-ui.styles.icons-interactions&amp;#039;], function () {&lt;br /&gt;
        $(self.init);&lt;br /&gt;
    });&lt;br /&gt;
})(window.$, window.mw);&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>