Widget:TreasureCardFilter: Difference between revisions
From Unforgotten Realms Wiki
Jump to navigationJump to search
imported>Plornt Made it slide down if filter updates |
imported>Tdis8629 m Coin => Gold. Canonically (and grammatically), Gold is correct, as pointed out by User:Davrial |
||
| (18 intermediate revisions by one other user not shown) | |||
| Line 4: | Line 4: | ||
var FILTERS = []; | var FILTERS = []; | ||
var $GEMS = $("[data-filter-binding]"); | var $GEMS = $("[data-filter-binding]"); | ||
var GEM_DATA = JSON.parse($("[data-gem-data]")[0].getAttribute("data-gem-data")); | |||
var $FILTERABLE = $("[data-card]"); | var $FILTERABLE = $("[data-card]"); | ||
function getCardData (element) { | function getCardData (element) { | ||
| Line 11: | Line 12: | ||
var index = array.indexOf(element); | var index = array.indexOf(element); | ||
var newArr = array; | var newArr = array; | ||
if (index != -1) { | |||
newArr = array.splice(index, 1); | |||
} | |||
} | } | ||
function updateFilters () { | function updateFilters () { | ||
console.log(FILTERS); | |||
// TODO: Refactor | // TODO: Refactor | ||
var enabledElements = []; | var enabledElements = []; | ||
| Line 27: | Line 28: | ||
if (!gems.hasOwnProperty(FILTERS[i])) { | if (!gems.hasOwnProperty(FILTERS[i])) { | ||
shouldBeIncluded = false; | shouldBeIncluded = false; | ||
elem.setAttribute("data-hidden", "true"); | |||
$(elem).slideUp(); | $(elem).slideUp(); | ||
break; | break; | ||
| Line 32: | Line 34: | ||
} | } | ||
if (shouldBeIncluded) { | if (shouldBeIncluded) { | ||
if (elem. | if (elem.getAttribute("data-hidden") == "true") { | ||
elem.setAttribute("data-hidden", "false"); | |||
$(elem).slideDown(); | $(elem).slideDown(); | ||
} | } | ||
} | } | ||
| Line 40: | Line 44: | ||
for (var i = 0; i < FILTERS.length; i++) { | for (var i = 0; i < FILTERS.length; i++) { | ||
var filter = FILTERS[i]; | var filter = FILTERS[i]; | ||
$FILTERABLE.sort(function (a, b) { | 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")); | $FILTERABLE.detach().appendTo($("#card_holder")); | ||
} | } | ||
$GEMS. | $GEMS.click(function (ev) { | ||
if (FILTER_INITIALIZED == false) { | if (FILTER_INITIALIZED == false) { | ||
FILTER_INITIALIZED = true; | FILTER_INITIALIZED = true; | ||
| Line 59: | Line 73: | ||
var $this= $(this); | var $this= $(this); | ||
$this.toggleClass("gem-deselected"); | $this.toggleClass("gem-deselected"); | ||
var selected = !$this.hasClass("gem-deselected"); | |||
if (!selected) { | |||
removeFromArray(FILTERS, this.getAttribute("data-filter-binding")); | |||
} | } | ||
else { | else { | ||
FILTERS.push(this.getAttribute("data-filter-binding")); | FILTERS.push(this.getAttribute("data-filter-binding")); | ||
} | |||
if (FILTERS.length == 0) { | |||
FILTER_INITIALIZED = false; | |||
$GEMS.each(function () { | |||
$(this).removeClass("gem-deselected"); | |||
}); | |||
} | } | ||
updateFilters(); | updateFilters(); | ||
| Line 75: | Line 96: | ||
filter: gray; | 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"); | 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> | </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" data-filter-binding="<!--{$gemName|escape:'html'}-->"><!--{$gemObj.image}--></div> | ||
<!--{/foreach}--> | <!--{/foreach}--> | ||
</div> | </div> | ||
<div id="card_holder"> | <div id="card_holder"> | ||
<!--{foreach from=$cards item=card}--> | <!--{foreach from=$cards key=cardName 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 " 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-24-24 content-box-heading" style="text-align: center;margin-bottom:-1em;"><!--{$card.name}--></div> | ||
<div class="pure-u-8-24"> | <div class="pure-u-8-24"> | ||
<!--{$card.image}--> | <!--{$card.image}--> | ||
</div> | </div> | ||
<div class="pure-u-10-24" style="padding:15px"><!--{$card.description}--></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'}--> | <div class="pure-u-5-24" style="padding:15px"><b>Cost:</b> <span><!--{$card.cost|escape:'int'}--> Gold</span></div> | ||
</div> | </div> | ||
<!--{/foreach}-- | <!--{/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


