angular.module('app').directive('componentSelect', ['$translate', function($translate) { // Generting the HTML in this manner is MUCH faster than using an angular template. function appendGroup(list, opts, cid, mass, checkWarning) { var prevClass = null, prevRating = null; for (var i = 0; i < opts.length; i++) { var o = opts[i]; var id = o.id || (o.class + o.rating); // Standard components' ID is their class and rating if (i > 0 && opts.length > 3 && o.class != prevClass && (o.rating != prevRating || o.mode) && o.grp != 'pa') { list.push('
'); } list.push('
  • '); if (o.mode) { list.push(' '); } list.push('', o.class, o.rating); if (o.missile) { list.push('/' + o.missile); } if (o.name) { list.push(' ' + $translate.instant(o.name)); } list.push('
  • '); prevClass = o.class; prevRating = o.rating; } } return { restrict: 'A', scope: { opts: '=', // Component Options object groups: '=', // Groups of Component Options mass: '=', // Current ship mass s: '=', // Current Slot warning: '=' // Check warning function }, link: function(scope, element) { var list = []; var cid = scope.s.id; // Slot's current component id var component = scope.s.c; // Slot's Current Component (may be null/undefined) var opts = scope.opts; var groups = scope.groups; var mass = (scope.mass ? scope.mass : 0) - (component && component.mass ? component.mass : 0); // Mass minus the currently selected component if (groups) { // At present time slots with grouped options (Hardpoints and Internal) can be empty list.push('
    ', $translate.instant('empty'), '
    '); for (var g in groups) { var grp = groups[g]; var grpCode = grp[Object.keys(grp)[0]].grp; // Nasty operation to get the grp property of the first/any single component list.push('
    ', $translate.instant(g), '
    '); } } else { list.push(''); } element.html(list.join('')); // If groups are present and a component is already selectd if (groups && component && component.grp) { var groupElement = angular.element(document.getElementById(component.grp)); var parentElem = element[0].parentElement; parentElem.scrollTop = groupElement[0].offsetTop; // Scroll to currently selected group } } }; }]);