define([ 'js/system/events', 'js/system/client', 'html!ui/templates/reputation/template', 'css!ui/templates/reputation/styles' ], function ( events, client, template, styles ) { return { tpl: template, centered: true, modal: true, hasClose: true, list: null, postRender: function () { this.onEvent('onGetReputations', this.onGetReputations.bind(this)); this.onEvent('onShowReputation', this.toggle.bind(this, true)); }, build: function () { let list = this.list; this.find('.info .heading-bottom').html(''); this.find('.info .description').html(''); this.find('.bar-outer').hide(); if (!list.length) this.find('.heading-bottom').html("you haven't discovered any factions yet"); else this.find('.heading-bottom').html('select a faction to see more info'); let elList = this.find('.list').empty(); list.forEach(l => { if (l.noGainRep) return; let html = '
' + l.name + '
'; let el = $(html).appendTo(elList); el.on('click', this.onSelectFaction.bind(this, el, l)); el.on('click', events.emit.bind(events, 'onClickButton')); }); }, onSelectFaction: function (el, faction) { this.find('.selected').removeClass('selected'); el.addClass('selected'); this.find('.info .heading-bottom').html(faction.name); this.find('.info .description').html(faction.description); let rep = faction.rep; let tier = faction.tier; let tiers = faction.tiers; let prevTier = tiers[tier]; let nextTier = (tier === tiers.length - 1) ? tiers[tiers.length - 1] : tiers[tier + 1]; let percentage = (rep - prevTier.rep) / (nextTier.rep - prevTier.rep) * 100; if (tier === tiers.length - 1) percentage = 100; this.find('.bar-outer').show(); this.find('.front').css({ width: percentage + '%', minWidth: percentage + '%' }); let w = ~~(this.find('.front').width() / 5) * 5; this.find('.front').css({ width: w }); percentage = ~~(percentage * 10) / 10; this.find('.tier').html(tiers[tier].name.toLowerCase() + ' (' + percentage + '%)'); }, onGetReputations: function (list) { this.list = list; this.list.sort(function (a, b) { if (a.name[0] < b.name[0]) return -1; return 1; }); let selElement = this.find('.selected'); if (this.el.is(':visible') && selElement.index() !== -1) this.onSelectFaction(selElement, list[selElement.index() + 1]); }, onAfterShow: function () { this.build(); } }; });