angular.module('app').directive('comparisonTable', ['$state', '$translate', '$rootScope', function($state, $translate, $rootScope) { function tblHeader(facets) { var r1 = ['', $translate.instant('SHIP'), '', $translate.instant('BUILD'), '']; var r2 = []; for (var i = 0, l = facets.length; i < l; i++) { if (facets[i].active) { var f = facets[i]; var p = f.props; var pl = p.length; r1.push('', $translate.instant(f.lbls[j]), ''); } } r1.push('>', $translate.instant(f.title), ''); } } r1.push(''); r1.push(r2.join('')); r1.push(''); return r1.join(''); } function tblBody(facets, builds) { var body = []; if (builds.length === 0) { return 'No builds added to comparison!'); var href = $state.href('outfit', { shipId: b.id, code: b.code, bn: b.buildName }); body.push('', b.name, ''); body.push('', b.buildName, ''); for (var j = 0, fl = facets.length; j < fl; j++) { if (facets[j].active) { var f = facets[j]; var p = f.props; for (var k = 0, pl = p.length; k < pl; k++) { body.push('', $rootScope[f.fmt](b[p[k]]), ' ', $translate.instant(f.unit), ''); } } } body.push(''); } return body.join(''); } return { restrict: 'A', link: function(scope, element) { var header = angular.element(''); var body = angular.element(''); element.append(header); element.append(body); var updateAll = function() { header.html(tblHeader(scope.facets)); body.html(tblBody(scope.facets, scope.builds)); }; scope.$watchCollection('facets', updateAll); scope.$watch('tblUpdate', updateAll); scope.$watchCollection('builds', function() { body.html(tblBody(scope.facets, scope.builds)); }); } }; }]);