diff --git a/src/app/Router.js b/src/app/Router.js index 37bd2305..1bac3386 100644 --- a/src/app/Router.js +++ b/src/app/Router.js @@ -1,7 +1,5 @@ import Persist from './stores/Persist'; -import ReactGA from 'react-ga'; -ReactGA.initialize('UA-55840909-18'); let standalone = undefined; /** @@ -259,16 +257,6 @@ Route.prototype.match = function(path, params) { * @param {string} path Path to track */ function gaTrack(path) { - const match = path.match(/\/outfit\/(.*)(\?code=.*)/); - if (match) { - if (match[1]) { - ReactGA.ga('set', 'contentGroup1', match[1]); - } - if (match[2]) { - ReactGA.ga('set', 'contentGroup2', match[2]); - } - } - ReactGA.pageview(path); const _paq = window._paq || []; _paq.push(['trackPageView']); } diff --git a/src/app/components/AvailableModulesMenu.jsx b/src/app/components/AvailableModulesMenu.jsx index b3fda06f..94cd0e23 100644 --- a/src/app/components/AvailableModulesMenu.jsx +++ b/src/app/components/AvailableModulesMenu.jsx @@ -126,7 +126,7 @@ export default class AvailableModulesMenu extends TranslatedComponent { onSelect: PropTypes.func.isRequired, diffDetails: PropTypes.func, m: PropTypes.object, - shipMass: PropTypes.number, + ship: PropTypes.object.isRequired, warning: PropTypes.func, firstSlotId: PropTypes.string, lastSlotId: PropTypes.string, @@ -134,10 +134,6 @@ export default class AvailableModulesMenu extends TranslatedComponent { slotDiv: PropTypes.object }; - static defaultProps = { - shipMass: 0 - }; - /** * Constructor * @param {Object} props React Component properties @@ -159,15 +155,15 @@ export default class AvailableModulesMenu extends TranslatedComponent { */ _initState(props, context) { let translate = context.language.translate; - let { m, warning, shipMass, onSelect, modules, firstSlotId, lastSlotId } = props; + let { m, warning, onSelect, modules, ship } = props; let list, currentGroup; let buildGroup = this._buildGroup.bind( this, + ship, translate, m, warning, - shipMass - (m && m.mass ? m.mass : 0), (m, event) => { this._hideDiff(event); onSelect(m); @@ -255,18 +251,16 @@ export default class AvailableModulesMenu extends TranslatedComponent { /** * Generate React Components for Module Group + * @param {Ship} ship Ship the selection is for * @param {Function} translate Translate function * @param {Object} mountedModule Mounted Module * @param {Function} warningFunc Warning function - * @param {number} mass Mass * @param {function} onSelect Select/Mount callback * @param {string} grp Group name * @param {Array} modules Available modules - * @param {string} firstSlotId id of first slot item - * @param {string} lastSlotId id of last slot item * @return {React.Component} Available Module Group contents */ - _buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules, firstSlotId, lastSlotId) { + _buildGroup(ship, translate, mountedModule, warningFunc, onSelect, grp, modules) { let prevClass = null, prevRating = null, prevName; let elems = []; @@ -287,10 +281,11 @@ export default class AvailableModulesMenu extends TranslatedComponent { prevName = m.name; if (ModuleUtils.isShieldGenerator(m.grp)) { // Shield generators care about maximum hull mass - disabled = mass > m.maxmass; - } else if (m.maxmass) { - // Thrusters care about total mass - disabled = mass + m.mass > m.maxmass; + disabled = ship.hullMass > m.maxmass; + // If the mounted module is experimental as well, we can replace it so + // the maximum does not apply + } else if (m.experimental && (!mountedModule || !mountedModule.experimental)) { + disabled = 4 <= ship.hardpoints.filter(o => o.m && o.m.experimental).length; } let active = mountedModule && mountedModule.id === m.id; let classes = cn(m.name ? 'lc' : 'c', { diff --git a/src/app/components/HardpointSlot.jsx b/src/app/components/HardpointSlot.jsx index 856b01a8..1833d7d4 100644 --- a/src/app/components/HardpointSlot.jsx +++ b/src/app/components/HardpointSlot.jsx @@ -104,10 +104,10 @@ export default class HardpointSlot extends Slot { onMouseOut={tooltip.bind(null, null)}>{translate('shotdmg')}: {formats.round1(m.getDamage())} : null} {m.getEps() ?
{translate('EPS')}: {formats.round1(m.getEps())}{u.MW} {m.getClip() ? - ({formats.round1((m.getClip() * m.getEps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()))}{u.MW}) : null}
: null} + ({formats.round1(m.getEps() / m.getDps() * m.getSDps())}{u.MW}) : null} : null} {m.getHps() ?
{translate('HPS')}: {formats.round1(m.getHps())} {m.getClip() ? - ({formats.round1((m.getClip() * m.getHps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()))}) : null}
: null} + ({formats.round1(m.getHps() / m.getDps() * m.getSDps())}) : null} : null} {m.getDps() && m.getEps() ?
{translate('DPE')}: {formats.f1(m.getDps() / m.getEps())}
: null} {m.getRoF() ?
  • this.sectionRefArr['nl-F'] = smRef}>{translate('nl')}
  • -
    {translate('ggc')}
    -
    {translate('rfl')}