Diferencia entre revisiones de «Popup.js»

De Wiki The-West ES
Ir a la navegación.
Sin resumen de edición
Sin resumen de edición
Línea 1: Línea 1:
Skip to content
This repository
    Pull requests
    Issues
    Marketplace
    Explore
    @HALCONDEORO
2
1
    1
Thathanka-Iyothanka/West-Wiki
Code
Issues 0
Pull requests 0
Projects 0
Wiki
Insights
West-Wiki/Popup.js
00b5ea2 6 hours ago
@Thathanka-Iyothanka Thathanka-Iyothanka Update Popup.js
619 lines (604 sloc) 28.1 KB
//Append popup container
$('body').append('<div id="popup_window" class="popup_window"><div class="popup_front"><div class="tw_bg_tl"></div><div class="tw_bg_tr"></div><div class="tw_bg_bl"></div><div class="tw_bg_br"></div></div><div id="popup_contents" class="popup_contents"></div></div>');
$('body').append('<div id="popup_window" class="popup_window"><div class="popup_front"><div class="tw_bg_tl"></div><div class="tw_bg_tr"></div><div class="tw_bg_bl"></div><div class="tw_bg_br"></div></div><div id="popup_contents" class="popup_contents"></div></div>');
$(document).on('mouseenter','.item_container',function(e){Popup.show(this);Popup.setPosition(e);});
$(document).on('mouseleave','.item_container',function(){Popup.hide();});
$(document).on('mousemove','.item_container', function(e){Popup.setPosition(e);});


$('.item_level').mousedown(function(e){ e.preventDefault(); });
//Set events
$(document).on('click','.upgrade',function(){
$(document).on('mouseenter', '.item_container', function (e) {
    Popup.show(this);
    Popup.setPosition(e);
});
$(document).on('mouseleave', '.item_container', function () {
    Popup.hide();
});
$(document).on('mousemove', '.item_container', function (e) {
    Popup.setPosition(e);
});
 
$('.item_level').mousedown(function (e) {
    e.preventDefault();
});
$(document).on('click', '.upgrade', function () {
     var container = $(this).closest('.item_container');
     var container = $(this).closest('.item_container');
     var lvl = parseInt(container.attr('data-lvl'));
     var lvl = parseInt(container.attr('data-lvl'));
     if (lvl!==5){
     if (lvl !== 5) {
         container.attr('data-lvl',lvl+1);
         container.attr('data-lvl', lvl + 1);
         container.find('.level').html(lvl+1);
         container.find('.level').html(lvl + 1);
     }
     }
     Popup.show(container[0]);
     Popup.show(container[0]);
});
});
$(document).on('click','.downgrade',function(){
$(document).on('click', '.downgrade', function () {
     var container = $(this).closest('.item_container');
     var container = $(this).closest('.item_container');
     var lvl = parseInt(container.attr('data-lvl'));
     var lvl = parseInt(container.attr('data-lvl'));
     if (lvl!==0){
     if (lvl !== 0) {
         container.attr('data-lvl',lvl-1);
         container.attr('data-lvl', lvl - 1);
         container.find('.level').html(lvl-1);
         container.find('.level').html(lvl - 1);
     }
     }
     Popup.show(container[0]);
     Popup.show(container[0]);
});
});


