Widget:TreasureCardFilter: Difference between revisions

From Unforgotten Realms Wiki
Jump to navigationJump to search
imported>Plornt
m I hate smarty syntax.
imported>Tdis8629
m Coin => Gold. Canonically (and grammatically), Gold is correct, as pointed out by User:Davrial
 
(44 intermediate revisions by one other user not shown)
Line 1: Line 1:
<noinclude><code></noinclude>
<script>
<script>
    window.addEventListener("load", function () {
      var FILTER_INITIALIZED = false;
      var FILTERS = [];
      var $GEMS = $("[data-filter-binding]");
      var GEM_DATA = JSON.parse($("[data-gem-data]")[0].getAttribute("data-gem-data"));
      var $FILTERABLE = $("[data-card]");
      function getCardData (element) {
          return JSON.parse(element.getAttribute("data-card"));
      }
      function removeFromArray (array, element) {
            var index = array.indexOf(element);
            var newArr = array;
          if (index != -1) {
              newArr = array.splice(index, 1);
          }
      }
      function updateFilters () {
        console.log(FILTERS);
            // TODO: Refactor
            var enabledElements = [];
            // First apply filters
            $FILTERABLE.each(function (i) {
              var elem = this;
              var gems = getCardData(elem);
              var shouldBeIncluded = true;
              for (var i = 0; i < FILTERS.length; i++) {
                if (!gems.hasOwnProperty(FILTERS[i])) {
                    shouldBeIncluded = false;
                    elem.setAttribute("data-hidden", "true");
                    $(elem).slideUp();
                    break;
                }
              }
              if (shouldBeIncluded) {
                if (elem.getAttribute("data-hidden") == "true") {
                  elem.setAttribute("data-hidden", "false");
                  $(elem).slideDown();


                }
              }
            });
            // THEN SORT
            for (var i = 0; i < FILTERS.length; i++) {
              var filter = FILTERS[i];
              var gemType = GEM_DATA[filter];
              console.log(gemType);
                if (gemType.type == "number") {
                  $FILTERABLE.sort(function (a, b) {
                      var cardDataA = getCardData(a);
                      var cardDataB = getCardData(b);
                      var valA = (typeof cardDataA[filter] !== "undefined" ? parseInt(cardDataA[filter]) : 0);
                      var valB = (typeof cardDataB[filter] !== "undefined" ? parseInt(cardDataB[filter]) : 0);
                      console.log(valA, valB);
                      return (valA > valB ? -1 : (valA < valB ? 1 : 0));
                  });
              } 
              else {
                  console.log(gemType);
              }
            }
            $FILTERABLE.detach().appendTo($("#card_holder"));
      }
      $GEMS.click(function (ev) {
            if (FILTER_INITIALIZED == false) {
                FILTER_INITIALIZED = true;
                $GEMS.each(function () {
                    $(this).addClass("gem-deselected");
                });
            }
         
            ev.preventDefault();
            var $this= $(this);
            $this.toggleClass("gem-deselected");
            var selected = !$this.hasClass("gem-deselected");
            if (!selected) {
                removeFromArray(FILTERS, this.getAttribute("data-filter-binding"));
            }
            else {
                FILTERS.push(this.getAttribute("data-filter-binding"));
            }
            if (FILTERS.length == 0) {
                FILTER_INITIALIZED = false;
              $GEMS.each(function () {
                    $(this).removeClass("gem-deselected");
                });
            }
            updateFilters();
        });
    });
</script>
</script>
<noinclude></code></noinclude>
<style>
.gem-deselected {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
filter: gray;
filter: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' height='0'><filter id='greyscale'><feColorMatrix type='matrix' values='0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0' /></filter></svg>#greyscale");


}
</style>
<div class="pure-g content-box">
<div class="pure-g content-box">


<div class="pure-u-24-24  content-box-heading" style="text-align: center;margin-bottom:-1em;">Filters</div>
  <div data-gem-data="<!--{json_encode($gem)|escape:'html'}-->" class="pure-u-24-24  content-box-heading" style="text-align: center;margin-bottom:-1em;">Filters</div>
 
  <!--{foreach from=$gem key=gemName item=gemObj}-->
<!--{foreach from=$gem key=$gemName item=$gemObj}-->
     
   
  <div class="pure-u-2-24" data-filter-binding="<!--{$gemName|escape:'html'}-->"><!--{$gemObj.image}--></div>
<div class="pure-u-2-24"><!--{$gemObj.image]}--></div>
  <!--{/foreach}-->
<!--{/foreach}-->
<div class="pure-u-8-24" style="height: 3em;line-height: 3em;">Sort by Range, Cost, Damage</div>
</div>
 
<div class="pure-g content-box " data-cost="500" >
<div class="pure-u-24-24  content-box-heading" style="text-align: center;margin-bottom:-1em;">Book of Cursed Spells</div>


<div class="pure-u-8-24">
[[File:Treasure_Book_of_Cursed_Spells.png|class=img-100]]
</div>
</div>
 
<div id="card_holder">
<div class="pure-u-10-24" style="padding:15px">Summon forth 10 [[Gemling|Gemlings]] to aid you in battle. Gemlings can attack for 1 damage in melee range.</div>
  <!--{foreach from=$cards key=cardName item=card}-->
 
  <div class="pure-g content-box " id="<!--{str_replace(' ', '_',$card.name)|escape:'html'}-->" data-card="<!--{json_encode($card)|escape:'html'}-->"  data-cost="<!--{$card.cost|escape:'int'}-->" >
 
    <div class="pure-u-24-24  content-box-heading" style="text-align: center;margin-bottom:-1em;"><!--{$card.name}--></div>
<div class="pure-u-5-24"  style="padding:15px"><b>Cost:</b> <span>500 Coin</span></div>
    <div class="pure-u-8-24">
    <!--{$card.image}-->
    </div>
    <div class="pure-u-10-24" style="padding:15px"><!--{$card.description}--></div>
    <div class="pure-u-5-24"  style="padding:15px"><b>Cost:</b> <span><!--{$card.cost|escape:'int'}--> Gold</span></div>
  </div>
  <!--{/foreach}-->
</div>
</div>

Latest revision as of 20:19, 9 December 2015

<script>

   window.addEventListener("load", function () { 
      var FILTER_INITIALIZED = false;
      var FILTERS = [];
      var $GEMS = $("[data-filter-binding]");
      var GEM_DATA = JSON.parse($("[data-gem-data]")[0].getAttribute("data-gem-data"));
      var $FILTERABLE = $("[data-card]");
      function getCardData (element) { 
         return JSON.parse(element.getAttribute("data-card"));
      }
      function removeFromArray (array, element) {
           var index = array.indexOf(element);
           var newArr = array;
          if (index != -1) {
              newArr = array.splice(index, 1);
          }
      }
      function updateFilters () { 
       console.log(FILTERS);
            // TODO: Refactor
            var enabledElements = [];
           // First apply filters
           $FILTERABLE.each(function (i) {
             var elem = this;
             var gems = getCardData(elem);
             var shouldBeIncluded = true;
             for (var i = 0; i < FILTERS.length; i++) {
               if (!gems.hasOwnProperty(FILTERS[i])) {
                   shouldBeIncluded = false;
                   elem.setAttribute("data-hidden", "true");
                   $(elem).slideUp();
                   break;
               } 
             }
             if (shouldBeIncluded) {
               if (elem.getAttribute("data-hidden") == "true") {
                 elem.setAttribute("data-hidden", "false");
                 $(elem).slideDown();
               }
             }
           });
           // THEN SORT
           for (var i = 0; i < FILTERS.length; i++) {
             var filter = FILTERS[i];
             var gemType = GEM_DATA[filter];
             console.log(gemType);
               if (gemType.type == "number") {
                 $FILTERABLE.sort(function (a, b) { 
                      var cardDataA = getCardData(a);
                      var cardDataB = getCardData(b);
                      var valA = (typeof cardDataA[filter] !== "undefined" ? parseInt(cardDataA[filter]) : 0);
                      var valB = (typeof cardDataB[filter] !== "undefined" ? parseInt(cardDataB[filter]) : 0);
                      console.log(valA, valB);
                      return (valA > valB ? -1 : (valA < valB ? 1 : 0));
                 });
              }  
              else {
                  console.log(gemType);
              }
            }
            $FILTERABLE.detach().appendTo($("#card_holder"));
      }
      $GEMS.click(function (ev) {
           if (FILTER_INITIALIZED == false) {
                FILTER_INITIALIZED = true;
                $GEMS.each(function () { 
                    $(this).addClass("gem-deselected");
                });
           }
          
           ev.preventDefault();
           var $this= $(this);
           $this.toggleClass("gem-deselected");
           var selected = !$this.hasClass("gem-deselected");
           if (!selected) {
                removeFromArray(FILTERS, this.getAttribute("data-filter-binding"));
           }
           else {
               FILTERS.push(this.getAttribute("data-filter-binding"));
           }
           if (FILTERS.length == 0) {
                FILTER_INITIALIZED = false;
             $GEMS.each(function () { 
                    $(this).removeClass("gem-deselected");
                });
           }
           updateFilters();
       });
   });

</script> <style> .gem-deselected { -webkit-filter: grayscale(100%); filter: grayscale(100%); filter: gray; filter: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' height='0'><filter id='greyscale'><feColorMatrix type='matrix' values='0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0' /></filter></svg>#greyscale");

}

</style>

Filters
Cost: Gold