<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.seculargames.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFashionQuest.js</id>
	<title>MediaWiki:FashionQuest.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.seculargames.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFashionQuest.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.seculargames.org/index.php?title=MediaWiki:FashionQuest.js&amp;action=history"/>
	<updated>2026-07-29T05:22:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.seculargames.org/index.php?title=MediaWiki:FashionQuest.js&amp;diff=45798&amp;oldid=prev</id>
		<title>imported&gt;Loramin at 18:37, 26 February 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.seculargames.org/index.php?title=MediaWiki:FashionQuest.js&amp;diff=45798&amp;oldid=prev"/>
		<updated>2021-02-26T18:37:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;$(function() {&lt;br /&gt;
&lt;br /&gt;
var eqClasses = [&amp;#039;Bard&amp;#039;, &amp;#039;Cleric&amp;#039;, &amp;#039;Druid&amp;#039;, &amp;#039;Enchanter&amp;#039;, &amp;#039;Magician&amp;#039;, &amp;#039;Monk&amp;#039;, &amp;#039;Necromancer&amp;#039;, &amp;#039;Paladin&amp;#039;, &amp;#039;Ranger&amp;#039;, &amp;#039;Rogue&amp;#039;, &amp;#039;Shadow Knight&amp;#039;, &amp;#039;Shaman&amp;#039;, &amp;#039;Warrior&amp;#039;, &amp;#039;Wizard&amp;#039;];&lt;br /&gt;
var armorSlots = [&amp;#039;Arms&amp;#039;, &amp;#039;Chest&amp;#039;, &amp;#039;Feet&amp;#039;, &amp;#039;Hands&amp;#039;, &amp;#039;Head&amp;#039;, &amp;#039;Legs&amp;#039;, &amp;#039;Wrist&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
// TODO: Get this like we get the colors, ie. by parsing fashionquest guide&lt;br /&gt;
// (that way if new styles are added they&amp;#039;ll be added here)&lt;br /&gt;
var robeStyles = [&amp;#039;Crimson Robe of Alendine&amp;#039;, &amp;#039;Cryosilk Robe&amp;#039;, &amp;#039;Flowing Black Robe&amp;#039;, &amp;#039;Plain Robe&amp;#039;, &amp;#039;Robe of the Kedge&amp;#039;, &amp;#039;Robe of the Oracle&amp;#039;, &amp;#039;Shining Metallic Robes&amp;#039;]&lt;br /&gt;
var fashionStyles = [&amp;#039;Cloth&amp;#039;, &amp;#039;Leather&amp;#039;, &amp;#039;Velious Leather 1&amp;#039;, &amp;#039;Velious Leather 2&amp;#039;, &amp;#039;Chain&amp;#039;, &amp;#039;Kunark Chain&amp;#039;, &amp;#039;Velious Chain 1&amp;#039;, &amp;#039;Velious Chain 2&amp;#039;, &amp;#039;Plate&amp;#039;, &amp;#039;Velious Plate 1&amp;#039;, &amp;#039;Velious Plate 2&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This function uses a little-known JS feature of *someRegex*.exec, &lt;br /&gt;
 * where calling it repeatedly returns different results.  It uses a while&lt;br /&gt;
 * loop (bleh) to do so.&lt;br /&gt;
 */&lt;br /&gt;
var extractColors = function(html) {&lt;br /&gt;
  var colors = [];&lt;br /&gt;
  var regex= /&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;\/Category:Fashion:_.*?&amp;quot; title=&amp;quot;Category:Fashion: (.*?)&amp;quot;/g;&lt;br /&gt;
&lt;br /&gt;
  var matched;&lt;br /&gt;
  while(matched = regex.exec(html)) colors.push(matched[1]);&lt;br /&gt;
  return colors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @returns a promise that evaluates to an object containing color categories,&lt;br /&gt;
 *          by fetching the fashion quest guide and string-parsing it&amp;#039;s HTML&lt;br /&gt;
 *          (sloppy but it works).&lt;br /&gt;
 */&lt;br /&gt;
var getColorCategories = function() {&lt;br /&gt;
  return $.get(&amp;#039;https://wiki.project1999.com/FashionQuest_Guide&amp;#039;)&lt;br /&gt;
          .then(function(html) {&lt;br /&gt;
            return html&lt;br /&gt;
              .split(/\/table/m)&lt;br /&gt;
              // we split by table, but there were other tables we didn&amp;#039;t care about,&lt;br /&gt;
              // so filter through and find only the color ones&lt;br /&gt;
              .filter(function(html) {&lt;br /&gt;
                return html.includes(&amp;#039;mw-headline&amp;#039;) &amp;amp;&amp;amp;&lt;br /&gt;
                       html.includes(&amp;#039;Category&amp;lt;/th&amp;#039;);&lt;br /&gt;
              })&lt;br /&gt;
              .reduce(function(categories, html) {&lt;br /&gt;
                var name = html.match(&amp;#039;id=&amp;quot;.*?&amp;quot;&amp;gt;(.*?)&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&amp;#039;)[1];&lt;br /&gt;
                categories[name] = extractColors(html);&lt;br /&gt;
                return categories;&lt;br /&gt;
              }, {});&lt;br /&gt;
          });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
getColorCategories().then(function(colorCategories) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var buildOptionsFromArray = function(arr, defaultText) {&lt;br /&gt;
    return &amp;#039;&amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;&amp;#039; + defaultText + &amp;#039;&amp;lt;/option&amp;gt;&amp;#039; + arr&lt;br /&gt;
      .flat(2)&lt;br /&gt;
      .sort()&lt;br /&gt;
      .map(function(value) {&lt;br /&gt;
        return &amp;#039;&amp;lt;option value=&amp;quot;&amp;#039; + value + &amp;#039; &amp;quot;&amp;gt;&amp;#039; + value + &amp;#039;&amp;lt;/option&amp;gt;&amp;#039;;&lt;br /&gt;
      }).join(&amp;#039;\n&amp;#039;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildClassSelect = function() {&lt;br /&gt;
    var options =  buildOptionsFromArray(eqClasses, &amp;#039;All&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;classSelect&amp;quot;&amp;gt;&amp;#039; + options + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildSlotSelect = function() {&lt;br /&gt;
    var options =  buildOptionsFromArray(armorSlots, &amp;#039;All&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;slotSelect&amp;quot;&amp;gt;&amp;#039; + options + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildStyleSelect = function() {&lt;br /&gt;
    var options =  buildOptionsFromArray(fashionStyles, &amp;#039;All&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;styleSelect&amp;quot;&amp;gt;&amp;#039; + options + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildRobeSelect = function() {&lt;br /&gt;
    var options =  buildOptionsFromArray(robeStyles, &amp;#039;All&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;robeSelect&amp;quot;&amp;gt;&amp;#039; + options + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildBaseColorSelect = function() {&lt;br /&gt;
    var optionsHtml = buildOptionsFromArray(Object.keys(colorCategories), &amp;#039;Any&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;baseColorSelect&amp;quot;&amp;gt;&amp;#039; + optionsHtml + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var buildSpecificColorSelect = function() {&lt;br /&gt;
    var optionsHtml = buildOptionsFromArray(Object.values(colorCategories), &amp;#039;Any&amp;#039;);&lt;br /&gt;
    return &amp;#039;&amp;lt;select id=&amp;quot;specificColorSelect&amp;quot;&amp;gt;&amp;#039; + optionsHtml + &amp;#039;&amp;lt;/select&amp;gt;&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  $(&amp;#039;#fashionQuestFinder&amp;#039;).html(&lt;br /&gt;
    &amp;#039;&amp;lt;form&amp;gt;&amp;#039;+&lt;br /&gt;
      &amp;#039;&amp;lt;fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
        &amp;#039;&amp;lt;legend&amp;gt;Basics&amp;lt;/legend&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div style=&amp;quot;margin-bottom: 15px;&amp;quot;&amp;gt;Class: &amp;#039; + buildClassSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div&amp;gt;Armor Slot:&amp;#039; + buildSlotSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;/fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
        &amp;#039;&amp;lt;legend&amp;gt;Fashion Style&amp;lt;/legend&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; checked name=&amp;quot;fashion&amp;quot; value=&amp;quot;specific&amp;quot; /&amp;gt; Specific Fashion Style:&amp;#039; + buildStyleSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div id=&amp;quot;robeStyle&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;fashion&amp;quot; value=&amp;quot;robe&amp;quot; /&amp;gt; Specific Robe Style:&amp;#039; + buildRobeSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;/fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;legend&amp;gt;Color&amp;lt;/legend&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div&amp;gt;Search for base color or specific color (base is &amp;lt;em&amp;gt;much&amp;lt;/em&amp;gt; slower as it has to check multiple specific colors; if you use it too often it can even slow down the whole wiki)&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; checked name=&amp;quot;color&amp;quot; value=&amp;quot;specific&amp;quot; /&amp;gt; Specific Color Style:&amp;#039; + buildSpecificColorSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;  &amp;lt;div&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;color&amp;quot; value=&amp;quot;base&amp;quot; /&amp;gt; Base Color Style:&amp;#039; + buildBaseColorSelect() + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;/fieldset&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;button id=&amp;quot;search&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&amp;#039; +&lt;br /&gt;
    &amp;#039;&amp;lt;/form&amp;gt;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  $(&amp;#039;#slotSelect&amp;#039;).change(function() {&lt;br /&gt;
    var armorSlot = $(&amp;#039;#slotSelect&amp;#039;).val().trim();&lt;br /&gt;
    $(&amp;#039;#robeStyle&amp;#039;).toggle(armorSlot.trim() === &amp;#039;Chest&amp;#039;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  var buildQuery = function() {&lt;br /&gt;
     var categories = [];&lt;br /&gt;
&lt;br /&gt;
     var eqClass = $(&amp;#039;#classSelect&amp;#039;).val();&lt;br /&gt;
     if (eqClass) categories.push(eqClass.trim() + &amp;#039;+Equipment&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
     var armorSlot = $(&amp;#039;#slotSelect&amp;#039;).val();&lt;br /&gt;
     if (armorSlot) categories.push(armorSlot.trim());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     if ($(&amp;#039;[name=&amp;quot;fashion&amp;quot;]:checked&amp;#039;).val() === &amp;#039;specific&amp;#039;) {&lt;br /&gt;
       var style = $(&amp;#039;#styleSelect&amp;#039;).val();&lt;br /&gt;
       if (style) categories.push(&amp;#039;Fashion: &amp;#039; + style.trim());&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     if ($(&amp;#039;[name=&amp;quot;fashion&amp;quot;]:checked&amp;#039;).val() === &amp;#039;robe&amp;#039; &amp;amp;&amp;amp; armorSlot ===&amp;#039;Chest&amp;#039;) {&lt;br /&gt;
       var robeStyle = $(&amp;#039;#robeSelect&amp;#039;).val();&lt;br /&gt;
       if (robeStyle) categories.push(&amp;#039;Fashion: &amp;#039; + robeStyle.trim());&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     if ($(&amp;#039;[name=&amp;quot;color&amp;quot;]:checked&amp;#039;).val() === &amp;#039;specific&amp;#039;) {&lt;br /&gt;
       var color = $(&amp;#039;#specificColorSelect&amp;#039;).val();&lt;br /&gt;
       if (color) categories.push(&amp;#039;Fashion: &amp;#039; + color.trim());&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     var query = &amp;#039;&amp;#039;;&lt;br /&gt;
     if (categories.length &amp;gt; 0) query += &amp;#039;wpInCategory1=&amp;#039; + categories[0];&lt;br /&gt;
     if (categories.length &amp;gt; 1) query += &amp;#039;&amp;amp;wpInCategory2=&amp;#039; + categories[1];&lt;br /&gt;
     if (categories.length &amp;gt; 2) query += &amp;#039;&amp;amp;wpInCategory3=&amp;#039; + categories[2];&lt;br /&gt;
     return query + &amp;#039;&amp;amp;limit=500&amp;#039;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var baseUrl = &amp;#039; http://wiki.project1999.com/Special:MultiCategorySearch?&amp;#039;;&lt;br /&gt;
  var $search = $(&amp;#039;#search&amp;#039;).click(function(e) {&lt;br /&gt;
     var query = buildQuery();&lt;br /&gt;
     if (!query) return false;&lt;br /&gt;
&lt;br /&gt;
     location = baseUrl + query;&lt;br /&gt;
&lt;br /&gt;
     //$.get(baseUrl + query).then(function(html) {&lt;br /&gt;
     //  console.log(window.html = html);&lt;br /&gt;
     //});&lt;br /&gt;
     return false;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
}); // Close of onReady call&lt;/div&gt;</summary>
		<author><name>imported&gt;Loramin</name></author>
	</entry>
</feed>