if ($("#input_level").length == 1) {
//Append input level
     var input_level = $('<input type="number" style="width:80px;" class="west" placeholder="Tu nivel" min="0" max="150" >').bind("propertychange keyup input paste",function() {
if ($("#input_level").length === 1) {
     var input_level = $('<input type="number" style="width:80px;" class="west" placeholder="Your level" min="0" max="150">').bind("propertychange keyup input paste", function () {
         if (this.value > 150) {
         if (this.value > 150) {
             this.value = 150;
             this.value = 150;
Línea 31: Línea 71:
             this.value = 0;
             this.value = 0;
         }
         }
         $(".calc").each(function() {
         $(".calc").each(function () {
             if (input_level.val() == 0) {
             if (input_level.val() === 0) {
                 $(this).html(this.id);
                 $(this).html(this.id);
                 $('.per_level_off').addClass('per_level').removeClass('per_level_off');
                 $('.per_level_off').addClass('per_level').removeClass('per_level_off');
Línea 45: Línea 85:


//Search
//Search
if ($("#input_search").length == 1) {
if ($("#input_search").length === 1) {
     var input_search = $('<input type="search" class="west" placeholder="Buscar">').bind("propertychange keyup input paste", function() {
     var input_search = $('<input type="search" class="west" placeholder="Search">').bind("propertychange keyup input paste", function () {
         var val = this.value.toLowerCase();
         var val = this.value.toLowerCase();
         if (val == '') {
         if (val === '') {
             $('.item_container').show();
             $('.item_container').show();
         } else {
         } else {
             $('.item_container').hide();
             $('.item_container').hide();
             $('.item_container').filter(function() {
             $('.item_container').filter(function () {
                 return $(this).attr('data-popup').toLowerCase().indexOf(val) > -1;
                 return $(this).attr('data-popup').toLowerCase().indexOf(val) > -1;
             }).show();
             }).show();
Línea 60: Línea 100:


//Switch weapons
//Switch weapons
if ($("#switch").length == 1) {
if ($("#switch").length === 1) {
     $("#fire").hide();
     $("#fire").hide();
     $("#switch").on("click", function() {
     $("#switch").on("click", function () {
         $('#melee, #fire').toggle()
         $('#melee, #fire').toggle();
     });
     });
}
}


var Popup = {
var Popup = {
     content : "",
     content: "",
     delay : 200,
     delay: 200,
     active : false,
     active: false,
     show: function(obj) {
     show: function (obj) {
         Popup.content = Popup.createPopup($(obj).attr('data-popup'), $(obj).attr('data-cdn-cat'), $(obj).attr('data-cdn-img'), parseInt($(obj).attr('data-lvl')));
         Popup.content = Popup.createPopup($(obj).attr('data-popup'), $(obj).attr('data-cdn-cat'), $(obj).attr('data-cdn-img'), parseInt($(obj).attr('data-lvl')));
         Popup.active = true;
         Popup.active = true;
Línea 77: Línea 117:
         Popup.getContainer().html(Popup.content);
         Popup.getContainer().html(Popup.content);
     },
     },
     hide: function() {
     hide: function () {
         Popup.getEl().css({
         Popup.getEl().css({
             display: 'none',
             display: 'none',
Línea 86: Línea 126:
         Popup.clearTimeout();
         Popup.clearTimeout();
     },
     },
     setTimeout: function() {
     setTimeout: function () {
         Popup.clearTimeout();
         Popup.clearTimeout();
         Popup.timer = window.setTimeout(function() {
         Popup.timer = window.setTimeout(function () {
             Popup.getEl().css('display', 'block');
             Popup.getEl().css('display', 'block');
         }, Popup.delay);
         }, Popup.delay);
     },
     },
     clearTimeout : function() {
     clearTimeout: function () {
         if (Popup.timer) window.clearTimeout(Popup.timer);
         if (Popup.timer) window.clearTimeout(Popup.timer);
     },
     },
     getEl : function() {
     getEl: function () {
         return $('#popup_window');
         return $('#popup_window');
     },
     },
     getContainer : function() {
     getContainer: function () {
         return $('#popup_contents');
         return $('#popup_contents');
     },
     },
     createPopup: function(data, cdn_cat, cdn_name, lvl) {
     createPopup: function (data, cdn_cat, cdn_name, lvl) {
         data = JSON.parse(data);
         data = JSON.parse(data);
 
         var html = '<div class="popup_image"><img src="https://westzz.innogamescdn.com/images/items/' + data.cdn_cat + '/' + data.cdn_img + '.png' + '"/></div><div class="popup_divider"></div><p class="popup_name">' + data.name + '</p><p class="popup_type">' + data.type + '</p><br/>';
         var html = '<div class="popup_image"><img src="https://westes.innogamescdn.com/images/items/' + data.cdn_cat + '/' + data.cdn_img + '.png' + '"/></div><div class="popup_divider"></div><p class="popup_name">' + data.name + '</p><p class="popup_type">' + data.type + '</p>';
 
 
if (data.text){
            html+='<center>';
            for (var i = 0; i < data.text.length;i++){
                html += '<p class="popup_text">'+data.text[i]+'</p>';
            }
            html+='</center><br/>';
        }
 
if(data.unic){
          html += '<span class="popup_txtvioleta"><center>Único</center></span><br/>';
}
 
         var upgraded = false;
         var upgraded = false;
         if ((lvl>=1)&&(lvl<=5)){
         if ((lvl >= 1) && (lvl <= 5)) {
             upgraded = true;
             upgraded = true;
             data.auc = false;
             data.auc = false;
         }
         }
         if (data.dmg_min&&data.dmg_max){
         if (data.dmg_min && data.dmg_max) {
             if (upgraded) {
             if (upgraded) {
                 data.dmg_min += Math.round(Math.max(1, data.dmg_min * 0.1 * lvl));
                 data.dmg_min += Math.round(Math.max(1, data.dmg_min * 0.1 * lvl));
                 data.dmg_max += Math.round(Math.max(1, data.dmg_max * 0.1 * lvl));
                 data.dmg_max += Math.round(Math.max(1, data.dmg_max * 0.1 * lvl));
             }
             }
             html += '<p class="popup_dmg">'+data.dmg_min+'-'+data.dmg_max+' Daño</p>';
             html += '<p class="popup_dmg">' + data.dmg_min + '-' + data.dmg_max + ' Damages</p>';
         }
         }
         for (var cat in Popup.data) {
         for (var cat in Popup.data) {
Línea 140: Línea 165:
                         if ($('#input_level input').val() > 0) {
                         if ($('#input_level input').val() > 0) {
                             data[key] = Math.ceil($('#input_level input').val() * -data[key]);
                             data[key] = Math.ceil($('#input_level input').val() * -data[key]);
                             if (upgraded){
                             if (upgraded) {
                                 data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
                                 data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
                             }
                             }
                         } else {
                         } else {
                             data[key] = -data[key];
                             data[key] = -data[key];
                             per_level = " (por Nivel)";
                             per_level = " (per Level)";
                             if (upgraded){
                             if (upgraded) {
                                 data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
                                 data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
                             }
                             }
                         }
                         }
                     } else if (upgraded) {
                     } else if (upgraded) {
if (data[key]<1){
                        if (data[key] < 1) {
data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
                            data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
} else {
                        } else {
    data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
                            data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
}
                        }
                     }
                     }
                     html += Popup.data[cat][key].replace('#1', data[key]).replace('#2', per_level);
                     html += Popup.data[cat][key].replace('#1', data[key]).replace('#2', per_level);
Línea 163: Línea 188:
                 html += '<br/>';
                 html += '<br/>';
             }
             }
         }    
         }
       
         if (data.text) {
         if (data.bonus){
             for (var i = 0; i < data.text.length; i++) {
             for (var i = 0; i < data.bonus.length;i++){
                 html += '<p class="popup_text">' + data.text[i] + '</p>';
                 html += '<p class="popup_bonus">'+data.bonus[i]+'</p>';
             }
             }
         
            html += '<br/>';
          html+='<br/>';
         }
         }
         if (data.jobs){
        if (data.bonus) {
            for (var i = 0; i < data.bonus.length; i++) {
                html += '<p class="popup_bonus">' + data.bonus[i] + '</p>';
            }
            html += '<br/>';
        }
         if (data.jobs) {
             html += '<div style="text-align:center;"><table class="popup_job">';
             html += '<div style="text-align:center;"><table class="popup_job">';
             for (var i =0; i<data.jobs.length;i++){
             for (var i = 0; i < data.jobs.length; i++) {
                 html += '<tr><td><img src="https://westes.innogamescdn.com/images/jobs/'+data.jobs[i][1]+'.png"/></td><td><span>&nbsp;&nbsp;'+data.jobs[i][0]+'</span></td></tr>';
                 html += '<tr><td><img src="https://westzz.innogamescdn.com/images/jobs/' + data.jobs[i][1] + '.png"/></td><td><span>&nbsp;&nbsp;' + data.jobs[i][0] + '</span></td></tr>';
             }
             }
             html += '</table></div>';
             html += '</table></div>';
         }
         }
         if (data.craft){
         if (data.craft) {
             html += '<div style="text-align:center;"><table  class="popup_crafteditem"><tr><td><img src="https://westes.innogamescdn.com/images/crafting/profsymbol_'+data.craft.id+'_small.png"/></td><td><table><tr>';
             html += '<div style="text-align:center;"><table  class="popup_crafteditem"><tr><td><img src="https://westzz.innogamescdn.com/images/crafting/profsymbol_' + data.craft.id + '_small.png"/></td><td><table><tr>';
             for (var i = 0;i<data.craft.req.length;i++){
             for (var i = 0; i < data.craft.req.length; i++) {
                 html += '<td><img style="width:36px;height:36px;" src="https://westes.innogamescdn.com/images/items/yield/'+data.craft.req[i][0]+'.png"/></td>';
                 html += '<td><img style="width:36px;height:36px;" src="https://westzz.innogamescdn.com/images/items/yield/' + data.craft.req[i][0] + '.png"/></td>';
             }
             }
             html += '</tr><tr>';
             html += '</tr><tr>';
             for (var i = 0;i<data.craft.req.length;i++){
             for (var i = 0; i < data.craft.req.length; i++) {
                 html += '<td><span>x'+data.craft.req[i][1]+'</span></td>';
                 html += '<td><span>x' + data.craft.req[i][1] + '</span></td>';
             }
             }
             html += '</tr></table></td></tr></table></div>';
             html += '</tr></table></td></tr></table></div>';
         }
         }
         html += '<div class="popup_infos">';
         html += '<div class="popup_infos">';
         if (data.spd){
         if (data.spd) {
if (upgraded){
            if (upgraded) {
data.spd += Math.round(Math.max(1, data.spd * 0.1 * lvl));
                data.spd += Math.round(Math.max(1, data.spd * 0.1 * lvl));
}
            }
html += '<p class="popup_speed">Velocidad: +' + data.spd + '%</p><br/>';
            html += '<p class="popup_speed">Speed: +' + data.spd + '%</p><br/>';
}
        }
if (data.set) {
        if (data.set) html += '<p><a class="popup_set" href="/wiki/' + data.set + '">' + data.set + '</a></p><br/>';
html += '<p><a class="popup_set" href="/wiki/'+data.set+'">' + data.set + '</a></p><br/>';
}
 
         if (data.sp) {
         if (data.sp) {
             html += '<img src="/images/5/56/Bp.png"/>' + data.bp + '&nbsp;&nbsp;&nbsp;&nbsp;<img src="/images/c/ce/Sp.png"/>&nbsp;' + data.sp + '<br/><br/>';
             html += '<img src="/images/5/57/Buy_price.png"/>' + data.bp + '&nbsp;&nbsp;&nbsp;&nbsp;<img src="/images/f/fc/Sell_price.png"/>&nbsp;' + data.sp + '<br/><br/>';
         } else {
         } else {
             html += '<i>Invendible</i><br/><br/>';
             html += '<i>Unsalable</i><br/><br/>';
         }
         }
         if (data.lvl){
         if (data.lvl) html += 'Level <b>' + data.lvl + '</b><br/>';
html += 'Requerido:<br/> -Nivel <b>' + data.lvl + '</b><br/>';
}
         if (data.sex) {
         if (data.sex) {
             if (data.sex == 0) {
             if (data.sex == 0) {
                 html += '-Sexo: Masculino <img src="/images/c/c5/Gender_m.png"/><br/>';
                 html += '<img src="/images/c/c5/Gender_m.png"/>&nbsp;&nbsp;&nbsp;';
             } else {
             } else {
                 html += '-Sexo: Femenino <img src="/images/4/41/Gender_f.png"/><br/>';
                 html += '<img src="/images/4/41/Gender_f.png"/>&nbsp;&nbsp;&nbsp;';
             }
             }
         }
         }
         if (data.auc == 1) {
         if (data.auc == 1){
             html += '<span class="popup_txtgreen">Auctionable</span><br/>';
             html += '<span class="popup_txtgreen">Subastable</span><br/>';
         } else {
         } else {
             html += '<span class="popup_txtred">No Subastable</span><br/>';
             html += '<span class="popup_txtred">Not auctionable</span><br/>';
         }
         }
         if (data.upg == 0) {
         if (data.upg == 0) {
             html += '<span class="popup_txtred">No mejorable</span><br/>';
             html += '<span class="popup_txtred">Not upgradeable</span><br/>';
         } else {
         } else {
             html += '<span class="popup_txtgreen">Mejorable</span><br/>';
             html += '<span class="popup_txtgreen">Upgradeable</span><br/>';
         }
         }
         html += '<br/><p class="popup_id">[item=<b>' + data.id + '</b>]</p></div>';
         html += '<br/><p class="popup_id">[item=<b>' + data.id + '</b>]</p></div>';
         return html;
         return html;
     },
     },
     setPosition : function (e) {
     setPosition: function (e) {
         var window_width = $(window).width();
         var window_width = $(window).width();
         var window_height = $(window).height();
         var window_height = $(window).height();
Línea 255: Línea 278:
             left: left
             left: left
         });
         });
     },
     },data: {
    data: {
         dmg: {
         dmg: {
             dmglvl: '<p class="popup_dmg">+ #1 Daño#2</p>'
             dmglvl: '<p class="popup_dmg">+ #1 Daño#2</p>'
Línea 333: Línea 355:
};
};


if ((new RegExp(mw.config.get('wgFormattedNamespaces')[10]+'\:Item\_*').test(mw.config.get('wgPageName')))&&($('.item_container').length==1)){
//Show a "plain text" popup in the template
if ((new RegExp(mw.config.get('wgFormattedNamespaces')[10] + '\:Item\_*').test(mw.config.get('wgPageName'))) && ($('.item_container').length === 1)) {
     $('#mw-content-text').append('<center><div id="popup_plain" class="popup_window"><div class="popup_front"><div class="tw_bg_tl"></div><div class="tw_bg_tr"></div><div class="tw_bg_bl"></div><div class="tw_bg_br"></div></div><div id="popup_plain_contents" class="popup_contents"></div></div></center>');
     $('#mw-content-text').append('<center><div id="popup_plain" class="popup_window"><div class="popup_front"><div class="tw_bg_tl"></div><div class="tw_bg_tr"></div><div class="tw_bg_bl"></div><div class="tw_bg_br"></div></div><div id="popup_plain_contents" class="popup_contents"></div></div></center>');
     $('#popup_plain').hide();
     $('#popup_plain').hide();
     $('#popup_plain_contents').append(Popup.createPopup($('.item_container').attr('data-popup'), $('.item_container').attr('data-cdn-cat'), $('.item_container').attr('data-cdn-img'),0))
     $('#popup_plain_contents').append(Popup.createPopup($('.item_container').attr('data-popup'), $('.item_container').attr('data-cdn-cat'), $('.item_container').attr('data-cdn-img'), 0));
     $('#popup_plain').slideDown();
     $('#popup_plain').slideDown();
}
}


$('.item_container img').on('dblclick',function(){window.location='/wiki/'+mw.config.get('wgFormattedNamespaces')[10]+':Item_'+JSON.parse($(this).parent().attr('data-popup'))['id']/1000});
//On dbl click on item, redirect the user to the template
$('.item_container img').on('dblclick', function() {
    window.location = '/wiki/' + mw.config.get('wgFormattedNamespaces')[10] + ':Item_' + JSON.parse($(this).parent().attr('data-popup')).id / 1000;
});
 
 
//SET CALC


{var set_calc={bonus:{set_bonus:
if ($('.infoSet').length !== 0) {
{str:{name:"Fuerza",img:"/images/thumb/f/fd/Fuerza.png/40px-Fuerza.png"},
    var set_calc = {
        bonus: {
            //List of usual bonuses matched with tooltip and image url
            set_bonus: {
str:{name:"Fuerza",img:"/images/thumb/f/fd/Fuerza.png/40px-Fuerza.png"},
mob:{name:"Movilidad",img:"https://wiki.the-west.es/images/thumb/9/98/Movilidad.png/40px-Movilidad.png"},
mob:{name:"Movilidad",img:"https://wiki.the-west.es/images/thumb/9/98/Movilidad.png/40px-Movilidad.png"},
dex:{name:"Destreza",img:"/images/thumb/0/0d/Dexterity.png/40px-Dexterity.png"},
dex:{name:"Destreza",img:"/images/thumb/0/0d/Dexterity.png/40px-Dexterity.png"},
Línea 373: Línea 406:
fboffs:{name:"<b>Attack</b> (Fort battle sector bonus)",img:"/images/f/fe/Set_Fb_offense_sec.png"},
fboffs:{name:"<b>Attack</b> (Fort battle sector bonus)",img:"/images/f/fe/Set_Fb_offense_sec.png"},
fbdmgs:{name:"<b>Damages</b> (Fort battle sector bonus)",img:"/images/b/b3/Damages_sector.png"}},
fbdmgs:{name:"<b>Damages</b> (Fort battle sector bonus)",img:"/images/b/b3/Damages_sector.png"}},
extra_set_bonus:{}},data:{},itemStatus:{},getData:function(){$(".set_container").each(function(){var t=$(this).attr("data-set-id");set_calc.itemStatus[t]={},set_calc.data[t]={items:{},set:{}},$(this).find(".item_container").each(function(){var e=JSON.parse($(this).attr("data-popup"));for(var a in $(this).is(":hidden")?set_calc.itemStatus[t][e.id]=!1:set_calc.itemStatus[t][e.id]=0,e)e.hasOwnProperty(a)&&set_calc.bonus.set_bonus.hasOwnProperty(a)&&(set_calc.data[t].items[a]||(set_calc.data[t].items[a]={}),set_calc.data[t].items[a][e.id]=e[a])})}),$(".infoSet").each(function(){var t=$(this).attr("data-set-id");$(this).find(".infosetatt").each(function(){var e=$(this).attr("data-nb");set_calc.data[t].set[e]={},$(this).find(".set_bonus").each(function(){key=$(this).attr("data-type"),0!==$(this).find(".calc").length?set_calc.data[t].set[e][key]=-parseFloat($(this).find(".calc").attr("id")):set_calc.data[t].set[e][key]=parseFloat($(this).find(".val").text()),set_calc.bonus.set_bonus.hasOwnProperty(key)||(set_calc.bonus.extra_set_bonus[key]={img:$(this).find("img").attr("src"),name:$(this).find("#tooltip_content").text()})})})})},calc:function(){if(0===$("#input_level").length|""!==$("#input_level input").val()){var t=parseInt($("#input_level input").val());for(var e in total={},set_calc.data){for(var a in set_calc.data[e].items)for(var i in set_calc.data[e].items[a])if(!1!==set_calc.itemStatus[e][i]){lvl=set_calc.itemStatus[e][i],total[a]||(total[a]=0);var s=set_calc.data[e].items[a][i];set_calc.data[e].items[a][i]<0?(s=-s,set_calc.itemStatus[e][i]>0?total[a]+=Math.ceil(s*t)+Math.round(Math.max(1,.1*Math.ceil(s*t)*lvl)):total[a]+=Math.ceil(s*t)):set_calc.itemStatus[e][i]>0?total[a]+=s<1?Math.round(1e6*(1*s+Math.round(Math.max(1,1e3*s*lvl))/1e4))/1e6:Math.round(Math.max(1,.1*s*lvl)):total[a]+=s}var p=0;for(var i in set_calc.itemStatus[e])!1!==set_calc.itemStatus[e][i]&&p++;for(var a in set_calc.data[e].set[p])total[a]||(total[a]=0),set_calc.data[e].set[p][a]<0?total[a]+=Math.ceil(-set_calc.data[e].set[p][a]*t):total[a]+=set_calc.data[e].set[p][a]}var n='<center><table class="infoSet"><caption><br><big><b>Total</b></big></caption><tbody><tr><td></center>';for(var a in set_calc.bonus.set_bonus)total.hasOwnProperty(a)&&(n+='<div class="set_bonus tooltip_container"><img src="'+set_calc.bonus.set_bonus[a].img+'"><b>+'+total[a]+'</b><div class="tooltip_outer"><div class="tooltip"><div class="tt_bg_tl"></div><div class="tt_bg_tr"></div><div class="tt_bg_bl"></div><div class="tt_bg_br"></div><div id="tooltip_content">'+set_calc.bonus.set_bonus[a].name+"</div></div></div></div>");for(var a in set_calc.bonus.extra_set_bonus)total.hasOwnProperty(a)&&(n+='<div class="set_bonus tooltip_container"><img src="'+set_calc.bonus.extra_set_bonus[a].img+'"><b>+'+total[a]+(-1!==["xp","money","luck","spd","regen","drop"].indexOf(a)?"%":"")+'</b><div class="tooltip_outer"><div class="tooltip"><div class="tt_bg_tl"></div><div class="tt_bg_tr"></div><div class="tt_bg_bl"></div><div class="tt_bg_br"></div><div id="tooltip_content">'+set_calc.bonus.extra_set_bonus[a].name+"</div></div></div></div>");$("#set_calc").html(n)}else $("#set_calc").html("")},initEvents:function(){$(".item_container > img").on("click",function(){var t=$(this).closest(".item_container");t.toggleClass("item_off");var e=t.closest(".set_container").attr("data-set-id"),a=JSON.parse(t.attr("data-popup")).id;t.hasClass("item_off")||t.is(":hidden")?set_calc.itemStatus[e][a]=!1:set_calc.itemStatus[e][a]=parseInt(t.attr("data-lvl")),set_calc.calc()}),$(document).on("click",".upgrade, .downgrade",function(){var t=$(this).closest(".item_container"),e=t.closest(".set_container").attr("data-set-id");t.hasClass("item_off")||t.is(":hidden")||(set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id]=parseInt(t.attr("data-lvl")),set_calc.calc())}),$("#input_level").bind("propertychange keyup input paste",function(){set_calc.calc()}),$("#switch").on("click",function(){$("#melee, #fire").each(function(){var t=$(this).find(".item_container"),e=$(this).closest(".set_container").attr("data-set-id");$(this).is(":hidden")?set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id]=!1:set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id]=parseInt(t.attr("data-lvl"))}),set_calc.calc()})},init:function(){set_calc.initEvents(),set_calc.getData(),$("#mw-content-text").append('<div id="set_calc"></div>'),0===$("#input_level").length&&set_calc.calc()}};set_calc.init()}
            //If there are any other "special" bonuses, they will be dynamically retrieved and stored there
            extra_set_bonus: {}
        },
        //Bonuses from all sets / items :
        data: {},
        //Status of all items (item lvl, activated or not)
        itemStatus: {},
        getData: function () {
            //Get bonuses from all item sets
            $('.set_container').each(function () {
                var set_id = $(this).attr('data-set-id');
                set_calc.itemStatus[set_id] = {};
                set_calc.data[set_id] = {
                    items: {},
                    set: {}
                };
                $(this).find('.item_container').each(function () {
                    var json = JSON.parse($(this).attr('data-popup'));
                    if ($(this).is(":hidden")) {
                        set_calc.itemStatus[set_id][json.id] = false;
                    } else {
                        set_calc.itemStatus[set_id][json.id] = 0;
                    }
                    for (var prop in json) {
                        if (json.hasOwnProperty(prop) && set_calc.bonus.set_bonus.hasOwnProperty(prop)) {
                            if (!set_calc.data[set_id].items[prop]) {
                                set_calc.data[set_id].items[prop] = {};
                            }
                            set_calc.data[set_id].items[prop][json.id] = json[prop];
                        }
                    }
                });
            });
            //Get bonuses from all sets
            $('.infoSet').each(function () {
                var set_id = $(this).attr('data-set-id');
                $(this).find('.infosetatt').each(function () {
                    var nb = $(this).attr('data-nb');
                    set_calc.data[set_id].set[nb] = {};
                    $(this).find('.set_bonus').each(function () {
                        key = $(this).attr('data-type');
                        if ($(this).find('.calc').length !== 0) {
                            set_calc.data[set_id].set[nb][key] = -parseFloat($(this).find('.calc').attr('id'));
                        } else {
                            set_calc.data[set_id].set[nb][key] = parseFloat($(this).find('.val').text());
                        }
                        if (!set_calc.bonus.set_bonus.hasOwnProperty(key)) {
                            set_calc.bonus.extra_set_bonus[key] = {
                                img: $(this).find('img').attr('src'),
                                name: $(this).find('#tooltip_content').text()
                            };
                        }
                    });
                });
            });
 
        },
        calc: function () {
            //Only calc if a player level is provided
            if ($('#input_level').length === 0 | $('#input_level input').val() !== "") {
                var level = parseInt($('#input_level input').val());
                total = {};
                for (var set_id in set_calc.data) {
                    for (var key in set_calc.data[set_id].items) {
                        for (var item_id in set_calc.data[set_id].items[key]) {
                            if (set_calc.itemStatus[set_id][item_id] !== false) {
                                lvl = set_calc.itemStatus[set_id][item_id];
                                if (!total[key]) {
                                    total[key] = 0;
                                }
                                var value = set_calc.data[set_id].items[key][item_id];
 
                                if (set_calc.data[set_id].items[key][item_id] < 0) {
                                    //If bonus (per Level)
                                    value = -value;
 
                                    if (set_calc.itemStatus[set_id][item_id] > 0) {
                                        //If item upgraded
                                        total[key] += Math.ceil(value * level) + Math.round(Math.max(1, Math.ceil(value * level) * 0.1 * lvl));
                                    } else {
                                        total[key] += Math.ceil(value * level);
                                    }
                                } else {
                                    if (set_calc.itemStatus[set_id][item_id] > 0) {
                                        if (value < 1) {
                                            total[key] += Math.round(1e6 * (value * 1 + Math.round(Math.max(1, value * 1000 * lvl)) / 10000)) / 1e6;
                                        } else {
                                            total[key] += Math.round(Math.max(1, value * 0.1 * lvl));
                                        }
                                    } else {
                                        total[key] += value;
                                    }
                                }
                            }
                        }
                    }
                    var item_nb = 0;
                    for (var item_id in set_calc.itemStatus[set_id]) {
                        if (set_calc.itemStatus[set_id][item_id] !== false) {
                            item_nb++;
                        }
                    }
                    for (var key in set_calc.data[set_id].set[item_nb]) {
                        if (!total[key]) {
                            total[key] = 0;
                        }
                        if (set_calc.data[set_id].set[item_nb][key] < 0) {
                            total[key] += Math.ceil(-set_calc.data[set_id].set[item_nb][key] * level);
                        } else {
                            total[key] += set_calc.data[set_id].set[item_nb][key];
                        }
                    }
                }
                //Create the html table
                var html = '<center><table class="infoSet"><caption><br><big><b>Total</b></big></caption><tbody><tr><td></center>';
                for (var key in set_calc.bonus.set_bonus) {
                    if (total.hasOwnProperty(key)) {
                        html += '<div class="set_bonus tooltip_container"><img src="' + set_calc.bonus.set_bonus[key].img + '"><b>+' + total[key] + '</b><div class="tooltip_outer"><div class="tooltip"><div class="tt_bg_tl"></div><div class="tt_bg_tr"></div><div class="tt_bg_bl"></div><div class="tt_bg_br"></div><div id="tooltip_content">' + set_calc.bonus.set_bonus[key].name + '</div></div></div></div>';
                    }
                }
                for (var key in set_calc.bonus.extra_set_bonus) {
                    if (total.hasOwnProperty(key)) {
                        html += '<div class="set_bonus tooltip_container"><img src="' + set_calc.bonus.extra_set_bonus[key].img + '"><b>+' + total[key] + (['xp', 'money', 'luck', 'spd', 'regen', 'drop'].indexOf(key) !== -1 ? "%" : "") + '</b><div class="tooltip_outer"><div class="tooltip"><div class="tt_bg_tl"></div><div class="tt_bg_tr"></div><div class="tt_bg_bl"></div><div class="tt_bg_br"></div><div id="tooltip_content">' + set_calc.bonus.extra_set_bonus[key].name + '</div></div></div></div>';
                    }
                }
                //Display the result at the bottom of the page
                $('#set_calc').html(html);
            } else {
                $('#set_calc').html("");
            }
        },
        initEvents: function () {
            //Deactivate / activate item on click
            $('.item_container > img').on('click', function () {
                var item_container = $(this).closest('.item_container');
                item_container.toggleClass('item_off');
                var set_id = item_container.closest('.set_container').attr('data-set-id');
                var item_id = JSON.parse(item_container.attr('data-popup')).id;
                if (item_container.hasClass('item_off') || item_container.is(":hidden")) {
                    set_calc.itemStatus[set_id][item_id] = false;
                } else {
                    set_calc.itemStatus[set_id][item_id] = parseInt(item_container.attr('data-lvl'));
                }
                set_calc.calc();
            });
            //Update item level on upgrade / downgrade
            $(document).on('click', '.upgrade, .downgrade', function () {
                var item = $(this).closest('.item_container');
                var set_id = item.closest('.set_container').attr('data-set-id');
                if (!item.hasClass('item_off') && !item.is(":hidden")) {
                    set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = parseInt(item.attr('data-lvl'));
                    set_calc.calc();
                }
            });
            //Calc again when player level changes
            $("#input_level").bind("propertychange keyup input paste", function () {
                set_calc.calc();
            });
            //Activate/deactivate melee/fire weapon when the switch btn is clicked
            $("#switch").on('click', function () {
                $('#melee, #fire').each(function () {
                    var item = $(this).find('.item_container');
                    var set_id = $(this).closest('.set_container').attr('data-set-id');
                    if ($(this).is(":hidden")) {
                        set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = false;
                    } else {
                        set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = parseInt(item.attr('data-lvl'));
                    }
                });
                set_calc.calc();
            });
        },
        init: function () {
            set_calc.initEvents();
            set_calc.getData();
            $('#mw-content-text').append('<div id="set_calc"></div>');
            if ($('#input_level').length === 0)
                set_calc.calc();
        }
    };
    set_calc.init();
}

Revisión del 22:40 6 mar 2018

Skip to content This repository

   Pull requests
   Issues
   Marketplace
   Explore
   @HALCONDEORO

2 1

   1

Thathanka-Iyothanka/West-Wiki Code Issues 0 Pull requests 0 Projects 0 Wiki Insights West-Wiki/Popup.js 00b5ea2 6 hours ago @Thathanka-Iyothanka Thathanka-Iyothanka Update Popup.js 619 lines (604 sloc) 28.1 KB //Append popup container

$('body').append('

');

//Set events $(document).on('mouseenter', '.item_container', function (e) {

   Popup.show(this);
   Popup.setPosition(e);

}); $(document).on('mouseleave', '.item_container', function () {

   Popup.hide();

}); $(document).on('mousemove', '.item_container', function (e) {

   Popup.setPosition(e);

});

$('.item_level').mousedown(function (e) {

   e.preventDefault();

}); $(document).on('click', '.upgrade', function () {

   var container = $(this).closest('.item_container');
   var lvl = parseInt(container.attr('data-lvl'));
   if (lvl !== 5) {
       container.attr('data-lvl', lvl + 1);
       container.find('.level').html(lvl + 1);
   }
   Popup.show(container[0]);

}); $(document).on('click', '.downgrade', function () {

   var container = $(this).closest('.item_container');
   var lvl = parseInt(container.attr('data-lvl'));
   if (lvl !== 0) {
       container.attr('data-lvl', lvl - 1);
       container.find('.level').html(lvl - 1);
   }
   Popup.show(container[0]);

});

//Append input level if ($("#input_level").length === 1) {

   var input_level = $('<input type="number" style="width:80px;" class="west" placeholder="Your level" min="0" max="150">').bind("propertychange keyup input paste", function () {
       if (this.value > 150) {
           this.value = 150;
       } else if (this.value < 0) {
           this.value = 0;
       }
       $(".calc").each(function () {
           if (input_level.val() === 0) {
               $(this).html(this.id);
               $('.per_level_off').addClass('per_level').removeClass('per_level_off');
           } else {
               $(this).html(Math.ceil(Number(this.id) * input_level.val()));
               $('.per_level').addClass('per_level_off').removeClass('per_level');
           }
       });
   }).appendTo($("#input_level"));

}


//Search if ($("#input_search").length === 1) {

   var input_search = $('<input type="search" class="west" placeholder="Search">').bind("propertychange keyup input paste", function () {
       var val = this.value.toLowerCase();
       if (val === ) {
           $('.item_container').show();
       } else {
           $('.item_container').hide();
           $('.item_container').filter(function () {
               return $(this).attr('data-popup').toLowerCase().indexOf(val) > -1;
           }).show();
       }
   }).appendTo($("#input_search"));

}

//Switch weapons if ($("#switch").length === 1) {

   $("#fire").hide();
   $("#switch").on("click", function () {
       $('#melee, #fire').toggle();
   });

}

var Popup = {

   content: "",
   delay: 200,
   active: false,
   show: function (obj) {
       Popup.content = Popup.createPopup($(obj).attr('data-popup'), $(obj).attr('data-cdn-cat'), $(obj).attr('data-cdn-img'), parseInt($(obj).attr('data-lvl')));
       Popup.active = true;
       Popup.setTimeout();
       Popup.getContainer().html(Popup.content);
   },
   hide: function () {
       Popup.getEl().css({
           display: 'none',
           top: 0,
           left: 0
       });
       Popup.active = false;
       Popup.clearTimeout();
   },
   setTimeout: function () {
       Popup.clearTimeout();
       Popup.timer = window.setTimeout(function () {
           Popup.getEl().css('display', 'block');
       }, Popup.delay);
   },
   clearTimeout: function () {
       if (Popup.timer) window.clearTimeout(Popup.timer);
   },
   getEl: function () {
       return $('#popup_window');
   },
   getContainer: function () {
       return $('#popup_contents');
   },
   createPopup: function (data, cdn_cat, cdn_name, lvl) {
       data = JSON.parse(data);

var html = '


';

       var upgraded = false;
       if ((lvl >= 1) && (lvl <= 5)) {
           upgraded = true;
           data.auc = false;
       }
       if (data.dmg_min && data.dmg_max) {
           if (upgraded) {
               data.dmg_min += Math.round(Math.max(1, data.dmg_min * 0.1 * lvl));
               data.dmg_max += Math.round(Math.max(1, data.dmg_max * 0.1 * lvl));
           }

html += '

';

       }
       for (var cat in Popup.data) {
           var cnt = 0;
           for (var key in Popup.data[cat]) {
               if (data.hasOwnProperty(key)) {
                   cnt++;
                   var per_level = "";
                   if (data[key] < 0) {
                       if ($('#input_level input').val() > 0) {
                           data[key] = Math.ceil($('#input_level input').val() * -data[key]);
                           if (upgraded) {
                               data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
                           }
                       } else {
                           data[key] = -data[key];
                           per_level = " (per Level)";
                           if (upgraded) {
                               data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
                           }
                       }
                   } else if (upgraded) {
                       if (data[key] < 1) {
                           data[key] = Math.round(1e6 * (data[key] * 1 + Math.round(Math.max(1, data[key] * 1000 * lvl)) / 10000)) / 1e6;
                       } else {
                           data[key] += Math.round(Math.max(1, data[key] * 0.1 * lvl));
                       }
                   }
                   html += Popup.data[cat][key].replace('#1', data[key]).replace('#2', per_level);
               }
           }
           if (cnt > 0) {
               html += '
'; } } if (data.text) { for (var i = 0; i < data.text.length; i++) {

html += '

';

           }
           html += '
'; } if (data.bonus) { for (var i = 0; i < data.bonus.length; i++) {

html += '

';

           }
           html += '
'; } if (data.jobs) {

html += '

';
           for (var i = 0; i < data.jobs.length; i++) {
html += '';
           }
html += '

';

       }
       if (data.craft) {

html += '

';

       }

html += '

';

       return html;
   },
   setPosition: function (e) {
       var window_width = $(window).width();
       var window_height = $(window).height();
       var popup_width = Popup.getEl().outerWidth();
       var popup_height = Popup.getEl().outerHeight();
       var pos_x = e.clientX;
       var pos_y = e.clientY;
       var top;
       var left;
       var margin_top = 20;
       var margin_left = 20;
       if (pos_x + popup_width + margin_left > window_width) {
           left = pos_x - popup_width - margin_left + (e.pageX - e.clientX);
       } else {
           left = pos_x + margin_left + (e.pageX - e.clientX);
       }
       if (pos_y + popup_height + margin_top > window_height) {
           top = window_height - popup_height + (e.pageY - e.clientY);
       } else {
           top = pos_y + margin_top + (e.pageY - e.clientY);
       }
       Popup.getEl().css({
           top: top,
           left: left
       });
   },data: {
       dmg: {

dmglvl: '

'

       },
       skills: {

str: '

', mob: '

', dex: '

', cha: '

', con: '

', vig: '

', tou: '

', sta: '

', hea: '

', rid: '

', ref: '

', dod: '

', hid: '

', swi: '

', aim: '

', sho: '

', pit: '

', fin: '

', rep: '

', lea: '

', tac: '

', tra: '

', ani: '

', app: '

', luck: '

', mon: '

', speed: '

', res: '

', reg: '

', exp: '

', lp: '

', sfboff: '

', sfbdef: '

', sfbres: '

', sfbdmg: '

', sfboffs: '

', sfbdefs: '

', sfbdmgs: '

', textjob: '

', textjob1: '

', textjob2: '

', textjob3: '

',

       },
       buff:{

bdes: '

', bluck: '

', bmon: '

', bspeed: '

', bres: '

', breg: '

', bsal: '

', bene: '

', bexp: '

', blp: '

', btextjob: '

', btextjob1: '

', btextjob2: '

', btextjob3: '

',

              },
       fb: {

fboff: '

', fbdef: '

', fbres: '

', fboffs: '

', fbdefs: '

', fbdmgs: '

',

       }
   }

};

//Show a "plain text" popup in the template if ((new RegExp(mw.config.get('wgFormattedNamespaces')[10] + '\:Item\_*').test(mw.config.get('wgPageName'))) && ($('.item_container').length === 1)) {

$('#mw-content-text').append('

');

   $('#popup_plain').hide();
   $('#popup_plain_contents').append(Popup.createPopup($('.item_container').attr('data-popup'), $('.item_container').attr('data-cdn-cat'), $('.item_container').attr('data-cdn-img'), 0));
   $('#popup_plain').slideDown();

}

//On dbl click on item, redirect the user to the template $('.item_container img').on('dblclick', function() {

   window.location = '/wiki/' + mw.config.get('wgFormattedNamespaces')[10] + ':Item_' + JSON.parse($(this).parent().attr('data-popup')).id / 1000;

});


//SET CALC

if ($('.infoSet').length !== 0) {

   var set_calc = {
       bonus: {
           //List of usual bonuses matched with tooltip and image url
           set_bonus: {

str:{name:"Fuerza",img:"/images/thumb/f/fd/Fuerza.png/40px-Fuerza.png"}, mob:{name:"Movilidad",img:"https://wiki.the-west.es/images/thumb/9/98/Movilidad.png/40px-Movilidad.png"}, dex:{name:"Destreza",img:"/images/thumb/0/0d/Dexterity.png/40px-Dexterity.png"}, cha:{name:"Carisma",img:"/images/thumb/c/c9/Charisma.png/40px-Charisma.png"}, con:{name:"Construcción",img:"/images/thumb/3/37/Construction.png/40px-Construction.png"}, vig:{name:"Vigor",img:"/images/thumb/9/90/Skill_Punch.png/40px-Skill_Punch.png"}, tou:{name:"Tenacidad",img:"/images/thumb/f/f8/Skill_Tough.png/40px-Skill_Tough.png"}, sta:{name:"Condición",img:"/images/thumb/8/8d/Stamina.png/40px-Stamina.png"}, hea:{name:"Puntos de vida",img:"/images/thumb/9/94/Health.png/40px-Health.png"}, rid:{name:"Montar a caballo",img:"/images/thumb/7/78/Hbr.png/40px-Hbr.png"}, ref:{name:"Reflejo",img:"/images/thumb/e/e9/Skill_Reflex.png/40px-Skill_Reflex.png"}, dod:{name:"Eludir",img:"/images/thumb/0/07/Skill_Dodge.png/40px-Skill_Dodge.png"}, hid:{name:"Esconder",img:"/images/thumb/9/97/Hiding.png/40px-Hiding.png"}, swi:{name:"Nadar",img:"/images/thumb/f/f4/Swimming.png/40px-Swimming.png"}, aim:{name:"Apuntar",img:"/images/thumb/5/53/Skill_Aim.png/40px-Skill_Aim.png"}, sho:{name:"Disparar",img:"/images/thumb/7/73/Skill_Shot.png/40px-Skill_Shot.png"}, pit:{name:"Poner trampas",img:"/images/thumb/e/e1/Trapping.png/40px-Trapping.png"}, fin:{name:"Destreza de manos",img:"/images/thumb/1/18/Fms.png/40px-Fms.png"}, rep:{name:"Reparar",img:"/images/thumb/d/d5/Repairing.png/40px-Repairing.png"}, lea:{name:"Liderazgo",img:"/images/thumb/4/44/Leadership.png/40px-Leadership.png"}, tac:{name:"Táctica",img:"/images/thumb/9/91/Skill_Tactic.png/40px-Skill_Tactic.png"}, tra:{name:"Comerciar",img:"/images/thumb/f/f3/Skill_Trading.png/40px-Skill_Trading.png"}, ani:{name:"Instinto animal",img:"/images/thumb/9/9d/AnimalInstinct.png/40px-AnimalInstinct.png"}, app:{name:"Apariencia",img:"/images/thumb/4/4c/Skill_Appearance.png/40px-Skill_Appearance.png"}, fbdef:{name:"Defense (Fort battle bonus)",img:"/images/8/82/Set_Fb_defense.png"}, fboff:{name:"Attack (Fort battle bonus)",img:"/images/3/30/Set_Fb_offense.png"}, fbres:{name:"Resistance (Fort battle bonus)",img:"/images/4/4b/Resistance.png"}, fbdefs:{name:"Defense (Fort battle sector bonus)",img:"/images/1/1a/Set_Fb_defense_sec.png"}, fboffs:{name:"Attack (Fort battle sector bonus)",img:"/images/f/fe/Set_Fb_offense_sec.png"}, fbdmgs:{name:"Damages (Fort battle sector bonus)",img:"/images/b/b3/Damages_sector.png"}},

           //If there are any other "special" bonuses, they will be dynamically retrieved and stored there
           extra_set_bonus: {}
       },
       //Bonuses from all sets / items :
       data: {},
       //Status of all items (item lvl, activated or not)
       itemStatus: {},
       getData: function () {
           //Get bonuses from all item sets
           $('.set_container').each(function () {
               var set_id = $(this).attr('data-set-id');
               set_calc.itemStatus[set_id] = {};
               set_calc.data[set_id] = {
                   items: {},
                   set: {}
               };
               $(this).find('.item_container').each(function () {
                   var json = JSON.parse($(this).attr('data-popup'));
                   if ($(this).is(":hidden")) {
                       set_calc.itemStatus[set_id][json.id] = false;
                   } else {
                       set_calc.itemStatus[set_id][json.id] = 0;
                   }
                   for (var prop in json) {
                       if (json.hasOwnProperty(prop) && set_calc.bonus.set_bonus.hasOwnProperty(prop)) {
                           if (!set_calc.data[set_id].items[prop]) {
                               set_calc.data[set_id].items[prop] = {};
                           }
                           set_calc.data[set_id].items[prop][json.id] = json[prop];
                       }
                   }
               });
           });
           //Get bonuses from all sets
           $('.infoSet').each(function () {
               var set_id = $(this).attr('data-set-id');
               $(this).find('.infosetatt').each(function () {
                   var nb = $(this).attr('data-nb');
                   set_calc.data[set_id].set[nb] = {};
                   $(this).find('.set_bonus').each(function () {
                       key = $(this).attr('data-type');
                       if ($(this).find('.calc').length !== 0) {
                           set_calc.data[set_id].set[nb][key] = -parseFloat($(this).find('.calc').attr('id'));
                       } else {
                           set_calc.data[set_id].set[nb][key] = parseFloat($(this).find('.val').text());
                       }
                       if (!set_calc.bonus.set_bonus.hasOwnProperty(key)) {
                           set_calc.bonus.extra_set_bonus[key] = {
                               img: $(this).find('img').attr('src'),
                               name: $(this).find('#tooltip_content').text()
                           };
                       }
                   });
               });
           });
       },
       calc: function () {
           //Only calc if a player level is provided
           if ($('#input_level').length === 0 | $('#input_level input').val() !== "") {
               var level = parseInt($('#input_level input').val());
               total = {};
               for (var set_id in set_calc.data) {
                   for (var key in set_calc.data[set_id].items) {
                       for (var item_id in set_calc.data[set_id].items[key]) {
                           if (set_calc.itemStatus[set_id][item_id] !== false) {
                               lvl = set_calc.itemStatus[set_id][item_id];
                               if (!total[key]) {
                                   total[key] = 0;
                               }
                               var value = set_calc.data[set_id].items[key][item_id];
                               if (set_calc.data[set_id].items[key][item_id] < 0) {
                                   //If bonus (per Level)
                                   value = -value;
                                   if (set_calc.itemStatus[set_id][item_id] > 0) {
                                       //If item upgraded
                                       total[key] += Math.ceil(value * level) + Math.round(Math.max(1, Math.ceil(value * level) * 0.1 * lvl));
                                   } else {
                                       total[key] += Math.ceil(value * level);
                                   }
                               } else {
                                   if (set_calc.itemStatus[set_id][item_id] > 0) {
                                       if (value < 1) {
                                           total[key] += Math.round(1e6 * (value * 1 + Math.round(Math.max(1, value * 1000 * lvl)) / 10000)) / 1e6;
                                       } else {
                                           total[key] += Math.round(Math.max(1, value * 0.1 * lvl));
                                       }
                                   } else {
                                       total[key] += value;
                                   }
                               }
                           }
                       }
                   }
                   var item_nb = 0;
                   for (var item_id in set_calc.itemStatus[set_id]) {
                       if (set_calc.itemStatus[set_id][item_id] !== false) {
                           item_nb++;
                       }
                   }
                   for (var key in set_calc.data[set_id].set[item_nb]) {
                       if (!total[key]) {
                           total[key] = 0;
                       }
                       if (set_calc.data[set_id].set[item_nb][key] < 0) {
                           total[key] += Math.ceil(-set_calc.data[set_id].set[item_nb][key] * level);
                       } else {
                           total[key] += set_calc.data[set_id].set[item_nb][key];
                       }
                   }
               }
               //Create the html table

var html = '

<tbody>

Total
';
               for (var key in set_calc.bonus.set_bonus) {
                   if (total.hasOwnProperty(key)) {
html += '
<img src="' + set_calc.bonus.set_bonus[key].img + '">+' + total[key] + '
' + set_calc.bonus.set_bonus[key].name + '
';
                   }
               }
               for (var key in set_calc.bonus.extra_set_bonus) {
                   if (total.hasOwnProperty(key)) {
html += '
<img src="' + set_calc.bonus.extra_set_bonus[key].img + '">+' + total[key] + (['xp', 'money', 'luck', 'spd', 'regen', 'drop'].indexOf(key) !== -1 ? "%" : "") + '
' + set_calc.bonus.extra_set_bonus[key].name + '
';
                   }
               }
               //Display the result at the bottom of the page
               $('#set_calc').html(html);
           } else {
               $('#set_calc').html("");
           }
       },
       initEvents: function () {
           //Deactivate / activate item on click
           $('.item_container > img').on('click', function () {
               var item_container = $(this).closest('.item_container');
               item_container.toggleClass('item_off');
               var set_id = item_container.closest('.set_container').attr('data-set-id');
               var item_id = JSON.parse(item_container.attr('data-popup')).id;
               if (item_container.hasClass('item_off') || item_container.is(":hidden")) {
                   set_calc.itemStatus[set_id][item_id] = false;
               } else {
                   set_calc.itemStatus[set_id][item_id] = parseInt(item_container.attr('data-lvl'));
               }
               set_calc.calc();
           });
           //Update item level on upgrade / downgrade
           $(document).on('click', '.upgrade, .downgrade', function () {
               var item = $(this).closest('.item_container');
               var set_id = item.closest('.set_container').attr('data-set-id');
               if (!item.hasClass('item_off') && !item.is(":hidden")) {
                   set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = parseInt(item.attr('data-lvl'));
                   set_calc.calc();
               }
           });
           //Calc again when player level changes
           $("#input_level").bind("propertychange keyup input paste", function () {
               set_calc.calc();
           });
           //Activate/deactivate melee/fire weapon when the switch btn is clicked
           $("#switch").on('click', function () {
               $('#melee, #fire').each(function () {
                   var item = $(this).find('.item_container');
                   var set_id = $(this).closest('.set_container').attr('data-set-id');
                   if ($(this).is(":hidden")) {
                       set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = false;
                   } else {
                       set_calc.itemStatus[set_id][JSON.parse(item.attr('data-popup')).id] = parseInt(item.attr('data-lvl'));
                   }
               });
               set_calc.calc();
           });
       },
       init: function () {
           set_calc.initEvents();
           set_calc.getData();
$('#mw-content-text').append('
');
           if ($('#input_level').length === 0)
               set_calc.calc();
       }
   };
   set_calc.init();

}