inital commit
This commit is contained in:
		
						commit
						2c08fe4957
					
				| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sources/
 | 
				
			||||||
 | 
					Analyse/
 | 
				
			||||||
 | 
					backups/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,620 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"ap-r5-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m2-001",
 | 
				
			||||||
 | 
							"x": 0.6305722152167912,
 | 
				
			||||||
 | 
							"y": 0.9018257033384726,
 | 
				
			||||||
 | 
							"group": "workshop4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m5-001",
 | 
				
			||||||
 | 
							"x": 0.6305722152167912,
 | 
				
			||||||
 | 
							"y": 0.9018257033384726,
 | 
				
			||||||
 | 
							"group": "workshop4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m2-002",
 | 
				
			||||||
 | 
							"x": 0.5526915529424054,
 | 
				
			||||||
 | 
							"y": 0.9018257033384726,
 | 
				
			||||||
 | 
							"group": "workshop3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m5-002",
 | 
				
			||||||
 | 
							"x": 0.5526915529424054,
 | 
				
			||||||
 | 
							"y": 0.9018257033384726,
 | 
				
			||||||
 | 
							"group": "workshop3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m2-003",
 | 
				
			||||||
 | 
							"x": 0.39445453392328184,
 | 
				
			||||||
 | 
							"y": 0.8987726877222977,
 | 
				
			||||||
 | 
							"group": "workshop1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m2-004": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m2-004",
 | 
				
			||||||
 | 
							"x": 0.39445453392328184,
 | 
				
			||||||
 | 
							"y": 0.8987726877222977,
 | 
				
			||||||
 | 
							"group": "workshop1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m5-003",
 | 
				
			||||||
 | 
							"x": 0.4463575654924901,
 | 
				
			||||||
 | 
							"y": 0.8987726877222977,
 | 
				
			||||||
 | 
							"group": "workshop2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r5-m5-004": {
 | 
				
			||||||
 | 
							"id": "ap-r5-m5-004",
 | 
				
			||||||
 | 
							"x": 0.4463575654924901,
 | 
				
			||||||
 | 
							"y": 0.8987726877222977,
 | 
				
			||||||
 | 
							"group": "workshop2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-002",
 | 
				
			||||||
 | 
							"x": 0.5648566290860524,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage5"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-002",
 | 
				
			||||||
 | 
							"x": 0.5648566290860524,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage5"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-001",
 | 
				
			||||||
 | 
							"x": 0.6020681524812905,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage5"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-001",
 | 
				
			||||||
 | 
							"x": 0.6020681524812905,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage5"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-003",
 | 
				
			||||||
 | 
							"x": 0.7045445930922304,
 | 
				
			||||||
 | 
							"y": 0.581091147781221,
 | 
				
			||||||
 | 
							"group": "stage6"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-003",
 | 
				
			||||||
 | 
							"x": 0.7045445930922304,
 | 
				
			||||||
 | 
							"y": 0.581091147781221,
 | 
				
			||||||
 | 
							"group": "stage6"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-004": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-004",
 | 
				
			||||||
 | 
							"x": 0.7550732336986934,
 | 
				
			||||||
 | 
							"y": 0.581091147781221,
 | 
				
			||||||
 | 
							"group": "stage6"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-004": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-004",
 | 
				
			||||||
 | 
							"x": 0.7550732336986934,
 | 
				
			||||||
 | 
							"y": 0.581091147781221,
 | 
				
			||||||
 | 
							"group": "stage6"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-020": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-020",
 | 
				
			||||||
 | 
							"x": 0.7302401826552158,
 | 
				
			||||||
 | 
							"y": 0.44599520676548265,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-020": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-020",
 | 
				
			||||||
 | 
							"x": 0.7302401826552158,
 | 
				
			||||||
 | 
							"y": 0.44599520676548265,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-002",
 | 
				
			||||||
 | 
							"x": 0.5577533706901054,
 | 
				
			||||||
 | 
							"y": 0.10696392862049484,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-002",
 | 
				
			||||||
 | 
							"x": 0.5577533706901054,
 | 
				
			||||||
 | 
							"y": 0.10696392862049484,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-005": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-005",
 | 
				
			||||||
 | 
							"x": 0.5735849816822486,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-005": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-005",
 | 
				
			||||||
 | 
							"x": 0.5735849816822486,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-007": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-007",
 | 
				
			||||||
 | 
							"x": 0.5212133738238959,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-007": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-007",
 | 
				
			||||||
 | 
							"x": 0.5212133738238959,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-008": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-008",
 | 
				
			||||||
 | 
							"x": 0.4589777873947009,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-008": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-008",
 | 
				
			||||||
 | 
							"x": 0.4589777873947009,
 | 
				
			||||||
 | 
							"y": 0.23955639683096974,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-001",
 | 
				
			||||||
 | 
							"x": 0.6523833968796401,
 | 
				
			||||||
 | 
							"y": 0.16703811689996795,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-001",
 | 
				
			||||||
 | 
							"x": 0.6523833968796401,
 | 
				
			||||||
 | 
							"y": 0.16703811689996795,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-009": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-009",
 | 
				
			||||||
 | 
							"x": 0.631345216865762,
 | 
				
			||||||
 | 
							"y": 0.31025202643911515,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-009": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-009",
 | 
				
			||||||
 | 
							"x": 0.631345216865762,
 | 
				
			||||||
 | 
							"y": 0.31025202643911515,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-006": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-006",
 | 
				
			||||||
 | 
							"x": 0.6199994030875298,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-006": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-006",
 | 
				
			||||||
 | 
							"x": 0.6199994030875298,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-007": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-007",
 | 
				
			||||||
 | 
							"x": 0.40454086238929143,
 | 
				
			||||||
 | 
							"y": 0.214524721793952,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-007": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-007",
 | 
				
			||||||
 | 
							"x": 0.40454086238929143,
 | 
				
			||||||
 | 
							"y": 0.214524721793952,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-003",
 | 
				
			||||||
 | 
							"x": 0.3930577587429024,
 | 
				
			||||||
 | 
							"y": 0.4288403120181959,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-003",
 | 
				
			||||||
 | 
							"x": 0.3930577587429024,
 | 
				
			||||||
 | 
							"y": 0.4288403120181959,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-001",
 | 
				
			||||||
 | 
							"x": 0.45714377382986504,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-001",
 | 
				
			||||||
 | 
							"x": 0.45714377382986504,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-002",
 | 
				
			||||||
 | 
							"x": 0.5272093595875335,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-002",
 | 
				
			||||||
 | 
							"x": 0.5272093595875335,
 | 
				
			||||||
 | 
							"y": 0.4179929475339266,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-008": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-008",
 | 
				
			||||||
 | 
							"x": 0.40269938741857736,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-008": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-008",
 | 
				
			||||||
 | 
							"x": 0.40269938741857736,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-005": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-005",
 | 
				
			||||||
 | 
							"x": 0.4433730031412519,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-005": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-005",
 | 
				
			||||||
 | 
							"x": 0.4433730031412519,
 | 
				
			||||||
 | 
							"y": 0.55974140957731,
 | 
				
			||||||
 | 
							"group": "stage4"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r2-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r2-m2-002",
 | 
				
			||||||
 | 
							"x": 0.3568923244517732,
 | 
				
			||||||
 | 
							"y": 0.214524721793952,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m2-002",
 | 
				
			||||||
 | 
							"x": 0.7548195458988383,
 | 
				
			||||||
 | 
							"y": 0.2606038864888793,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m5-002",
 | 
				
			||||||
 | 
							"x": 0.7548195458988383,
 | 
				
			||||||
 | 
							"y": 0.2606038864888793,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m2-003",
 | 
				
			||||||
 | 
							"x": 0.9330620863583116,
 | 
				
			||||||
 | 
							"y": 0.36500786151521153,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m2-001",
 | 
				
			||||||
 | 
							"x": 0.8290083045447423,
 | 
				
			||||||
 | 
							"y": 0.25331023218183757,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m5-001",
 | 
				
			||||||
 | 
							"x": 0.8290083045447423,
 | 
				
			||||||
 | 
							"y": 0.25331023218183757,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m2-020": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m2-020",
 | 
				
			||||||
 | 
							"x": 0.722893682427643,
 | 
				
			||||||
 | 
							"y": 0.3561266390877589,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-vi-m5-020": {
 | 
				
			||||||
 | 
							"id": "ap-vi-m5-020",
 | 
				
			||||||
 | 
							"x": 0.722893682427643,
 | 
				
			||||||
 | 
							"y": 0.3561266390877589,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-013": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-013",
 | 
				
			||||||
 | 
							"x": 0.2763733090588929,
 | 
				
			||||||
 | 
							"y": 0.5353417087728404,
 | 
				
			||||||
 | 
							"group": "stage3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-013": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-013",
 | 
				
			||||||
 | 
							"x": 0.2763733090588929,
 | 
				
			||||||
 | 
							"y": 0.5353417087728404,
 | 
				
			||||||
 | 
							"group": "stage3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-014": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-014",
 | 
				
			||||||
 | 
							"x": 0.23320459921058329,
 | 
				
			||||||
 | 
							"y": 0.5353417087728404,
 | 
				
			||||||
 | 
							"group": "stage3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-014": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-014",
 | 
				
			||||||
 | 
							"x": 0.23320459921058329,
 | 
				
			||||||
 | 
							"y": 0.5353417087728404,
 | 
				
			||||||
 | 
							"group": "stage3"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-004": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-004",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-004": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-004",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-001",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-001",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-005": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-005",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-005": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-005",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-002",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-002",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-006": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-006",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-006": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-006",
 | 
				
			||||||
 | 
							"x": 0.2353609455093529,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-003",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-003",
 | 
				
			||||||
 | 
							"x": 0.28980980876416734,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-007": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-007",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-007": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-007",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-008": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-008",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-008": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-008",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-009": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-009",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-009": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-009",
 | 
				
			||||||
 | 
							"x": 0.17332830932004206,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-010": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-010",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-010": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-010",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.3811552611091606,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-011": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-011",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-011": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-011",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.2980399639744156,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-012": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-012",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-012": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-012",
 | 
				
			||||||
 | 
							"x": 0.10971534736575066,
 | 
				
			||||||
 | 
							"y": 0.20544505335144786,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-020": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-020",
 | 
				
			||||||
 | 
							"x": 0.206991188079658,
 | 
				
			||||||
 | 
							"y": 0.32117876932940503,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-020": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-020",
 | 
				
			||||||
 | 
							"x": 0.206991188079658,
 | 
				
			||||||
 | 
							"y": 0.32117876932940503,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m2-021": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m2-021",
 | 
				
			||||||
 | 
							"x": 0.206991188079658,
 | 
				
			||||||
 | 
							"y": 0.254696301271581,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r7-m5-021": {
 | 
				
			||||||
 | 
							"id": "ap-r7-m5-021",
 | 
				
			||||||
 | 
							"x": 0.206991188079658,
 | 
				
			||||||
 | 
							"y": 0.254696301271581,
 | 
				
			||||||
 | 
							"group": "stage1"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r2-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-r2-m5-002",
 | 
				
			||||||
 | 
							"x": 0.3568923244517732,
 | 
				
			||||||
 | 
							"y": 0.214524721793952,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-004": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-004",
 | 
				
			||||||
 | 
							"x": 0.41579863157816194,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-004": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-004",
 | 
				
			||||||
 | 
							"x": 0.41579863157816194,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-003",
 | 
				
			||||||
 | 
							"x": 0.47989658491452963,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-003",
 | 
				
			||||||
 | 
							"x": 0.47989658491452963,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-020": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-020",
 | 
				
			||||||
 | 
							"x": 0.44265969273930594,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m5-020": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m5-020",
 | 
				
			||||||
 | 
							"x": 0.44265969273930594,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r1-m2-021": {
 | 
				
			||||||
 | 
							"id": "ap-r1-m2-021",
 | 
				
			||||||
 | 
							"x": 0.39143415682382876,
 | 
				
			||||||
 | 
							"y": 0.10261032835182951,
 | 
				
			||||||
 | 
							"group": "stage2"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m2-001": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m2-001",
 | 
				
			||||||
 | 
							"x": 0.8620444252105982,
 | 
				
			||||||
 | 
							"y": 0.6600635027248163,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m5-001": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m5-001",
 | 
				
			||||||
 | 
							"x": 0.8620444252105982,
 | 
				
			||||||
 | 
							"y": 0.6600635027248163,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m2-002": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m2-002",
 | 
				
			||||||
 | 
							"x": 0.8610460891041088,
 | 
				
			||||||
 | 
							"y": 0.6061716710680974,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m5-002": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m5-002",
 | 
				
			||||||
 | 
							"x": 0.8610460891041088,
 | 
				
			||||||
 | 
							"y": 0.6061716710680974,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m2-003": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m2-003",
 | 
				
			||||||
 | 
							"x": 0.8504270162584033,
 | 
				
			||||||
 | 
							"y": 0.5450014501824176,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-lo-m5-003": {
 | 
				
			||||||
 | 
							"id": "ap-lo-m5-003",
 | 
				
			||||||
 | 
							"x": 0.8504270162584033,
 | 
				
			||||||
 | 
							"y": 0.5450014501824176,
 | 
				
			||||||
 | 
							"group": "VIP"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m2-004": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m2-004",
 | 
				
			||||||
 | 
							"x": 0.4994230840975057,
 | 
				
			||||||
 | 
							"y": 0.31343632172678554,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r3-m5-004": {
 | 
				
			||||||
 | 
							"id": "ap-r3-m5-004",
 | 
				
			||||||
 | 
							"x": 0.4994230840975057,
 | 
				
			||||||
 | 
							"y": 0.31343632172678554,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m2-005": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m2-005",
 | 
				
			||||||
 | 
							"x": 0.7004781268886684,
 | 
				
			||||||
 | 
							"y": 0.9290097543848936,
 | 
				
			||||||
 | 
							"group": "stage7"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-r4-m5-005": {
 | 
				
			||||||
 | 
							"id": "ap-r4-m5-005",
 | 
				
			||||||
 | 
							"x": 0.7004781268886684,
 | 
				
			||||||
 | 
							"y": 0.9290097543848936,
 | 
				
			||||||
 | 
							"group": "stage7"
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"ap-noc-test": {
 | 
				
			||||||
 | 
							"id": "ap-noc-test",
 | 
				
			||||||
 | 
							"x": 0.31858546667363064,
 | 
				
			||||||
 | 
							"y": 0.260701582988597,
 | 
				
			||||||
 | 
							"group": ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
						<head>
 | 
				
			||||||
 | 
							<title>re:publica - Animation</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
 | 
				
			||||||
 | 
							<script type="text/javascript" src="data.js"></script>
 | 
				
			||||||
 | 
							<script type="text/javascript" src="main.js"></script>
 | 
				
			||||||
 | 
							<style type="text/css">
 | 
				
			||||||
 | 
								body {
 | 
				
			||||||
 | 
									position: relative;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								#canvas, #map {
 | 
				
			||||||
 | 
									position: absolute;
 | 
				
			||||||
 | 
									top: 0;
 | 
				
			||||||
 | 
									left: 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								#timer {
 | 
				
			||||||
 | 
									position: absolute;
 | 
				
			||||||
 | 
									top: 520;
 | 
				
			||||||
 | 
									left: 0px;
 | 
				
			||||||
 | 
									font-size: 20px;
 | 
				
			||||||
 | 
									font-family: georgia;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								#menu {
 | 
				
			||||||
 | 
									position: absolute;
 | 
				
			||||||
 | 
									top: 550px;
 | 
				
			||||||
 | 
									left: 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								.button {
 | 
				
			||||||
 | 
									margin-right: 10px;
 | 
				
			||||||
 | 
									background: #eee;
 | 
				
			||||||
 | 
									padding: 3px;
 | 
				
			||||||
 | 
									cursor: pointer;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							</style>
 | 
				
			||||||
 | 
						</head>
 | 
				
			||||||
 | 
						<body>
 | 
				
			||||||
 | 
							<img id="map" src="map.jpg" width="1024" height="500">
 | 
				
			||||||
 | 
							<canvas id="canvas" width="1024" height="500"></canvas>
 | 
				
			||||||
 | 
							<div id="timer"></div>
 | 
				
			||||||
 | 
							<div id="menu"></div>
 | 
				
			||||||
 | 
						</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,177 @@
 | 
				
			||||||
 | 
					var currentTime = 60*(24*2+9);
 | 
				
			||||||
 | 
					var clients = [];
 | 
				
			||||||
 | 
					var context;
 | 
				
			||||||
 | 
					var width = 1024;
 | 
				
			||||||
 | 
					var height = 500;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var decay = 0.5;
 | 
				
			||||||
 | 
					var timeStep = 1;
 | 
				
			||||||
 | 
					var stepSize = 50*timeStep;
 | 
				
			||||||
 | 
					var frameDuration = 50;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var interval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(function () {
 | 
				
			||||||
 | 
						init();
 | 
				
			||||||
 | 
						start();
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function start() {
 | 
				
			||||||
 | 
						if (!interval) interval = setInterval(update, frameDuration);
 | 
				
			||||||
 | 
						setTimeout(stop, 10000);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function stop() {
 | 
				
			||||||
 | 
						if (interval) {
 | 
				
			||||||
 | 
							clearInterval(interval);
 | 
				
			||||||
 | 
							interval = false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update() {
 | 
				
			||||||
 | 
						currentTime += timeStep;
 | 
				
			||||||
 | 
						if (currentTime >= 4*24*60) {
 | 
				
			||||||
 | 
							stop();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						renderTime();
 | 
				
			||||||
 | 
						updateData();
 | 
				
			||||||
 | 
						updatePosition();
 | 
				
			||||||
 | 
						renderCanvas();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function init() {
 | 
				
			||||||
 | 
						context = $('#canvas')[0].getContext('2d');
 | 
				
			||||||
 | 
						clients = [];
 | 
				
			||||||
 | 
						data.matrix.forEach(function (times, index) {
 | 
				
			||||||
 | 
							clients[index] = {point:undefined, x:0, y:0, r:0, x0:0, y0:0, r0:0};
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						var menu = $('#menu');
 | 
				
			||||||
 | 
						for (var i = 2; i < 16; i++) {
 | 
				
			||||||
 | 
							(function () {
 | 
				
			||||||
 | 
								var time = i*6*60;
 | 
				
			||||||
 | 
								var d = Math.floor(i/4);
 | 
				
			||||||
 | 
								var h = (i % 4)*6;
 | 
				
			||||||
 | 
								var node = $('<span class="button">T'+d+' '+h+':00</span>');
 | 
				
			||||||
 | 
								node.click(function () {
 | 
				
			||||||
 | 
									currentTime = time;
 | 
				
			||||||
 | 
									start();
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								menu.append(node);
 | 
				
			||||||
 | 
							})();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function renderTime() {
 | 
				
			||||||
 | 
						var d = Math.floor(currentTime/1440);
 | 
				
			||||||
 | 
						var h = Math.floor(currentTime/60) % 24;
 | 
				
			||||||
 | 
						var m = Math.floor(currentTime) % 60;
 | 
				
			||||||
 | 
						h = (h+100+'').substr(1);
 | 
				
			||||||
 | 
						m = (m+100+'').substr(1);
 | 
				
			||||||
 | 
						$('#timer').html('Tag '+d+' - '+h+':'+m);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function updateData() {
 | 
				
			||||||
 | 
						var timeId = -1;
 | 
				
			||||||
 | 
						data.times.forEach(function (time, index) {
 | 
				
			||||||
 | 
							if (time < currentTime) timeId = index;
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var points = [];
 | 
				
			||||||
 | 
						data.points.forEach(function (point, index) {
 | 
				
			||||||
 | 
							points[index] = [];
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						data.matrix.forEach(function (times, index) {
 | 
				
			||||||
 | 
							var point = undefined;
 | 
				
			||||||
 | 
							if (isFinite(times[timeId])) point = times[timeId];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var client = clients[index];
 | 
				
			||||||
 | 
							if ((client.point != point) && (Math.random() > 0.8)) {
 | 
				
			||||||
 | 
								if (valid(point)) {
 | 
				
			||||||
 | 
									client.x0 = data.points[point].x;
 | 
				
			||||||
 | 
									client.y0 = data.points[point].y;
 | 
				
			||||||
 | 
									client.r0 = 1;
 | 
				
			||||||
 | 
									if (!valid(client.point)) client.x = undefined;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									client.r0 = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								client.point = point;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (valid(client.point)) points[client.point].push(index);
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						points.forEach(function (clientList, pointIndex) {
 | 
				
			||||||
 | 
							var point = data.points[pointIndex];
 | 
				
			||||||
 | 
							var x0 = point.x*width;
 | 
				
			||||||
 | 
							var y0 = point.y*height;
 | 
				
			||||||
 | 
							clientList.forEach(function (clientIndex, index) {
 | 
				
			||||||
 | 
								var client = clients[clientIndex];
 | 
				
			||||||
 | 
								var a = Math.sqrt(index)*4;
 | 
				
			||||||
 | 
								var r = Math.sqrt(index)*1.5;
 | 
				
			||||||
 | 
								client.x0 = x0 + Math.cos(a)*r;
 | 
				
			||||||
 | 
								client.y0 = y0 + Math.sin(a)*r;
 | 
				
			||||||
 | 
								if (client.x === undefined) {
 | 
				
			||||||
 | 
									client.x = client.x0;
 | 
				
			||||||
 | 
									client.y = client.y0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function updatePosition() {
 | 
				
			||||||
 | 
						clients.forEach(function (client) {
 | 
				
			||||||
 | 
							client.xo = client.x;
 | 
				
			||||||
 | 
							client.yo = client.y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var dx = (client.x0 - client.x);
 | 
				
			||||||
 | 
							var dy = (client.y0 - client.y);
 | 
				
			||||||
 | 
							var r = Math.sqrt(dx*dx + dy+dy);
 | 
				
			||||||
 | 
							if (r > 1e-2) {
 | 
				
			||||||
 | 
								var rn = Math.max(r-stepSize, 0);
 | 
				
			||||||
 | 
								var f = 1-rn/r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								client.x += (client.x0 - client.x)*f;
 | 
				
			||||||
 | 
								client.y += (client.y0 - client.y)*f;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								client.x = client.x0;
 | 
				
			||||||
 | 
								client.y = client.y0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							client.r += (client.r0 - client.r)*decay;
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function renderCanvas() {
 | 
				
			||||||
 | 
						context.clearRect(0, 0, width, height);
 | 
				
			||||||
 | 
						context.fillStyle = '#F00';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						clients.forEach(function (client) {
 | 
				
			||||||
 | 
							if (client.r > 1e-2) {
 | 
				
			||||||
 | 
								var dx = client.x - client.xo;
 | 
				
			||||||
 | 
								var dy = client.y - client.yo;
 | 
				
			||||||
 | 
								var r = Math.sqrt(dx*dx + dy*dy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (r > 1) {
 | 
				
			||||||
 | 
									var a = Math.min(10/r, 1);
 | 
				
			||||||
 | 
									context.strokeStyle = 'rgba(255,0,0,'+a+')';
 | 
				
			||||||
 | 
									context.beginPath();
 | 
				
			||||||
 | 
									context.moveTo(client.xo, client.yo);
 | 
				
			||||||
 | 
									context.lineTo(client.x,  client.y );
 | 
				
			||||||
 | 
									context.stroke();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									context.beginPath();
 | 
				
			||||||
 | 
									context.arc(client.x, client.y, client.r, 0, 2*Math.PI, false);
 | 
				
			||||||
 | 
									context.fill();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function valid(point) {
 | 
				
			||||||
 | 
						return (point != null) && (point !== undefined);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 94 KiB  | 
| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					var path = '../sources/rp13-hashed/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var fs = require('fs');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var entriesObj = [];
 | 
				
			||||||
 | 
					var entriesArr = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var files = fs.readdirSync(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					files.sort();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					files.forEach(function (file, index) {
 | 
				
			||||||
 | 
						if (/clients_0[5-8]\.05\._[0-3][0-9][0-5][0-9]_hashed/.test(file)) {
 | 
				
			||||||
 | 
							var day = file.substr(8,2);
 | 
				
			||||||
 | 
							var hour = file.substr(15,2);
 | 
				
			||||||
 | 
							var minute = file.substr(17,2);
 | 
				
			||||||
 | 
							var date = new Date(2013, 4, day, hour, minute, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							console.log(file);
 | 
				
			||||||
 | 
							processFile(path+file, index, date);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							//process.exit();
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							// 
 | 
				
			||||||
 | 
							console.warn('unknown file: '+file);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('Schreibe Object-JSON');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13-obj.json', JSON.stringify(entriesObj), 'utf8');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13-obj-pretty.json', JSON.stringify(entriesObj, null, '\t'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('Schreibe Array-JSON');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13-arr.json', JSON.stringify(entriesArr), 'utf8');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13-arr-pretty.json', JSON.stringify(entriesArr, null, '\t'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('Schreibe TSV');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13.tsv', entriesArr.map(function (o) { return o.join('\t'); }).join('\n'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('Schreibe CSV');
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/rp13.csv', entriesArr.map(function (o) { return o.join(','); }).join('\n'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function processFile(file, index, date) {
 | 
				
			||||||
 | 
						var lines = fs.readFileSync(file, 'utf8').split('\n');
 | 
				
			||||||
 | 
						lines.forEach(function (line) {
 | 
				
			||||||
 | 
							if (line != '') {
 | 
				
			||||||
 | 
								line = line.split('\t');
 | 
				
			||||||
 | 
								var vendor = line[0];
 | 
				
			||||||
 | 
								line = line[1].split(' ');
 | 
				
			||||||
 | 
								if ((line.length == 17) && (line[0] != 'Total:')) {
 | 
				
			||||||
 | 
									var access_point = line[0];
 | 
				
			||||||
 | 
									var i = access_point.lastIndexOf('ap-');
 | 
				
			||||||
 | 
									if (i < 0) {
 | 
				
			||||||
 | 
										console.error(access_point);
 | 
				
			||||||
 | 
										process.exit();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									access_point = access_point.substr(i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									var obj = {
 | 
				
			||||||
 | 
										date: date,
 | 
				
			||||||
 | 
										file_id: index,
 | 
				
			||||||
 | 
										access_point: access_point,
 | 
				
			||||||
 | 
										vendor: vendor,
 | 
				
			||||||
 | 
										mac_hash: line[1],
 | 
				
			||||||
 | 
										signal_strength: parseInt(line[2], 10),
 | 
				
			||||||
 | 
										mb_in: parseInt(line[4], 10),
 | 
				
			||||||
 | 
										mb_out: parseInt(line[7], 10),
 | 
				
			||||||
 | 
										speed_in: parseInt(line[12], 10),
 | 
				
			||||||
 | 
										speed_out: parseInt(line[10], 10),
 | 
				
			||||||
 | 
										duration: parseInt(line[14], 10)
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									entriesObj.push(obj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									entriesArr.push([
 | 
				
			||||||
 | 
										obj.date,
 | 
				
			||||||
 | 
										obj.file_id,
 | 
				
			||||||
 | 
										obj.access_point,
 | 
				
			||||||
 | 
										obj.vendor,
 | 
				
			||||||
 | 
										obj.mac_hash,
 | 
				
			||||||
 | 
										obj.signal_strength,
 | 
				
			||||||
 | 
										obj.mb_in,
 | 
				
			||||||
 | 
										obj.mb_out,
 | 
				
			||||||
 | 
										obj.speed_in,
 | 
				
			||||||
 | 
										obj.speed_out,
 | 
				
			||||||
 | 
										obj.duration
 | 
				
			||||||
 | 
									]);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					var svg = '../sources/access points_wtf.svg';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var fs = require('fs');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					svg = fs.readFileSync(svg, 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var image = svg.match(/\<image.*?\>/g)[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var w = parseFloat(image.match(/width\=\"(.*?)\"/)[1]);
 | 
				
			||||||
 | 
					var h = parseFloat(image.match(/height\=\"(.*?)\"/)[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var matrix = image.match(/matrix\((.*?)\)/)[1].split(' ');
 | 
				
			||||||
 | 
					matrix = matrix.map(function (v) { return parseFloat(v) });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var width = w*matrix[0] + h*matrix[1];
 | 
				
			||||||
 | 
					var height = w*matrix[2] + h*matrix[3];
 | 
				
			||||||
 | 
					var x0 = matrix[4];
 | 
				
			||||||
 | 
					var y0 = matrix[5];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					svg = svg.split('\r\n');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var group = '';
 | 
				
			||||||
 | 
					var accesspoints = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					svg.forEach(function (line) {
 | 
				
			||||||
 | 
						if (line.match(/\<line id\=/) != null) {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							var id = line.match(/id\=\"(.*?)\"/)[1].toLowerCase();
 | 
				
			||||||
 | 
							var x = parseFloat(line.match(/x1\=\"(.*?)\"/)[1]);
 | 
				
			||||||
 | 
							var y = parseFloat(line.match(/y1\=\"(.*?)\"/)[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							x = (x - x0)/width;
 | 
				
			||||||
 | 
							y = (y - y0)/height;
 | 
				
			||||||
 | 
							accesspoints[id] = {id:id, x:x, y:y, group:group}
 | 
				
			||||||
 | 
						} else if (line.match(/\<g id\=/) != null) {
 | 
				
			||||||
 | 
							group = line.match(/id\=\"(.*?)\"/)[1];
 | 
				
			||||||
 | 
						} else if (line.match(/\<\/g\>/) != null) {
 | 
				
			||||||
 | 
							group = '';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						//console.log(line);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync('../cleaned/accesspoints.json', JSON.stringify(accesspoints, null, '\t'), 'utf8');
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,75 @@
 | 
				
			||||||
 | 
					var fs = require('fs');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var data = fs.readFileSync('../cleaned/rp13-arr.json', 'utf8');
 | 
				
			||||||
 | 
					data = JSON.parse(data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var points = [];
 | 
				
			||||||
 | 
					var addresses = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					data.forEach(function (o) {
 | 
				
			||||||
 | 
						var point = o[2]+o[0];
 | 
				
			||||||
 | 
						var address = o[4];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (points[point] === undefined) points[point] = [];
 | 
				
			||||||
 | 
						points[point].push(address);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (addresses[address] === undefined) addresses[address] = 0;
 | 
				
			||||||
 | 
						addresses[address]++;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var addressList = [];
 | 
				
			||||||
 | 
					Object.keys(addresses).forEach(function (address) {
 | 
				
			||||||
 | 
						if (addresses[address] > 100) addressList.push(address);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					addresses = {};
 | 
				
			||||||
 | 
					addressList.forEach(function (address, index) {
 | 
				
			||||||
 | 
						addresses[address] = index;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(addressList.length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var matrix = [];
 | 
				
			||||||
 | 
					var visible = [];
 | 
				
			||||||
 | 
					var n = 0;
 | 
				
			||||||
 | 
					for (var i = 0; i < addressList.length; i++) {
 | 
				
			||||||
 | 
						matrix[i] = [];
 | 
				
			||||||
 | 
						visible[i] = 0;
 | 
				
			||||||
 | 
						for (var j = 0; j < addressList.length; j++) matrix[i][j] = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Object.keys(points).forEach(function (point) {
 | 
				
			||||||
 | 
						var subAddressList = points[point];
 | 
				
			||||||
 | 
						var list = [];
 | 
				
			||||||
 | 
						subAddressList.forEach(function (address) {
 | 
				
			||||||
 | 
							if (addresses[address] !== undefined) list.push(addresses[address]);
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (var i = 0; i < list.length; i++) {
 | 
				
			||||||
 | 
							var a = list[i];
 | 
				
			||||||
 | 
							visible[a]++;
 | 
				
			||||||
 | 
							for (var j = i+1; j < list.length; j++) {
 | 
				
			||||||
 | 
								var b = list[j];
 | 
				
			||||||
 | 
								matrix[a][b]++;
 | 
				
			||||||
 | 
								matrix[b][a]++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n++;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var result = ['target\tsource\tweight'];
 | 
				
			||||||
 | 
					for (var i = 0; i < addressList.length; i++) {
 | 
				
			||||||
 | 
						for (var j = i+1; j < addressList.length; j++) {
 | 
				
			||||||
 | 
							var v = (matrix[i][j] - visible[i]*visible[j]/n)/n;
 | 
				
			||||||
 | 
							v *= 20;
 | 
				
			||||||
 | 
							if (v > 1e-2) {
 | 
				
			||||||
 | 
								v = Math.pow(v, 0.5);
 | 
				
			||||||
 | 
								result.push([i, j, v.toFixed(4)].join('\t'));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(result.length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync('./edges.tsv', result.join('\n'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,96 @@
 | 
				
			||||||
 | 
					var fs = require('fs');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var log = fs.readFileSync('../cleaned/rp13-obj.json', 'utf8');
 | 
				
			||||||
 | 
					log = JSON.parse(log);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var accesspoints = fs.readFileSync('../cleaned/accesspoints.json', 'utf8');
 | 
				
			||||||
 | 
					accesspoints = JSON.parse(accesspoints);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var ap = new Lookup();
 | 
				
			||||||
 | 
					Object.keys(accesspoints).forEach(function (name) {
 | 
				
			||||||
 | 
						var point = accesspoints[name];
 | 
				
			||||||
 | 
						var name = Math.round(point.x*100)+'_'+Math.round(point.y*50);
 | 
				
			||||||
 | 
						point.name = name;
 | 
				
			||||||
 | 
						ap.add(name);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var condensedAccesspoints = [];
 | 
				
			||||||
 | 
					Object.keys(accesspoints).forEach(function (name) {
 | 
				
			||||||
 | 
						var point = accesspoints[name];
 | 
				
			||||||
 | 
						point.index = ap.getId(point.name);
 | 
				
			||||||
 | 
						condensedAccesspoints[point.index] = {
 | 
				
			||||||
 | 
							x: point.x,
 | 
				
			||||||
 | 
							y: point.y,
 | 
				
			||||||
 | 
							room: point.group
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var macs = new Lookup();
 | 
				
			||||||
 | 
					var times = new Lookup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log.forEach(function (entry) {
 | 
				
			||||||
 | 
						if (accesspoints[entry.access_point] === undefined) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						entry.time = ((new Date(entry.date)).getTime()-1367712000000)/60000+60;
 | 
				
			||||||
 | 
						times.add(entry.time);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						macs.add(entry.mac_hash);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					times.sort(function (a,b) { return a-b });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var newEntries = [];
 | 
				
			||||||
 | 
					log.forEach(function (entry) {
 | 
				
			||||||
 | 
						if (accesspoints[entry.access_point] === undefined) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var mac = macs.getId(entry.mac_hash);
 | 
				
			||||||
 | 
						var time = times.getId(entry.time);
 | 
				
			||||||
 | 
						var point = accesspoints[entry.access_point].index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (newEntries[mac] === undefined) newEntries[mac] = [];
 | 
				
			||||||
 | 
						newEntries[mac][time] = point;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var result = {
 | 
				
			||||||
 | 
						/*macs: macs.getJSON(),*/
 | 
				
			||||||
 | 
						times: times.getJSON(),
 | 
				
			||||||
 | 
						points: condensedAccesspoints,
 | 
				
			||||||
 | 
						matrix: newEntries
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync('../clients/anim/data.js', 'var data = '+JSON.stringify(result, null, '\t'), 'utf8');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Lookup() {
 | 
				
			||||||
 | 
						var me = this;
 | 
				
			||||||
 | 
						var entry2index = {};
 | 
				
			||||||
 | 
						var index2entry = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						me.add = function (entry) {
 | 
				
			||||||
 | 
							if (entry2index[entry] === undefined) {
 | 
				
			||||||
 | 
								var index = index2entry.length;
 | 
				
			||||||
 | 
								entry2index[entry] = index;
 | 
				
			||||||
 | 
								index2entry[index] = entry;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						me.sort = function (callback) {
 | 
				
			||||||
 | 
							entry2index = {};
 | 
				
			||||||
 | 
							index2entry = index2entry.sort(callback);
 | 
				
			||||||
 | 
							index2entry.forEach(function (entry, index) {
 | 
				
			||||||
 | 
								entry2index[entry] = index;
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						me.getId = function (entry) {
 | 
				
			||||||
 | 
							return entry2index[entry];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						me.getJSON = function () {
 | 
				
			||||||
 | 
							return index2entry.slice(0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return me;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue