71af014de3fe59ee81008bfa8360f52cb1ed9fc1
[tech-radar.git] / src / models / radar.js
1 tr.models.Radar = function() {
2 var self, quadrants;
3
4 quadrants = { I: null, II: null, III: null, IV: null };
5 self = {};
6
7 self.setFirstQuadrant = function (quadrant) {
8 quadrants.I = quadrant;
9 };
10
11 self.setSecondQuadrant = function (quadrant) {
12 quadrants.II = quadrant;
13 };
14
15 self.setThirdQuadrant = function (quadrant) {
16 quadrants.III = quadrant;
17 };
18
19 self.setFourthQuadrant = function (quadrant) {
20 quadrants.IV = quadrant;
21 };
22
23 function allQuadrants() {
24 var all = [];
25
26 for (var p in quadrants) {
27 if (quadrants.hasOwnProperty(p) && quadrants[p] != null) {
28 all.push(quadrants[p]);
29 }
30 }
31
32 return all;
33 }
34
35 function allBlips() {
36 return allQuadrants().reduce(function (blips, quadrant) {
37 return blips.concat(quadrant.blips());
38 }, []);
39 }
40
41 self.hasQuadrants = function () {
42 return !!quadrants.I || !!quadrants.II || !!quadrants.III || !!quadrants.IV;
43 }
44
45 self.cycles = function () {
46 var cycleHash, cycleArray;
47
48 cycleArray = [];
49 cycleHash = {};
50
51 allBlips().forEach(function (blip) {
52 cycleHash[blip.cycle().name()] = blip.cycle();
53 });
54
55 for (var p in cycleHash) {
56 if (cycleHash.hasOwnProperty(p)) {
57 cycleArray.push(cycleHash[p]);
58 }
59 }
60
61 return cycleArray.slice(0).sort(function (a, b) { return a.order() - b.order(); });
62 };
63
64 self.quadrants = function () {
65 return quadrants;
66 };
67
68 return self;
69 };