You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.1 KiB
JavaScript

"use strict";
/* global define, app, ajaxify, socket, templates, bootbox */
define('admin/extend/rewards', function() {
var rewards = {};
var available,
active;
rewards.init = function() {
$(window).on('action:ajaxify.end', function() {
available = JSON.parse(ajaxify.variables.get('rewards'));
active = JSON.parse(ajaxify.variables.get('active'));
$('[data-selected]').each(function() {
select($(this));
}).on('change', function() {
update($(this));
});
});
};
function select(el) {
el.val(el.attr('data-selected'));
switch (el.attr('name')) {
case 'reward':
selectReward(el);
break;
}
}
function update(el) {
el.attr('data-selected', el.val());
switch (el.attr('name')) {
case 'reward':
selectReward(el);
break;
}
}
function selectReward(el) {
var parent = el.parents('[data-rewardID]'),
div = parent.find('.inputs'),
inputs,
html = '';
for (var reward in available) {
if (available.hasOwnProperty(reward)) {
if (parseInt(available[reward].rewardID, 10) === parseInt(el.attr('data-selected'), 10)) {
inputs = available[reward].inputs;
parent.attr('data-rewardID', available[reward].rewardID);
break;
}
}
}
if (!inputs) {
app.alertError('Illegal reward - no inputs found! ' + el.attr('data-selected'));
}
inputs.forEach(function(input) {
html += '<label for="' + input.name + '">' + input.label + '<br />';
switch (input.type) {
case 'select':
html += '<select name="' + input.name + '">';
input.values.forEach(function(value) {
html += '<option value="' + value.value + '">' + value.name + '</option>';
});
break;
case 'text':
html += '<input type="text" name="' + input.name +'" />';
break;
}
html += '</label><br />';
});
div.html(html);
$('[data-rewardID]').each(function(i) {
var div = $(this).find('.inputs'),
rewards = active[i].rewards;
for (var reward in rewards) {
if (rewards.hasOwnProperty(reward)) {
div.find('[name="' + reward + '"]').val(rewards[reward]);
}
}
});
}
return rewards;
});