Widget:TreasureCardFilter: Difference between revisions

From Unforgotten Realms Wiki
Jump to navigationJump to search
imported>Plornt
m Syntax error
imported>Plornt
Took the easy way out.
Line 7: Line 7:
       function getCardData (element) {  
       function getCardData (element) {  
           return JSON.parse(element.getAttribute("data-card"));
           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);
            }
            return newArr;
       }
       }
       function updateFilters () {  
       function updateFilters () {  
             // TODO: Refactor
             // TODO: Refactor
            var enabledElements = [];
             FILTERS.forEach(function (filter) {  
             FILTERS.forEach(function (filter) {  
               $FILTERABLE.sort(function (a, b) {  
               $FILTERABLE.sort(function (a, b) {  
Line 15: Line 24:
                     var cardDataB = getCardData(b);
                     var cardDataB = getCardData(b);
                     if (!cardDataA.hasOwnProperty(filter)) {
                     if (!cardDataA.hasOwnProperty(filter)) {
                       cardDataA.slideUp();
                       $(cardDataA).slideUp();
                      enabledElements = removeFromArray(enabledElements, a);
                     }
                     }
                    if (!cardDataB.hasOwnProperty(filter)) {
                    else {
                       cardDataB.slideUp();
                       enabledElements.push(a);
                     }
                     }
                     return cardDataA[filter] < cardDataB[filter];
                     return cardDataA[filter] < cardDataB[filter];
               });
               });
             });
             });
            $FILTERABLE.detach().appendTo($("#card_holder"));
              enabledElements.forEach(function (element) {
                $(element).slideDown();
              });
       }
       }
       $GEMS.bind("click", function (ev) {
       $GEMS.bind("click", function (ev) {
Line 36: Line 51:
             $this.toggleClass("gem-deselected");
             $this.toggleClass("gem-deselected");
             if ($this.hasClass("gem-deselected")) {
             if ($this.hasClass("gem-deselected")) {
              var index = FILTERS.indexOf(this.getAttribute("data-filter-binding"));
                FILTERS = removeFromArray(FILTERS, this.getAttribute("data-filter-binding"));
              if (index != -1) {
                  FILTERS = FILTERS.splice(index, 1);
              }
             }
             }
             else {
             else {
Line 66: Line 78:


</div>
</div>
<div id="card_holder">
<!--{foreach from=$cards item=card}-->
<!--{foreach from=$cards item=card}-->
<div class="pure-g content-box " data-card="<!--{json_encode($card)|escape:'html'}-->"  data-cost="<!--{$card.cost|escape:'int'}-->" >
<div class="pure-g content-box " data-card="<!--{json_encode($card)|escape:'html'}-->"  data-cost="<!--{$card.cost|escape:'int'}-->" >
Line 76: Line 89:
</div>
</div>
<!--{/foreach}-->
<!--{/foreach}-->
</div>
</div>
</div>

Revision as of 15:50, 6 June 2015

<script>

   window.addEventListener("load", function () { 
      var FILTER_INITIALIZED = false;
      var FILTERS = [];
      var $GEMS = $("[data-filter-binding]");
      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);
            }
            return newArr;
      }
      function updateFilters () { 
            // TODO: Refactor
            var enabledElements = [];
            FILTERS.forEach(function (filter) { 
              $FILTERABLE.sort(function (a, b) { 
                   var cardDataA = getCardData(a);
                   var cardDataB = getCardData(b);
                   if (!cardDataA.hasOwnProperty(filter)) {
                     $(cardDataA).slideUp();
                     enabledElements = removeFromArray(enabledElements, a);
                   }
                   else {
                     enabledElements.push(a);
                   }
                   return cardDataA[filter] < cardDataB[filter];
              });
            });
            $FILTERABLE.detach().appendTo($("#card_holder"));
             enabledElements.forEach(function (element) { 
               $(element).slideDown();
             });
      }
      $GEMS.bind("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");
           if ($this.hasClass("gem-deselected")) {
                FILTERS = removeFromArray(FILTERS, this.getAttribute("data-filter-binding"));
           }
           else {
               FILTERS.push(this.getAttribute("data-filter-binding"));
           }
           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: Coin