JSFiddle - React, Tailwind, and code Playground

by Darksbane

HTML

<script src="http://www.cardgamedb.com/gameofthrones/javascript/gotjson.js"></script>
<form id="theForm" action="javascript:null(0)">
    <fieldset myNS:type="range" myNS:key="price">
    	<legend>Price:</legend>
    	min: <input type="text" myNS:type="min"></input>
    	max: <input type="text" myNS:type="max"></input>
    </fieldset>
    <fieldset myNS:type="distinct" myNS:key="num_of_beds">
    	<legend>Bedrooms</legend>
    	bedrooms: <input type="text" myNS:type="value"></input>
    </fieldset>
    <button onclick="runQuery(event);">Submit</button>
  </form>
  <textarea id="results"></textarea>

JavaScript

Array.prototype.filterBy = function(testFunc, args)
{
	if(args == null || typeof args != 'object') args = [args];
	if(!testFunc || typeof testFunc != 'function') throw new TypeError('argument 0 must be defined and a function');
	return this.filter(function(elem)
	  	{
   		return testFunc.apply(elem, args);
	});
};

testSuite = {

	 range : function(key, min, max)
	 {
	      var min = parseFloat(min);
	      var max = parseFloat(max);
	      var keyVal = parseFloat(this[key]);
	      if(!min || !max|| !keyVal) return false;
	      else return keyVal >= min && keyVal <= max;
	 },

	 distinct : function(key, values)
	 {
	      if(typeof key != 'string') throw new TypeError('key must be a string');
	      if(typeof values != 'object') values = [values];
	      var keyVal = this[key];
	      if(keyVal == undefined) return false;


	      for(var i in values)
	      {
	         var value = values[i];
	         if(typeof value == 'function') continue;
	         if(typeof value == 'string')
	         {
	              if(keyVal.toString().toLowerCase() == value.toLowerCase()) return true;
	              else continue; 
	         }
	         else
	         {
	             keyVal = parseFloat(keyVal);
	             value = parseFloat(value);
	             if(keyVal&&value&&(keyVal==value)) return true;
	             else continue;

	        }
	      }
	      return false;
	 }
};

housesData.filterBy = function(tests)
 {
      ret = this.homes.slice(0);
      if(tests)
      {
           for(var i in tests)
           {
               var test = tests[i];
               if(typeof test != 'object') continue;
               if(!test.func || typeof test.func != 'function') throw new TypeError('argument 0 must be an array or object containing test objects, each with a key "func" of type function');
               else ret = ret.filterBy(test.func, test.args ? test.args : []);
           }
      }
      return ret;
 }

housesData= [
    {
    	"home_id"         : 1,
   ...