Popup.js

De la Wiki The-West RO
Jump to navigation

westui = {

   lang: {
       input_level: "Stufe",
       input_search: "Suche",
       damages: "Schaden",
       per_level: "pro Stufe",
       speed: "Geschwindigkeit",
       level: "Stufe",
       sellable: "Verkaufbar",
       auctionable: "Auktionierbar",
       upgradeable: "Veredelbar",
       total: "Total",
       aps: "Arbeitspunkte auf ",
       popup: {
           dmg: {
               dmg: ["Schaden", ],
           },
           attribute: {
               str: ["Stärke", "8/8b/Strength"],
               fle: ["Beweglichkeit", "d/db/Flexibility"],
               dex: ["Geschicklichkeit", "0/0d/Dexterity"],
               cha: ["Charisma", "c/c9/Charisma"],
           },
           skill: {
               bui: ["Errichten", "1/18/Build"],
               pun: ["Schlagkraft", "8/8f/Punch"],
               tou: ["Zähigkeit", "2/24/Tough"],
               end: ["Ausdauer", "0/0a/Endurance"],
               hea: ["Lebenspunkte", "9/94/Health"],
               rid: ["Reiten", "e/e4/Ride"],
               ref: ["Reflex", "b/b2/Reflex"],
               dod: ["Ausweichen", "b/b2/Dodge"],
               hid: ["Verstecken", "9/96/Hide"],
               swi: ["Schwimmen", "9/93/Swim"],
               aim: ["Zielen", "d/d4/Aim"],
               sho: ["Schießen", "d/dc/Shot"],
               pit: ["Fallen stellen", "6/67/Pitfall"],
               fin: ["Fingerfertigkeit", "b/b3/Finger_dexterity"],
               rep: ["Reparieren", "e/e2/Repair"],
               lea: ["Leiten", "4/44/Leadership"],
               tac: ["Taktik", "0/09/Tactic"],
               tra: ["Handeln", "d/d5/Trade"],
               ani: ["Mit Tieren umgehen", "2/21/Animal"],
               app: ["Auftreten", "0/00/Appearance"],
           },
           txtgreen: {
               exp: ["Erfahrung für Arbeiten, Duelle und Fortkämpfe", "0/0c/Set_exp"],
               dol: ["Verdienst bei Arbeiten und Duellen", "6/67/Set_dol"],
               luc: ["Erhöhte Glückschance", "f/f0/Set_luc"],
               dro: ["Verbesserte Produktfundchance", "3/36/Set_dro"],
               reg: ["Regeneration im Hotel", "9/97/Set_reg"],
               spe: ["Geschwindigkeit", "b/bc/Set_spe"],
               pra: ["Beten", "1/16/Set_pra"],
           },
           fb_stats: {
               def: ["Multiplayer-Verteidigung", "f/f3/Set_def"],
               off: ["Multiplayer-Angriff", "6/68/Set_off"],
               res: ["Widerstand (Fortkampfbonus)", "b/bf/Set_res"],
               dam: ["Schaden", "f/f4/Set_dam"],
               defs: ["Verteidigung (Fortkampfsektorbonus)", "e/e5/Set_defs"],
               offs: ["Angriff (Fortkampfsektorbonus)", "b/ba/Set_offs"],
               dams: ["Schaden (Fortkampfsektorbonus)", "e/e9/Set_dams"],
           }
       },
       not: function(s) {
           return 'Nicht ' + s.toLowerCase();
       }
   },
   config: {
       link_on_click: !1,
       cdn: "//westde.innogamescdn.com",
       img_buyprice: "/images/5/57/Buy_price.png",
       img_sellprice: "/images/f/fc/Sell_price.png",
       img_prof: ['c/c0', 'c/c3', '2/2d', '9/9a', 'f/fc'],
       img_job: {
           trader: ['d/dc', 'Fahrender Händler'],
           tailor: ['d/de', 'Schneider'],
           gunsmith: ['2/21', 'Büchsenmacher'],
           general: ['e/ef', 'Gemischwaren'],
           all: ['d/d1', 'Alle Arbeiten'],
       },
       img_m: "c/c5/Gender_m",
       img_f: "4/41/Gender_f",
       img_due: "b/bb/CharS_duelist",
       img_adv: "7/72/CharS_adventurer",
       img_wor: "2/2a/CharS_worker",
       img_sol: "5/5c/CharS_soldier",
       set_bonus: {},
       jobIcon: function(p, q) {
           var wip = this.img_job[p],
               ji = wip ? ['/images/' + wip[0] + '/Job_', wip[1] + (q || )] : [this.cdn + '/images/jobs/', q];
           ji[0] += p + '.png';
           return ji;
       }
   },
   initPage: function() {
       if ($("#input_level").length)
           var t = $('<input type="number" style="width:80px;" class="west" placeholder="' + westui.lang.input_level + '" min="0" max="150">').on("propertychange keyup input paste", function() {
               this.value > 150 ? this.value = 150 : this.value < 0 && (this.value = 0), $(".calc").each(function() {
                   0 === t.val() ? ($(this).html(this.id), $(".per_level_off").addClass("per_level").removeClass("per_level_off")) : ($(this).html(Math.ceil(Number(this.id) * t.val())), $(".per_level").addClass("per_level_off").removeClass("per_level"));
               });
           }).appendTo($("#input_level"));
       if ($("#input_search").length) {
           $('<input type="search" class="west" placeholder="' + westui.lang.input_search + '">').on("propertychange keyup input paste", function() {
               var t = this.value.toLowerCase();
               if ($(".set_icon").length) {
                   "" === t ? ($('.set_icon + br').show(), $(".set_icon").show()) : ($('.set_icon + br').hide(), $(".set_icon").hide(), $(".set_icon").filter(function() {
                       return this.children[1].title.toLowerCase().indexOf(t) > -1;
                   }).show());
               } else {
                   "" === t ? $(".item_container").show() : ($(".item_container").hide(), $(".item_container").filter(function() {
                       return $(this).attr("data-popup").toLowerCase().indexOf(t) > -1;
                   }).show());
               }
           }).appendTo($("#input_search"));
       }
       $(".set_switch").length && ($(".set_fire").hide(), $(".set_switch").on("click", function() {
           $('.set_melee, .set_fire').toggle();
       })), $(".set_switchF").length && ($(".set_F").hide(), $(".set_switchF").on("click", function() {
           $('.set_F, .set_F + div').toggle();
       })), $(".item_container > img").on("click", function() {
           var loc = $(this).parent().attr("data-link");
           if (loc && !$(".infoSet").length)
               location.href = '/wiki/' + loc;
       });
   },
   popup: {
       content: "",
       delay: 200,
       active: !1,
       show: function(t) {
           westui.popup.content = westui.popup.createPopup($(t), parseInt($(t).attr("data-lvl"))), westui.popup.active = !0, westui.popup.setTimeout(), westui.popup.getContainer().html(westui.popup.content);
       },
       hide: function() {
           westui.popup.getEl().css({
               display: "none",
               top: 0,
               left: 0
           }), westui.popup.active = !1, westui.popup.clearTimeout();
       },
       setTimeout: function() {
           westui.popup.clearTimeout(), westui.popup.timer = window.setTimeout(function() {
               westui.popup.getEl().css("display", "block");
           }, westui.popup.delay);
       },
       clearTimeout: function() {
           westui.popup.timer && window.clearTimeout(westui.popup.timer);
       },
       getEl: function() {
           return $("#popup_window");
       },
       getContainer: function() {
           return $("#popup_contents");
       },
       getValue: function(n, a, tc, o, tn) {
           var r = "";
           tc < 0 ? $("#input_level input").val() > 0 ? (tc = Math.ceil($("#input_level input").val() * -tc), n && (tc += Math.round(Math.max(1, .1 * tc * a)))) : (tc = -tc, r = " (" + westui.lang.per_level + ")", n && (tc = Math.round(1e6 * (1 * tc + Math.round(Math.max(1, 1e3 * tc * a)) / 1e4)) / 1e6)) : n && (tc < 1 ? tc = Math.round(1e6 * (1 * tc + Math.round(Math.max(1, 1e3 * tc * a)) / 1e4)) / 1e6 : tc += Math.round(Math.max(1, .1 * tc * a)));

return '

';

       },
       createPopup: function(t, a) {
           a = a || 0;
           t = JSON.parse(t.attr("data-popup"));
           var wl = westui.lang,
               wc = westui.config,

s = '


',

               n = !1,
               p = t.dmgr && t.dmgr.split('-');
           if (t.txt)

s += '


';

           a >= 1 && a <= 5 && (n = !0, t.auc = !1);
           var l = 0;

p && (l = 1) && (n && (p[0] = p[0] * 1 + Math.round(Math.max(1, .1 * p[0] * a)), p[1] = p[1] * 1 + Math.round(Math.max(1, .1 * p[1] * a))), s += '

');

           for (var o in wl.popup) {
               for (var c in wl.popup[o])
                   if (t.hasOwnProperty(c)) {
                       s += westui.popup.getValue(n, a, t[c], o, (o == 'txtgreen' && c != 'pra' ? '% ' : ' ') + wl.popup[o][c][0]);
                       l = o;
                       l == 'dmg' && (s += '
'); } } for (var m in t) { if (m.startsWith('job_')) { s += westui.popup.getValue(n, a, t[m][0], 'txtgreen', ' ' + wl.aps + t[m][1]); l = m; } } l && l != 'dmg' && (s += '
'); if (t.bonus) {

s += '

Effekt:

';

               for (p of t.bonus)

s += '

';

               s += '
'; } if (t.jobs) {

s += '

'; for (p in t.jobs) if (p == 'req') { s += ''; } else { for (p = 0; p < t.jobs.length; p++) s += '";
                   }
s += '


';

           }
           if (t.craft) {

s += '


';

           }

t.spd && (n && (t.spd += Math.round(Math.max(1, .1 * t.spd * a))), s += '


'), t.set && (s += '

' + t.set + "


"), (t.auc || t.sell) && (s += '<img src="' + wc.img_buyprice + '"> $' + t.bp + ' <img src="' + wc.img_sellprice + '"> $' + t.sp + '
'), s += !t.sell ? '' + wl.not(wl.sellable) + '

' : '
', t.sex && (s += '<img src="/images/' + wc['img_' + t.sex] + '.png"> '), t.char && (s += '<img src="/images/' + wc['img_' + t.char] + '.png"> '), t.lvl && (s += wl.level + " " + t.lvl + "
"), s += '' + (t.auc ? wl.auctionable : wl.not(wl.auctionable)) + '
', s += '' + (t.upg ? wl.upgradeable : wl.not(wl.upgradeable)) + '
'; return s += '

';

       },
       setPosition: function(t) {
           var e, i, a = $(window).width(),
               s = $(window).height(),
               n = westui.popup.getEl().outerWidth(),
               p = westui.popup.getEl().outerHeight(),
               o = t.clientX,
               l = t.clientY;
           i = o + n + 20 > a ? o - n - 20 + (t.pageX - o) : o + 20 + (t.pageX - o), e = l + p + 20 > s ? s - p + (t.pageY - l) : 20 + t.pageY, westui.popup.getEl().css({
               top: e,
               left: i
           });
       },
       init: function() {

$("body").append('

'), $(document).on("mouseenter", ".item_container", function(t) {

               westui.popup.show(this), westui.popup.setPosition(t);
           }), $(document).on("mouseleave", ".item_container", function() {
               westui.popup.hide();
           }), $(document).on("mousemove", ".item_container", function(t) {
               westui.popup.setPosition(t);
           }), $(".item_level").mousedown(function(t) {
               t.preventDefault();
           }), $(document).on("click", ".upgrade", function() {
               var t = $(this).closest(".item_container"),
                   e = parseInt(t.attr("data-lvl"));
               5 !== e && (t.attr("data-lvl", e + 1), t.find(".level").html(e + 1)), westui.popup.show(t[0]);
           }), $(document).on("click", ".downgrade", function() {
               var t = $(this).closest(".item_container"),
                   e = parseInt(t.attr("data-lvl"));
               0 !== e && (t.attr("data-lvl", e - 1), t.find(".level").html(e - 1)), westui.popup.show(t[0]);
           });
       }
   },
   set_calc: {
       extra_set_bonus: {},
       data: {},
       itemStatus: {},
       getData: function() {
           var wsc = westui.set_calc;
           for (var o in westui.lang.popup) {
               var l = westui.lang.popup[o];
               for (var c in l) {
                   var small = ['attribute', 'skill'].includes(o) ? ['thumb/', '/40px-' + l[c][1].split('/')[2] + '.png'] : [, ];
                   westui.config.set_bonus[c] = {
                       name: l[c][0],
                       img: '/images/' + small[0] + l[c][1] + '.png' + small[1]
                   };
               }
           }
           var t = 0;
           $(".infoSet").each(function() {
               t++;
               wsc.itemStatus[t] = {}, wsc.data[t] = {
                   items: {},
                   set: {}
               };
               $(this).find(".setbonusrow").each(function() {
                   var e = $(this).attr("data-nb");
                   wsc.data[t].set[e] = {}, $(this).find(".set_bonus").each(function() {
                       var img = $(this).find("img").attr("src"),
                           exp = img.match(/\/(Set_)?((Job_)?\w+)\.png/),
                           key = (exp[1] || exp[3] ? exp[2] : exp[2].substr(0, 3)).toLowerCase();
                       0 !== $(this).find(".calc").length ? wsc.data[t].set[e][key] = -parseFloat($(this).find(".calc").attr("id")) : wsc.data[t].set[e][key] = parseFloat($(this).find(".val").text()), westui.config.set_bonus.hasOwnProperty(key) || (wsc.extra_set_bonus[key] = {
                           img: img,
                           name: $(this).find("#tooltip_content").text()
                       });
                   });
               });
           });
           t = 0;
           $(".set_container").each(function() {
               $(this).attr("data-set-id", ++t);
               $(this).find(".item_container").each(function() {
                   var e = JSON.parse($(this).attr("data-popup"));
                   $(this).is(":hidden") ? wsc.itemStatus[t][e.id] = !1 : wsc.itemStatus[t][e.id] = 0;
                   for (var i in e) {
                       if (i == 'dmg')
                           continue;
                       var isj = i.startsWith('job_');
                       e.hasOwnProperty(i) && (westui.config.set_bonus.hasOwnProperty(i) || wsc.extra_set_bonus.hasOwnProperty(i) || isj && (wsc.extra_set_bonus[i] = {
                           img: westui.config.jobIcon(i.replace('job_', ))[0] + '" width="40',
                           name: westui.lang.aps + e[i][1]
                       })) && (wsc.data[t].items[i] || (wsc.data[t].items[i] = {}), wsc.data[t].items[i][e.id] = (isj ? e[i][0] : e[i]));
                   }
               });
           });
       },
       addBon: function(c, total, w, l) {

return total ? ('

<img src="' + w.img + '">+' + Math.round(total * 1000) / 1000 + (['exp', 'dol', 'luc', 'reg', 'dro', 'spe'].includes(c) ? '%' : ) + '
' + w.name + (l ? '' : ) + '

') : ;

       },
       isBon: function(c, total, w) {
           var p = ;
           if (total[c])
               for (var l = 0; l < 2; l++)
                   p += this.addBon(c, total[c][l], w[c], l);
           return p;
       },
       lvlUp: function(upg, val) {
           var d = val < 1 ? 3 : -1;
           var e = !upg ? 0 : Math.round(Math.max(1, val * Math.pow(10, d) * upg)) / Math.pow(10, d + 1);
           return val + e;
       },
       calc: function() {
           var wsc = westui.set_calc,
               lvl = $("#input_level input").val() * 1,
               total = {},
               key;
           for (var e in wsc.data) {
               for (var i in wsc.data[e].items)
                   for (var k in wsc.data[e].items[i]) {
                       var upg = wsc.itemStatus[e][k];
                       if (!1 !== upg) {
                           total[i] || (total[i] = [0, 0]);
                           var bi = wsc.data[e].items[i][k];
                           key = 0;
                           if (bi < 0) {
                               bi *= -1;
                               key = 1;
                           }
                           bi = wsc.lvlUp(upg, (lvl && key ? Math.ceil(bi * lvl) : bi));
                           if (key && !lvl)
                               total[i][1] += bi;
                           else
                               total[i][0] += bi;
                       }
                   }
               var n = 0;
               for (var a in wsc.itemStatus[e])
                   !1 !== wsc.itemStatus[e][a] && n++;
               for (var b in wsc.data[e].set[n]) {
                   var bs = wsc.data[e].set[n][b];
                   key = 0;
                   total[b] || (total[b] = [0, 0]);
                   if (bs < 0) {
                       bs *= -1;
                       key = 1;
                   }
                   bs = lvl && key ? Math.ceil(bs * lvl) : bs;
                   if (key && !lvl)
                       total[b][1] += bs;
                   else
                       total[b][0] += bs;
               }
           }

var p = '

<tbody>
' + westui.lang.total + "
";
           for (var c in westui.config.set_bonus)
               p += wsc.isBon(c, total, westui.config.set_bonus);
           for (var d in wsc.extra_set_bonus)
               p += wsc.isBon(d, total, wsc.extra_set_bonus);
           $("#set_calc").html(p);
       },
       initEvents: function() {
           $(".item_container > img").on("click", function(e) {
               var t = $(this).closest(".item_container");
               t.toggleClass("item_off");
               e = t.closest(".set_container").attr("data-set-id"), i = JSON.parse(t.attr("data-popup")).id;
               t.hasClass("item_off") || t.is(":hidden") ? westui.set_calc.itemStatus[e][i] = !1 : westui.set_calc.itemStatus[e][i] = parseInt(t.attr("data-lvl")), westui.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") || (westui.set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id] = parseInt(t.attr("data-lvl")), westui.set_calc.calc());
           }), $("#input_level").on("propertychange keyup input paste", function() {
               westui.set_calc.calc();
           }), $(".set_switch, .set_switchF").on("click", function() {
               $(".set_melee, .set_F").each(function() {
                   $(this).parent().find(".item_container").each(function() {
                       var t = $(this);
                       e = t.closest(".set_container").attr("data-set-id");
                       t.hasClass("item_off") || t.is(":hidden") ? westui.set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id] = !1 : westui.set_calc.itemStatus[e][JSON.parse(t.attr("data-popup")).id] = parseInt(t.attr("data-lvl"));
                   });
               }), westui.set_calc.calc();
           });
       },
       dragElement: function(elmnt) {
           var p = [0, 0, 0, 0];
           elmnt.onmousedown = dragMouseDown;
           var first = 0;
           function dragMouseDown(e) {
               e = e || window.event;
               e.preventDefault();
               p[3] = e.clientX;
               p[4] = e.clientY;
               if (!first) {
                   first = 1;
                   $("#set_calc").css({
                       position: 'fixed',
                       margin: 0
                   });
                   elmnt.style.top = (elmnt.offsetTop - document.documentElement.scrollTop - 20) + "px";
               }
               document.onmousemove = elementDrag;
               document.onmouseup = closeDragElement;
           }
           function elementDrag(e) {
               e = e || window.event;
               e.preventDefault();
               p[1] = p[3] - e.clientX;
               p[2] = p[4] - e.clientY;
               p[3] = e.clientX;
               p[4] = e.clientY;
               elmnt.style.top = (elmnt.offsetTop - p[2]) + "px";
               elmnt.style.left = (elmnt.offsetLeft - p[1]) + "px";
           }
           function closeDragElement() {
               document.onmouseup = null;
               document.onmousemove = null;
           }
       },
       init: function() {
westui.set_calc.initEvents(), westui.set_calc.getData(), $("dl + p").after('
'), westui.set_calc.dragElement($("#set_calc")[0]), westui.set_calc.calc();
       }
   },
   init: function() {
       westui.initPage(), $('.item_container').length && westui.popup.init(), $('.infoSet').length && westui.set_calc.init();
   }

}, westui.init();