annotate hexagram-6ae12361157c/hexagram/hexagram.js @ 0:1407e3634bcf draft default tip

Uploaded r11 from test tool shed.
author adam-novak
date Tue, 22 Oct 2013 14:17:59 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1 // hexagram.js
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2 // Run the hexagram visualizer client.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
4 // Globals
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
5 // This is a mapping from coordinates [x][y] in the global hex grid to signature
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
6 // name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
7 var signature_grid = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
8
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
9 // This holds a global list of layer pickers in layer order. It is also the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
10 // authority on what layers are currently selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
11 var layer_pickers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
12
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
13 // This holds a list of layer objects by name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
14 // Layer objects have:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
15 // A downloading function "downloader"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
16 // A data object (from hex name to float) "data"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
17 // A magnitude "magnitude"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
18 // A boolean "selection" that specifies whether this is a user selection or not.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
19 // (This may be absent, which is the same as false.)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
20 // Various optional metadata fields
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
21 var layers = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
22
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
23 // This is a list of layer names maintained in sorted order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
24 var layer_names_sorted = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
25
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
26 // This is a list of the map-layour names mantained in order of entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
27 var layout_names = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
28
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
29 // This holds an array of layer names that the user has added to the "shortlist"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
30 // They can be quickly selected for display.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
31 var shortlist = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
32
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
33 // This holds an object form shortlisted layer names to jQuery shortlist UI
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
34 // elements, so we can efficiently tell if e.g. one is selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
35 var shortlist_ui = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
36
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
37 // This is a list of layer names whose intersection checkbox has been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
38 var shortlist_intersection = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
39
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
40 //This is the number of intersection checkboxes that have been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
41 var shortlist_intersection_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
42
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
43 // This is a list of layer names whose union checkbox has been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
44 var shortlist_union = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
45
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
46 //This is the number of union checkboxes that have been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
47 var shortlist_union_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
48
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
49 //This is a list of layer names whose set difference checkbox has been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
50 var shortlist_set_difference = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
51
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
52 // This is the number of set difference checkboxes that have been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
53 var shortlist_set_difference_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
54
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
55 // This is a list of the layer names whose symmetric difference checkbox
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
56 // has been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
57 var shortlist_symmetric_difference = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
58
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
59 // This is the number of symmetric difference checkboxes that have been
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
60 // selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
61 var shortlist_symmetric_difference_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
62
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
63 // This is an array containing the layer whose absolute complement checkbox
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
64 // has been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
65 var shortlist_absolute_complement = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
66
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
67 // This is the number of absolute complement checkboxes that have been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
68 var shortlist_absolute_complement_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
69
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
70 // Records number of set-operation clicks
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
71 var set_operation_clicks = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
72
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
73 // Boolean stating whether this is the first time the set operation popup
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
74 // has been created so that "Select Layer" Default is added only once
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
75 var first_opening = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
76
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
77 // Boolean for Creating Layer from Filter
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
78 var created = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
79
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
80 // Stores the Name of Current Layer Displayed
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
81 var current_layout_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
82
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
83 // This holds colormaps (objects from layer values to category objects with a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
84 // name and color). They are stored under the name of the layer they apply to.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
85 var colormaps = {}
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
86
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
87 // This holds an array of the available score matrix filenames
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
88 var available_matrices = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
89
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
90 // This holds the Google Map that we use for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
91 var googlemap = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
92
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
93 // This is the global Google Maps info window. We only want one hex to have its
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
94 // info open at a time.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
95 var info_window = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
96
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
97 // This holds the signature name of the hex that the info window is currently
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
98 // about.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
99 var selected_signature = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
100
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
101 // Which tool is the user currently using (string name or undefined for no tool)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
102 // TODO: This is a horrible hack, replace it with a unified tool system at once.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
103 var selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
104
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
105 // This holds the grid of hexagon polygons on that Google Map.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
106 var polygon_grid = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
107
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
108 // This holds an object of polygons by signature name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
109 var polygons = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
110
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
111 // How big is a hexagon in google maps units? This gets filled in once we have
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
112 // the hex assignment data. (This is really the side length.)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
113 var hex_size;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
114
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
115 // This holds a handle for the currently enqueued view redrawing timeout.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
116 var redraw_handle;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
117
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
118 // This holds all the currently active tool event listeners.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
119 // They are indexed by handle, and are objects with a "handler" and an "event".
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
120 var tool_listeners = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
121
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
122 // This holds the next tool listener handle to give out
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
123 var tool_listener_next_id = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
124
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
125 // This holds the next selection number to use. Start at 1 since the user sees
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
126 // these.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
127 var selection_next_id = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
128
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
129 // This is a pool of statistics Web Workers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
130 var rpc_workers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
131
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
132 // This holds which RPC worker we ought to give work to next.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
133 // TODO: Better scheduling, and wrap all this into an RPC object.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
134 var next_free_worker = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
135
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
136 // This holds how namy RPC jobs are currently running
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
137 var jobs_running = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
138
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
139 // This is the object of pending callbacks by RPC id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
140 var rpc_callbacks = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
141
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
142 // This is the next unallocated RPC id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
143 var rpc_next_id = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
144
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
145 // How many statistics Web Workers should we start?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
146 var NUM_RPC_WORKERS = 10;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
147
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
148 // What's the minimum number of pixels that hex_size must represent at the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
149 // current zoom level before we start drawing hex borders?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
150 var MIN_BORDER_SIZE = 10;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
151
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
152 // And how thick should the border be when drawn?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
153 var HEX_STROKE_WEIGHT = 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
154
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
155 // How many layers do we know how to draw at once?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
156 var MAX_DISPLAYED_LAYERS = 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
157
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
158 // How many layer search results should we display at once?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
159 var SEARCH_PAGE_SIZE = 10;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
160
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
161 // How big is our color key in pixels?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
162 var KEY_SIZE = 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
163
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
164 // This is an array of all Google Maps events that tools can use.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
165 var TOOL_EVENTS = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
166 "click",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
167 "mousemove"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
168 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
169
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
170 // This is a global variable that keeps track of the current Goolge Map zoom
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
171 // This is needed to keep viewing consistent across layouts
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
172 var global_zoom = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
173
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
174 function print(text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
175 // Print some logging text to the browser console
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
176
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
177 if(console && console.log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
178 // We know the console exists, and we can log to it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
179 console.log(text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
180 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
181 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
182
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
183 function complain(text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
184 // Display a temporary error message to the user.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
185 $("#error-notification").text(text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
186 $(".error").show().delay(1250).fadeOut(1000);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
187
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
188 if(console && console.error) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
189 // Inform the browser console of this problem.as
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
190 console.error(text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
191 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
192 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
193
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
194 function make_hexagon(row, column, hex_side_length, grid_offset) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
195 // Make a new hexagon representing the hexagon at the given grid coordinates.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
196 // hex_side_length is the side length of hexagons in Google Maps world
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
197 // coordinate units. grid_offset specifies a distance to shift the whole
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
198 // grid down and right from the top left corner of the map. This lets us
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
199 // keep the whole thing away from the edges of the "earth", where Google
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
200 // Maps likes to wrap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
201 // Returns the Google Maps polygon.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
202
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
203 // How much horizontal space is needed per hex on average, stacked the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
204 // way we stack them (wiggly)?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
205 var hex_column_width = 3.0/2.0 * hex_side_length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
206
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
207 // How tall is a hexagon?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
208 var hex_height = Math.sqrt(3) * hex_side_length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
209
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
210 // How far apart are hexagons on our grid, horizontally (world coordinate units)?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
211 var hex_padding_horizontal = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
212
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
213 // And vertically (world coordinate units)?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
214 var hex_padding_veritcal = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
215
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
216 // First, what are x and y in 0-256 world coordinates fo this grid position?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
217 var x = column * (hex_column_width + hex_padding_horizontal);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
218 var y = row * (hex_height + hex_padding_veritcal);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
219 if(column % 2 == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
220 // Odd columns go up
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
221 y -= hex_height / 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
222 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
223
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
224 // Apply the grid offset to this hex
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
225 x += grid_offset;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
226 y += grid_offset;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
227
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
228 // That got X and Y for the top left corner of the bounding box. Shift to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
229 // the center.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
230 x += hex_side_length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
231 y += hex_height / 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
232
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
233 // Offset the whole thing so no hexes end up off the map when they wiggle up
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
234 y += hex_height / 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
235
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
236 // This holds an array of all the hexagon corners
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
237 var coords = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
238 get_LatLng(x - hex_side_length, y),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
239 get_LatLng(x - hex_side_length / 2, y - hex_height / 2),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
240 get_LatLng(x + hex_side_length / 2, y - hex_height / 2),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
241 get_LatLng(x + hex_side_length, y),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
242 get_LatLng(x + hex_side_length / 2, y + hex_height / 2),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
243 get_LatLng(x - hex_side_length / 2, y + hex_height / 2),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
244 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
245
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
246 // We don't know whether the hex should start with a stroke or not without
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
247 // looking at the current zoom level.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
248 // Get the current zoom level (low is out)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
249 var zoom = googlemap.getZoom();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
250
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
251 // API docs say: pixelCoordinate = worldCoordinate * 2 ^ zoomLevel
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
252 // So this holds the number of pixels that the global length hex_size
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
253 // corresponds to at this zoom level.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
254 var hex_size_pixels = hex_size * Math.pow(2, zoom);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
255
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
256 // Construct the Polygon
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
257 var hexagon = new google.maps.Polygon({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
258 paths: coords,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
259 strokeColor: "#000000",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
260 strokeOpacity: 1.0,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
261 // Only turn on the border if we're big enough
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
262 strokeWeight: hex_size_pixels < MIN_BORDER_SIZE ? 0 : HEX_STROKE_WEIGHT,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
263 fillColor: "#FF0000",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
264 fillOpacity: 1.0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
265 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
266
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
267 // Attach the hexagon to the global map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
268 hexagon.setMap(googlemap);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
269
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
270 // Set up the click listener to move the global info window to this hexagon
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
271 // and display the hexagon's information
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
272 google.maps.event.addListener(hexagon, "click", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
273 if(selected_tool == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
274 // The user isn't trying to use a tool currently, so we can use
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
275 // their clicks for the infowindow.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
276
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
277 // Remove the window from where it currently is
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
278 info_window.close();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
279
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
280 // Place the window in the center of this hexagon.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
281 info_window.setPosition(get_LatLng(x, y));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
282
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
283 // Record that this signature is selected now
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
284 selected_signature = hexagon.signature;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
285
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
286 // Calculate the window's contents and make it display them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
287 redraw_info_window();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
288 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
289 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
290
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
291 // Subscribe the tool listeners to events on this hexagon
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
292 subscribe_tool_listeners(hexagon);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
293
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
294 return hexagon;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
295 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
296
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
297 function set_hexagon_signature(hexagon, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
298 // Given a polygon representing a hexagon, set the signature that the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
299 // hexagon represents.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
300 hexagon.signature = text;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
301 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
302
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
303 function set_hexagon_color(hexagon, color) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
304 // Given a polygon, set the hexagon's current background
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
305 // color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
306
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
307 hexagon.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
308 fillColor: color
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
309 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
310 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
311
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
312 function set_hexagon_stroke_weight(hexagon, weight) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
313 // Given a polygon, set the weight of hexagon's border stroke, in number of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
314 // screen pixels.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
315
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
316 hexagon.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
317 strokeWeight: weight
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
318 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
319 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
320
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
321 function redraw_info_window() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
322 // Set the contents of the global info window to reflect the currently
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
323 // visible information about the global selected signature.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
324
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
325 if(selected_signature == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
326 // No need to update anything
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
327 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
328 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
329
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
330 // Go get the infocard that goes in the info_window and, when it's
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
331 // prepared, display it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
332 with_infocard(selected_signature, function(infocard) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
333 // The [0] is supposed to get the DOM element from the jQuery
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
334 // element.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
335 info_window.setContent(infocard[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
336
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
337 // Open the window. It may already be open, or it may be closed but
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
338 // properly positioned and waiting for its initial contents before
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
339 // opening.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
340 info_window.open(googlemap);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
341 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
342 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
343
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
344 function with_infocard(signature, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
345 // Given a signature, call the callback with a jQuery element representing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
346 // an "info card" about that signature. It's the contents of the infowindow
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
347 // that we want to appear when the user clicks on the hex representing this
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
348 // signature, and it includes things like the signature name and its values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
349 // under any displayed layers (with category names if applicable).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
350 // We return by callback because preparing the infocard requires reading
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
351 // from the layers, which are retrieved by callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
352 // TODO: Can we say that we will never have to download a layer here and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
353 // just directly access them? Is that neater or less neat?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
354
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
355 // Using jQuery to build this saves us from HTML injection by making jQuery
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
356 // do all the escaping work (we only ever set text).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
357
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
358 function row(key, value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
359 // Small helper function that returns a jQuery element that displays the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
360 // given key being the given value.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
361
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
362 // This holds the root element of the row
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
363 var root = $("<div/>").addClass("info-row");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
364
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
365 // Add the key and value elements
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
366 root.append($("<div/>").addClass("info-key").text(key));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
367 root.append($("<div/>").addClass("info-value").text(value));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
368
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
369 return root;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
370 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
371
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
372 // This holds a list of the string names of the currently selected layers,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
373 // in order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
374 // Just use everything on the shortlist.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
375 var current_layers = shortlist;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
376
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
377 // Obtain the layer objects (mapping from signatures/hex labels to colors)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
378 with_layers(current_layers, function(retrieved_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
379
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
380 // This holds the root element of the card.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
381 var infocard = $("<div/>").addClass("infocard");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
382
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
383 infocard.append(row("Name", signature).addClass("info-name"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
384
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
385 for(var i = 0; i < current_layers.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
386 // This holds the layer's value for this signature
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
387 var layer_value = retrieved_layers[i].data[signature];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
388
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
389 if(have_colormap(current_layers[i])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
390 // This is a color map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
391
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
392 // This holds the category object for this category number, or
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
393 // undefined if there isn't one.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
394 var category = colormaps[current_layers[i]][layer_value];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
395
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
396 if(category != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
397 // There's a specific entry for this category, with a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
398 // human-specified name and color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
399 // Use the name as the layer value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
400 layer_value = category.name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
401 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
402 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
403
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
404 if(layer_value == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
405 // Let the user know that there's nothing there in this layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
406 layer_value = "<undefined>";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
407 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
408
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
409 // Make a listing for this layer's value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
410 infocard.append(row(current_layers[i], layer_value));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
411 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
412
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
413 // Return the infocard by callback
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
414 callback(infocard);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
415 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
416
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
417 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
418
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
419 function add_layer_url(layer_name, layer_url, attributes) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
420 // Add a layer with the given name, to be downloaded from the given URL, to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
421 // the list of available layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
422 // Attributes is an object of attributes to copy into the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
423
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
424 // Store the layer. Just keep the URL, since with_layer knows what to do
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
425 // with it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
426 layers[layer_name] = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
427 url: layer_url,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
428 data: undefined,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
429 magnitude: undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
430 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
431
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
432 for(var name in attributes) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
433 // Copy over each specified attribute
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
434 layers[layer_name][name] = attributes[name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
435 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
436
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
437 // Add it to the sorted layer list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
438 layer_names_sorted.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
439
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
440 // Don't sort because our caller does that when they're done adding layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
441
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
442 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
443
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
444 function add_layer_data(layer_name, data, attributes) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
445 // Add a layer with the given name, with the given data to the list of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
446 // available layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
447 // Attributes is an object of attributes to copy into the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
448
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
449 // Store the layer. Just put in the data. with_layer knows what to do if the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
450 // magnitude isn't filled in.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
451 layers[layer_name] = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
452 url: undefined,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
453 data: data,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
454 magnitude: undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
455 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
456
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
457 var check_layer_exists = layers[layer_name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
458
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
459 for(var name in attributes) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
460 // Copy over each specified attribute
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
461 layers[layer_name][name] = attributes[name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
462 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
463
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
464 // Add it to the sorted layer list and sort
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
465 layer_names_sorted.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
466
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
467 // Don't sort because our caller does that when they're done adding layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
468 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
469
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
470 function with_layer(layer_name, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
471 // Run the callback, passing it the layer (object from hex label/signature
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
472 // to float) with the given name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
473 // This is how you get layers, and allows for layers to be downloaded
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
474 // dynamically.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
475 // have_layer must return true for the given name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
476
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
477 // First get what we have stored for the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
478 var layer = layers[layer_name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
479
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
480 var data_val = layer.data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
481 if(layer.data == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
482 // We need to download the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
483 print("Downloading \"" + layer.url + "\"");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
484
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
485 // Go get it (as text!)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
486 $.get(layer.url, function(layer_tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
487
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
488 // This is the TSV as parsed by our TSV-parsing plugin
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
489 var layer_parsed = $.tsv.parseRows(layer_tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
490
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
491 // This is the layer we'll be passing out. Maps from
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
492 // signatures to floats on -1 to 1.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
493 var layer_data = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
494
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
495 for(var j = 0; j < layer_parsed.length; j++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
496 // This is the label of the hex
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
497 var label = layer_parsed[j][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
498
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
499 if(label == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
500 // Skip blank lines
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
501 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
502 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
503
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
504 // This is the heat level (-1 to 1)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
505 var heat = parseFloat(layer_parsed[j][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
506
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
507 // Store in the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
508 layer_data[label] = heat;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
509 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
510
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
511 // Save the layer data locally
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
512 layers[layer_name].data = layer_data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
513
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
514 // Now the layer has been properly downloaded, but it may not have
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
515 // metadata. Recurse with the same callback to get metadata.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
516 with_layer(layer_name, callback);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
517 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
518 } else if(layer.magnitude == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
519 // We've downloaded it already, or generated it locally, but we don't
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
520 // know the magnitude. Compute that and check if it's a colormap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
521
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
522 // Grab the data, which we know is defined.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
523 var layer_data = layers[layer_name].data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
524
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
525 // Store the maximum magnitude in the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
526 // -1 is a good starting value since this always comes out positive
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
527 var magnitude = -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
528
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
529 // We also want to know if all layer entries are non-negative
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
530 // integers (and it is thus valid as a colormap).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
531 // If so, we want to display it as a colormap, so we will add an
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
532 // empty entry to the colormaps object (meaning we should
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
533 // auto-generate the colors on demand).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
534 // This stores whether the layer is all integrs
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
535 all_nonnegative_integers = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
536
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
537 for(var signature_name in layer_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
538 // Take the new max if it's bigger (and thus not something silly
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
539 // like NaN).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
540 // This holds the potential new max magnitude.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
541 var new_magnitude = Math.abs(layer_data[signature_name]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
542 if(new_magnitude > magnitude) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
543 magnitude = new_magnitude;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
544 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
545
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
546 if(layer_data[signature_name] % 1 !== 0 ||
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
547 layer_data[signature_name] < 0 ) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
548
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
549 // If we have an illegal value for a colormap, record that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
550 // fact
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
551 // See http://stackoverflow.com/a/3886106
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
552
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
553 all_nonnegative_integers = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
554 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
555 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
556
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
557 // Save the layer magnitude for later.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
558 layer.magnitude = magnitude;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
559
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
560 if(!have_colormap(layer_name) && all_nonnegative_integers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
561 // Add an empty colormap for this layer, so that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
562 // auto-generated discrete colors will be used.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
563 // TODO: Provide some way to override this if you really do want
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
564 // to see integers as a heatmap?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
565 // The only overlap with the -1 to 1 restricted actual layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
566 // is if you have a data set with only 0s and 1s. Is it a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
567 // heatmap layer or a colormap layer?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
568 colormaps[layer_name] = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
569 print("Inferring that " + layer_name +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
570 " is really a colormap");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
571 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
572
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
573 // Now layer metadata has been filled in. Call the callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
574 callback(layer);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
575 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
576 // It's already downloaded, and already has metadata.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
577 // Pass it to our callback
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
578 callback(layer);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
579 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
580 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
581
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
582 function with_layers(layer_list, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
583 // Given an array of layer names, call the callback with an array of the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
584 // corresponding layer objects (objects from signatures to floats).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
585 // Conceptually it's like calling with_layer several times in a loop, only
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
586 // because the whole thing is continuation-based we have to phrase it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
587 // terms of recursion.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
588
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
589 // See http://marijnhaverbeke.nl/cps/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
590 // "So, we've created code that does exactly the same as the earlier
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
591 // version, but is twice as confusing."
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
592
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
593 if(layer_list.length == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
594 // Base case: run the callback with an empty list
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
595 callback([]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
596 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
597 // Recursive case: handle the last thing in the list
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
598 with_layers(layer_list.slice(0, layer_list.length - 1),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
599 function(rest) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
600
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
601 // We've recursively gotten all but the last layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
602 // Go get the last one, and pass the complete array to our callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
603
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
604 with_layer(layer_list[layer_list.length - 1],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
605 function(last) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
606
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
607 // Mutate the array. Shouldn't matter because it won't matter
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
608 // for us if callback does it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
609 rest.push(last);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
610
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
611 // Send the complete array to the callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
612 callback(rest);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
613
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
614 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
615
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
616 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
617
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
618 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
619 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
620
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
621 function have_layer(layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
622 // Returns true if a layer exists with the given name, false otherwise.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
623 return layers.hasOwnProperty(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
624 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
625
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
626 function make_shortlist_ui(layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
627 // Return a jQuery element representing the layer with the given name in the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
628 // shortlist UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
629
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
630
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
631 // This holds the root element for this shortlist UI entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
632 var root = $("<div/>").addClass("shortlist-entry");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
633 root.data("layer", layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
634
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
635 // If this is a selection, give the layer a special class
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
636 // TODO: Justify not having to use with_layer because this is always known
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
637 // client-side
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
638 if(layers[layer_name].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
639 root.addClass("selection");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
640 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
641
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
642 // We have some configuration stuff and then the div from the dropdown
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
643 // This holds all the config stuff
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
644 var controls = $("<div/>").addClass("shortlist-controls");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
645
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
646 // Add a remove link
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
647 var remove_link = $("<a/>").addClass("remove").attr("href", "#").text("X");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
648
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
649 controls.append(remove_link);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
650
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
651 // Add a checkbox for whether this is enabled or not
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
652 var checkbox = $("<input/>").attr("type", "checkbox").addClass("layer-on");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
653
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
654 controls.append(checkbox);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
655
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
656 root.append(controls);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
657
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
658 var contents = $("<div/>").addClass("shortlist-contents");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
659
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
660 // Add the layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
661 contents.append($("<span/>").text(layer_name));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
662
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
663 // Add all of the metadata. This is a div to hold it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
664 var metadata_holder = $("<div/>").addClass("metadata-holder");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
665
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
666 // Fill it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
667 fill_layer_metadata(metadata_holder, layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
668
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
669 contents.append(metadata_holder);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
670
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
671 // Add a div to hold the filtering stuff so it wraps together.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
672 var filter_holder = $("<div/>").addClass("filter-holder");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
673
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
674 // Add an image label for the filter control.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
675 // TODO: put this in a label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
676 var filter_image = $("<img/>").attr("src", "filter.svg");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
677 filter_image.addClass("control-icon");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
678 filter_image.addClass("filter-image");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
679 filter_image.attr("title", "Filter on Layer");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
680 filter_image.addClass("filter");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
681
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
682 // Add a control for filtering
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
683 var filter_control = $("<input/>").attr("type", "checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
684 filter_control.addClass("filter-on");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
685
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
686 filter_holder.append(filter_image);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
687 filter_holder.append(filter_control);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
688
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
689 // Add a text input to specify a filtering threshold for continuous layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
690 var filter_threshold = $("<input/>").addClass("filter-threshold");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
691 // Initialize to a reasonable value.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
692 filter_threshold.val(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
693 filter_holder.append(filter_threshold);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
694
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
695 // Add a select input to pick from a discrete list of values to filter on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
696 var filter_value = $("<select/>").addClass("filter-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
697 filter_holder.append(filter_value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
698
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
699 // Add a image for the save function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
700 var save_filter = $("<img/>").attr("src", "save.svg");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
701 save_filter.addClass("save-filter");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
702 save_filter.attr("title", "Save Filter as Layer");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
703
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
704 contents.append(filter_holder);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
705 contents.append(save_filter);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
706
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
707 if(layers[layer_name].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
708 // We can do statistics on this layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
709
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
710 // Add a div to hold the statistics stuff so it wraps together.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
711 var statistics_holder = $("<div/>").addClass("statistics-holder");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
712
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
713 // Add an icon
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
714 var statistics_image = $("<img/>").attr("src", "statistics.svg");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
715 statistics_image.addClass("control-icon");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
716 statistics_image.attr("title", "Statistics Group");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
717 statistics_holder.append(statistics_image);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
718
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
719 // Label the "A" radio button.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
720 var a_label = $("<span/>").addClass("radio-label").text("A");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
721 statistics_holder.append(a_label);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
722
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
723 // Add a radio button for being the "A" group
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
724 var statistics_a_control = $("<input/>").attr("type", "radio");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
725 statistics_a_control.attr("name", "statistics-a");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
726 statistics_a_control.addClass("statistics-a");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
727 // Put the layer name in so it's easy to tell which layer is A.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
728 statistics_a_control.data("layer-name", layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
729 statistics_holder.append(statistics_a_control);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
730
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
731 // And a link to un-select it if it's selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
732 var statistics_a_clear = $("<a/>").attr("href", "#").text("X");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
733 statistics_a_clear.addClass("radio-clear");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
734 statistics_holder.append(statistics_a_clear);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
735
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
736 // Label the "B" radio button.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
737 var b_label = $("<span/>").addClass("radio-label").text("B");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
738 statistics_holder.append(b_label);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
739
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
740 // Add a radio button for being the "B" group
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
741 var statistics_b_control = $("<input/>").attr("type", "radio");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
742 statistics_b_control.attr("name", "statistics-b");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
743 statistics_b_control.addClass("statistics-b");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
744 // Put the layer name in so it's easy to tell which layer is A.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
745 statistics_b_control.data("layer-name", layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
746 statistics_holder.append(statistics_b_control);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
747
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
748 // And a link to un-select it if it's selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
749 var statistics_b_clear = $("<a/>").attr("href", "#").text("X");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
750 statistics_b_clear.addClass("radio-clear");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
751 statistics_holder.append(statistics_b_clear);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
752
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
753 contents.append(statistics_holder);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
754
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
755 // Statistics UI logic
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
756
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
757 // Make the clear links work
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
758 statistics_a_clear.click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
759 statistics_a_control.prop("checked", false);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
760 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
761 statistics_b_clear.click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
762 statistics_b_control.prop("checked", false);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
763 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
764 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
765
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
766 // Add a div to contain layer settings
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
767 var settings = $("<div/>").addClass("settings");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
768
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
769 // Add a slider for setting the min and max for drawing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
770 var range_slider = $("<div/>").addClass("range range-slider");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
771 settings.append($("<div/>").addClass("stacker").append(range_slider));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
772
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
773 // And a box that tells us what we have selected in the slider.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
774 var range_display = $("<div/>").addClass("range range-display");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
775 range_display.append($("<span/>").addClass("low"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
776 range_display.append(" to ");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
777 range_display.append($("<span/>").addClass("high"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
778 settings.append($("<div/>").addClass("stacker").append(range_display));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
779
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
780 contents.append(settings);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
781
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
782 root.append(contents);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
783
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
784 // Handle enabling and disabling
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
785 checkbox.change(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
786 if($(this).is(":checked") && get_current_layers().length >
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
787 MAX_DISPLAYED_LAYERS) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
788
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
789 // Enabling this checkbox puts us over the edge, so un-check it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
790 $(this).prop("checked", false);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
791
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
792 // Skip the redraw
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
793 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
794 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
795
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
796 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
797 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
798
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
799 // Run the removal process
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
800 remove_link.click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
801 // Remove this layer from the shortlist
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
802 shortlist.splice(shortlist.indexOf(layer_name), 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
803
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
804 // Remove this from the DOM
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
805 root.remove();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
806
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
807 // Make the UI match the list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
808 update_shortlist_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
809
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
810 if(checkbox.is(":checked") || filter_control.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
811 // Re-draw the view since we were selected (as coloring or filter)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
812 // before removal.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
813 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
814 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
815
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
816 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
817
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
818 // Functionality for turning filtering on and off
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
819 filter_control.change(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
820 if(filter_control.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
821 // First, figure out what kind of filter settings we take based on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
822 // what kind of layer we are.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
823 with_layer(layer_name, function(layer) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
824 if(have_colormap(layer_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
825 // A discrete layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
826 // Show the value picker.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
827 filter_value.show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
828
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
829 // Make sure we have all our options
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
830 if(filter_value.children().length == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
831 // No options available. We have to add them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
832 // TODO: Is there a better way to do this than asking
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
833 // the DOM?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
834
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
835 for(var i = 0; i < layer.magnitude + 1; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
836 // Make an option for each value.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
837 var option = $("<option/>").attr("value", i);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
838
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
839 if(colormaps[layer_name].hasOwnProperty(i)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
840 // We have a real name for this value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
841 option.text(colormaps[layer_name][i].name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
842 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
843 // No name. Use the number.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
844 option.text(i);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
845 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
846
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
847 filter_value.append(option);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
848
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
849 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
850
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
851 // Select the last option, so that 1 on 0/1 layers will
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
852 // be selected by default.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
853 filter_value.val(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
854 filter_value.children().last().attr("value"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
855
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
856 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
857 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
858 // Not a discrete layer, so we take a threshold.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
859 filter_threshold.show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
860 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
861
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
862 save_filter.show ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
863
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
864 save_filter.button().click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
865 // Configure Save Filter Buttons
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
866
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
867 // Get selected value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
868 var selected = filter_value.prop("selectedIndex");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
869 var value = filter_value.val();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
870
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
871 var signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
872
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
873 // Gather Tumor-ID Signatures with value and push to "signatures"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
874 for (hex in polygons){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
875 if (layer.data[hex] == value){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
876 signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
877 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
878 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
879
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
880 // Create Layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
881 if (created == false) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
882 select_list (signatures, "user selection");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
883 created = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
884 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
885 created = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
886 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
887
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
888
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
889 // Now that the right controls are there, assume they have
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
890 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
891
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
892 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
893 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
894 created = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
895 // Hide the filtering settings
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
896 filter_value.hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
897 filter_threshold.hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
898 save_filter.hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
899 // Draw view since we're no longer filtering on this layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
900 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
901 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
902 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
903
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
904 // Respond to changes to filter configuration
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
905 filter_value.change(refresh);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
906
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
907 // TODO: Add a longer delay before refreshing here so the user can type more
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
908 // interactively.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
909 filter_threshold.keyup(refresh);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
910
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
911 // Configure the range slider
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
912
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
913 // First we need a function to update the range display, which we will run
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
914 // on change and while sliding (to catch both user-initiated and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
915 //programmatic changes).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
916 var update_range_display = function(event, ui) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
917 range_display.find(".low").text(ui.values[0].toFixed(3));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
918 range_display.find(".high").text(ui.values[1].toFixed(3));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
919 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
920
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
921 range_slider.slider({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
922 range: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
923 min: -1,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
924 max: 1,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
925 values: [-1, 1],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
926 step: 1E-9, // Ought to be fine enough
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
927 slide: update_range_display,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
928 change: update_range_display,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
929 stop: function(event, ui) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
930 // The user has finished sliding
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
931 // Draw the view. We will be asked for our values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
932 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
933 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
934 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
935
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
936 // When we have time, go figure out whether the slider should be here, and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
937 // what its end values should be.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
938 reset_slider(layer_name, root)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
939
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
940 return root;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
941 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
942
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
943 // ____________________________________________________________________________
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
944 // Replacement Set Operation Code
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
945 // ____________________________________________________________________________
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
946 function get_set_operation_selection () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
947 // For the new dop-down GUI for set operation selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
948 // we neeed a function to determine which set operation is selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
949 // This way we can display the appropriate divs.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
950
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
951 // Drop Down List & Index for Selected Element
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
952 var drop_down = document.getElementById("set-operations-list");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
953 var index = drop_down.selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
954 var selection = drop_down.options[index];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
955
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
956 return selection;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
957 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
958
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
959 function show_set_operation_drop_down () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
960 // Show Set Operation Drop Down Menu
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
961 document.getElementsByClassName("set-operation-col")[0].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
962 document.getElementsByClassName("set-operation-panel-holder")[0].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
963 document.getElementsByClassName("set-operation-panel")[0].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
964 document.getElementById("set-operations").style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
965 document.getElementsByClassName("set-operation-panel-title")[0].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
966 document.getElementsByClassName("set-operation-panel-contents")[0].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
967
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
968 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
969
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
970 function hide_set_operation_drop_down () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
971 // Hide Set Operation Drop Down Menu
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
972 document.getElementsByClassName("set-operation-col")[0].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
973 document.getElementsByClassName("set-operation-panel-holder")[0].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
974 document.getElementsByClassName("set-operation-panel")[0].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
975 document.getElementById("set-operations").style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
976 document.getElementsByClassName("set-operation-panel-title")[0].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
977 document.getElementsByClassName("set-operation-panel-contents")[0].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
978
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
979 // Hide the Data Values for the Selected Layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
980 var drop_downs_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
981 for (var i = 0; i < drop_downs_layer_values.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
982 drop_downs_layer_values[i].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
983 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
984
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
985 // Hide the Compute Button
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
986 var compute_button = document.getElementsByClassName("compute-button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
987 compute_button[0].style.visibility = "hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
988
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
989 // Set the "Select Layer" drop down to the default value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
990 var list = document.getElementById("set-operations-list");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
991 list.selectedIndex = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
992
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
993 var list_value = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
994 list_value[0].selectedIndex = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
995 list_value[1].selectedIndex = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
996
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
997 // Remove all elements from drop downs holding the data values for the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
998 // selected layers. This way there are no values presented when the user
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
999 // clicks on the set operation button to open it again.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1000 var set_operation_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1001 var length = set_operation_layer_values[0].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1002 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1003 set_operation_layer_values[0].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1004 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1005 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1006 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1007
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1008 var length = set_operation_layer_values[1].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1009 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1010 set_operation_layer_values[1].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1011 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1012 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1013 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1014
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1015 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1016
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1017 function create_set_operation_ui () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1018 // Returns a Jquery element that is then prepended to the existing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1019 // set theory drop-down menu
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1020
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1021 // This holds the root element for this set operation UI
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1022 var root = $("<div/>").addClass("set-operation-entry");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1023
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1024 // Add Drop Downs to hold the selected layers and and selected data values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1025 var set_theory_value1 = $("<select/>").addClass("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1026 var set_theory_layer_value1 = $("<select/>").addClass("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1027 var set_theory_value2 = $("<select/>").addClass("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1028 var set_theory_layer_value2 = $("<select/>").addClass("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1029
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1030 var compute_button = $("<input/>").attr("type", "button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1031 compute_button.addClass ("compute-button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1032
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1033 // Append to Root
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1034 root.append (set_theory_value1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1035 root.append (set_theory_layer_value1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1036 root.append (set_theory_value2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1037 root.append (set_theory_layer_value2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1038 root.append (compute_button);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1039
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1040 return root;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1041 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1042
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1043 function update_set_operation_drop_down () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1044 // This is the onchange command for the drop down displaying the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1045 // different set operation functions. It is called whenever the user changes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1046 // the selected set operation.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1047
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1048 // Get the value of the set operation selection made by the user.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1049 var selection = get_set_operation_selection();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1050 var value = selection.value;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1051 // Check if the selectin value is that of one of set operation functions
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1052 if (selection.value == 1 || selection.value == 2
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1053 || selection.value == 3 || selection.value == 4
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1054 || selection.value == 5){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1055 // Make the drop downs that hold layer names and data values visible
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1056 var drop_downs = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1057 var drop_downs_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1058
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1059 for (var i = 0; i < drop_downs.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1060 drop_downs[i].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1061 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1062
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1063 for (var i = 0; i < drop_downs_layer_values.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1064 drop_downs_layer_values[i].style.visibility="visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1065 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1066
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1067 var compute_button = document.getElementsByClassName("compute-button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1068 compute_button[0].style.visibility = "visible";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1069 compute_button[0].value = "Compute Set Operation";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1070
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1071 if (first_opening == true) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1072 // Set the default value for the drop down, holding the selected layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1073 var default_value = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1074 default_value.text = "Select Layer 1";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1075 default_value.value = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1076 drop_downs[0].add(default_value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1077
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1078 var default_value2 = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1079 default_value2.text = "Select Layer 2";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1080 default_value2.value = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1081 drop_downs[1].add(default_value2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1082
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1083 // Prevent from adding the default value again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1084 first_opening = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1085 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1086
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1087 // Hide the second set of drop downs if "Not:" is selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1088 if (selection.value == 5) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1089 drop_downs[1].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1090 drop_downs_layer_values[1].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1091 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1092 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1093 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1094 // If the user has the default value selected, hide all drop downs
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1095 var drop_downs = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1096 for (var i = 0; i < drop_downs.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1097 drop_downs[i].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1098 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1099 var drop_downs_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1100 for (var i = 0; i < drop_downs_layer_values.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1101 drop_downs_layer_values[i].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1102 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1103 var compute_button = document.getElementsByClassName("compute-button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1104 compute_button[0].style.visibility = "hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1105 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1106 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1107
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1108 function update_set_operation_selections () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1109 // This function is called when the shorlist is changed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1110 // It appropriately updates the drop down containing the list of layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1111 // to match the layers found in the shortlist.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1112
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1113 // Get the list of all layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1114 var layers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1115 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1116 // Get the layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1117 var layer_name = $(element).data("layer");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1118 layers.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1119 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1120
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1121 // Get a list of all drop downs that contain layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1122 var drop_downs = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1123
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1124 // Remove all existing layer names from both dropdowns
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1125 var length = drop_downs[0].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1126 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1127 drop_downs[0].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1128 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1129 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1130 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1131 var length = drop_downs[1].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1132 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1133 drop_downs[1].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1134 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1135 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1136 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1137
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1138 // Add the default values that were stripped in the last step.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1139 var default_value = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1140 default_value.text = "Select Layer 1";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1141 default_value.value = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1142 drop_downs[0].add(default_value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1143
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1144 var default_value2 = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1145 default_value2.text = "Select Layer 2";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1146 default_value2.value = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1147 drop_downs[1].add(default_value2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1148
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1149 first_opening = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1150
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1151 // Add the layer names from the shortlist to the drop downs that store
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1152 // layer names.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1153 for (var i = 0; i < drop_downs.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1154 for (var j = 0; j < layers.length; j++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1155 var option = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1156 option.text = layers[j];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1157 option.value = j+1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1158 drop_downs[i].add(option);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1159 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1160 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1161
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1162 // Remove all elements from drop downs holding the data values for the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1163 // selected layers. This way there are no values presented when the user
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1164 // clicks on the set operation button to open it again.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1165 var set_operation_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1166 var length = set_operation_layer_values[0].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1167 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1168 set_operation_layer_values[0].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1169 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1170 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1171 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1172
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1173 var length = set_operation_layer_values[1].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1174 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1175 set_operation_layer_values[1].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1176 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1177 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1178 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1179
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1180 // Call the function containing onchange commands for these dropdowns.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1181 // This way the data values are updated according the the selected layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1182 update_set_operation_data_values ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1183 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1184
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1185 function update_set_operation_data_values () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1186 // Define the onchange commands for the drop downs that hold layer names.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1187 // This way the data values are updated according the the selected layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1188
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1189 // Get all drop down elements
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1190 var selected_function = document.getElementById ("set-operations-list");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1191 var drop_downs = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1192 var set_operation_layer_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1193
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1194 // The "Select Layer1" Dropdown onchange function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1195 drop_downs[0].onchange = function(){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1196 // Strip current values of the data value dropdown
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1197 var length = set_operation_layer_values[0].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1198 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1199 set_operation_layer_values[0].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1200 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1201 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1202 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1203
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1204 // Add the data values depending on the selected layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1205 var selectedIndex = drop_downs[0].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1206 var layer_name = drop_downs[0].options[selectedIndex].text;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1207 var set_operation_data_value_select = set_operation_layer_values[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1208 create_set_operation_pick_list(set_operation_data_value_select, layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1209 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1210
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1211 // The "Select Layer2" Dropdown onchange function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1212 drop_downs[1].onchange = function(){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1213 // Strip current values of the data value dropdown
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1214 var length = set_operation_layer_values[1].options.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1215 do{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1216 set_operation_layer_values[1].remove(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1217 length--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1218 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1219 while (length > 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1220
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1221 // Add the data values depending on the selected layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1222 var selectedIndex = drop_downs[1].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1223 var layer_name = drop_downs[1].options[selectedIndex].text;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1224 var set_operation_data_value_select = set_operation_layer_values[1];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1225 create_set_operation_pick_list(set_operation_data_value_select, layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1226 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1227
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1228 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1229
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1230 function create_set_operation_pick_list(value,layer_object) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1231
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1232 // We must create a drop down containing the data values for the selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1233 // layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1234
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1235 // The Javascript "select" element that contains the data values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1236 // is passed as "value" and the selected layer is passed as "layer_object".
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1237
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1238 // First, figure out what kind of filter settings we take based on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1239 // what kind of layer we are.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1240 with_layer(layer_object, function(layer) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1241
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1242 // No options available. We have to add them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1243 for(var i = 0; i < layer.magnitude + 1; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1244 // Make an option for each value;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1245 var option = document.createElement("option");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1246 option.value = i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1247
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1248 if(colormaps[layer_object].hasOwnProperty(i)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1249 // We have a real name for this value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1250 option.text = (colormaps[layer_object][i].name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1251 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1252 // No name. Use the number.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1253 option.text = i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1254 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1255 value.add(option);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1256
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1257 // Select the last option, so that 1 on 0/1 layers will
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1258 // be selected by default.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1259 var last_index = value.options.length - 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1260 value.selectedIndex = last_index;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1261 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1262 // Now that the right controls are there, assume they have
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1263 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1264 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1265 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1266
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1267
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1268 function update_shortlist_ui() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1269 // Go through the shortlist and make sure each layer there has an entry in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1270 // the shortlist UI, and that each UI element has an entry in the shortlist.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1271 // Also make sure the metadata for all existing layers is up to date.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1272
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1273 // Clear the existing UI lookup table
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1274 shortlist_ui = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1275
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1276 for(var i = 0; i < shortlist.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1277 // For each shortlist entry, put a false in the lookup table
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1278 shortlist_ui[shortlist[i]] = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1279 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1280
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1281
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1282 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1283 if(shortlist_ui[$(element).data("layer")] === false) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1284 // There's a space for this element: it's still in the shortlist
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1285
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1286 // Fill it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1287 shortlist_ui[$(element).data("layer")] = $(element);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1288
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1289 // Update the metadata in the element. It make have changed due to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1290 // statistics info coming back.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1291 fill_layer_metadata($(element).find(".metadata-holder"),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1292 $(element).data("layer"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1293 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1294 // It wasn't in the shortlist, so get rid of it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1295 $(element).remove();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1296 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1297 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1298
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1299 for(var layer_name in shortlist_ui) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1300 // For each entry in the lookup table
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1301 if(shortlist_ui[layer_name] === false) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1302 // If it's still false, make a UI element for it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1303 shortlist_ui[layer_name] = make_shortlist_ui(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1304 $("#shortlist").prepend(shortlist_ui[layer_name]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1305
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1306 // Check it's box if possible
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1307 shortlist_ui[layer_name].find(".layer-on").click();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1308 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1309 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1310
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1311 // Make things re-orderable
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1312 // Be sure to re-draw the view if the order changes, after the user puts
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1313 // things down.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1314 $("#shortlist").sortable({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1315 update: refresh,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1316 // Sort by the part with the lines icon, so we can still select text.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1317 handle: ".shortlist-controls"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1318 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1319
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1320 update_set_operation_selections ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1321 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1322
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1323 function uncheck_checkbox (checkbox_class) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1324 // Unchecks chekboxes after the function has been completed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1325 var checkboxArray = new Array ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1326 checkboxArray = document.getElementsByClassName(checkbox_class);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1327 for (var i = 0; i < checkboxArray.length; i++)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1328 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1329 checkboxArray[i].checked = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1330 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1331 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1332
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1333 function hide_values (set_theory_function) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1334 // Hides pick lists for set theory functions after function has been
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1335 // completed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1336 var value_type = set_theory_function + '-value';
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1337
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1338 var values = new Array ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1339
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1340 values = document.getElementsByClassName(value_type);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1341
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1342 var length = values.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1343
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1344 for (var i = 0; i < length; i++)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1345 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1346 values[i].style.display = 'none';
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1347 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1348 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1349 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1350
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1351 function compute_intersection (values, intersection_layer_names, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1352 // A function that will take a list of layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1353 // that have been selected for the intersection utility.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1354 // Fetches the respective layers and list of tumor ids.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1355 // Then compares data elements of the same tumor id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1356 // between both layers. Adds these hexes to a new layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1357 // for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1358
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1359 //Array of signatures that intersect
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1360 var intersection_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1361
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1362 with_layers (intersection_layer_names, function (intersection_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1363
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1364 // Gather Tumor-ID Signatures.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1365 for (hex in polygons)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1366 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1367 if (intersection_layers[0].data[hex] == values[0] && intersection_layers[1].data[hex] == values[1]){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1368 intersection_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1369 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1370 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1371 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1372
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1373 for (var i = 0; i < intersection_layer_names.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1374 intersection_layer_names[i] = intersection_layer_names[i] + " [" + text[i] + "]";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1375 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1376 var intersection_function = "intersection";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1377 select_list (intersection_signatures, intersection_function, intersection_layer_names);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1378 uncheck_checkbox ('intersection-checkbox');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1379 hide_values('intersection');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1380 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1381
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1382 function compute_union (values, union_layer_names, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1383 // A function that will take a list of layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1384 // that have been selected for the union utility.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1385 // Fetches the respective layers and list of tumor ids.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1386 // Then compares data elements of the same tumor id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1387 // between both layers. Adds these hexes to a new layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1388 // for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1389
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1390 //Array of signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1391 var union_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1392
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1393 with_layers (union_layer_names, function (union_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1394
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1395 // Gather Tumor-ID Signatures.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1396 for (hex in polygons)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1397 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1398 // Union Function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1399 if (union_layers[0].data[hex] == values[0] || union_layers[1].data[hex] == values[1]){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1400 union_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1401 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1402 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1403 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1404
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1405 for (var i = 0; i < union_layer_names.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1406 union_layer_names[i] = union_layer_names[i] + " [" + text[i] + "]";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1407 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1408
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1409 var union_function = "union";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1410 select_list (union_signatures, union_function, union_layer_names);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1411 uncheck_checkbox ('union-checkbox');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1412 hide_values('union');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1413 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1414
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1415 function compute_set_difference (values, set_difference_layer_names, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1416 // A function that will take a list of layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1417 // that have been selected for the set difference utility.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1418 // Fetches the respective layers and list of tumor ids.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1419 // Then compares data elements of the same tumor id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1420 // between both layers. Adds these hexes to a new layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1421 // for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1422
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1423 //Array of signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1424 var set_difference_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1425
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1426 with_layers (set_difference_layer_names, function (set_difference_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1427
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1428 // Gather Tumor-ID Signatures.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1429 for (hex in polygons)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1430 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1431 // Set Difference Function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1432 if (set_difference_layers[0].data[hex] == values[0] &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1433 set_difference_layers[1].data[hex] != values[1]){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1434 set_difference_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1435 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1436 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1437 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1438
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1439 for (var i = 0; i < set_difference_layer_names.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1440 set_difference_layer_names[i] = set_difference_layer_names[i] + " [" + text[i] + "]";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1441 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1442
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1443 var set_difference_function = "set difference";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1444 select_list (set_difference_signatures, set_difference_function, set_difference_layer_names);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1445 uncheck_checkbox ('set-difference-checkbox');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1446 hide_values('set-difference');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1447 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1448
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1449 function compute_symmetric_difference (values, symmetric_difference_layer_names, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1450 // A function that will take a list of layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1451 // that have been selected for the set difference utility.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1452 // Fetches the respective layers and list of tumor ids.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1453 // Then compares data elements of the same tumor id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1454 // between both layers. Adds these hexes to a new layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1455 // for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1456
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1457 //Array of signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1458 var symmetric_difference_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1459
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1460 with_layers (symmetric_difference_layer_names, function (symmetric_difference_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1461
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1462 // Gather Tumor-ID Signatures.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1463 for (hex in polygons)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1464 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1465 // Symmetric Difference Function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1466 if (symmetric_difference_layers[0].data[hex] == values[0] &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1467 symmetric_difference_layers[1].data[hex] != values[1]){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1468 symmetric_difference_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1469 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1470 if (symmetric_difference_layers[0].data[hex] != values[0] &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1471 symmetric_difference_layers[1].data[hex] == values[1]){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1472 symmetric_difference_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1473 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1474 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1475 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1476
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1477 for (var i = 0; i < symmetric_difference_layer_names.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1478 symmetric_difference_layer_names[i] = symmetric_difference_layer_names[i] + " [" + text[i] + "]";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1479 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1480
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1481 var symmetric_difference_function = "symmetric difference";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1482 select_list (symmetric_difference_signatures, symmetric_difference_function, symmetric_difference_layer_names);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1483 uncheck_checkbox ('symmetric-difference-checkbox');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1484 hide_values('symmetric-difference');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1485 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1486
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1487 function compute_absolute_complement (values, absolute_complement_layer_names, text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1488 // A function that will take a list of layer names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1489 // that have been selected for the set difference utility.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1490 // Fetches the respective layers and list of tumor ids.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1491 // Then compares data elements of the same tumor id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1492 // between both layers. Adds these hexes to a new layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1493 // for visualization
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1494
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1495 //Array of signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1496 var absolute_complement_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1497
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1498 with_layers (absolute_complement_layer_names, function (absolute_complement_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1499
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1500 // Gather Tumor-ID Signatures.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1501 for (hex in polygons)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1502 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1503 // Absolute Complement Function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1504 if (absolute_complement_layers[0].data[hex] != values[0]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1505 absolute_complement_signatures.push(hex);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1506 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1507 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1508 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1509
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1510 for (var i = 0; i < absolute_complement_layer_names.length; i++){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1511 absolute_complement_layer_names[i] = absolute_complement_layer_names[i] + " [" + text[i] + "]";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1512 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1513 var absolute_complement_function = "absolute complement";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1514 select_list (absolute_complement_signatures, absolute_complement_function, absolute_complement_layer_names);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1515 uncheck_checkbox ('absolute-complement-checkbox');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1516 hide_values('absolute-complement');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1517 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1518
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1519
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1520 function layer_sort_order(a, b) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1521 // A sort function defined on layer names.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1522 // Return <0 if a belongs before b, >0 if a belongs after
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1523 // b, and 0 if their order doesn't matter.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1524
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1525 // Sort by selection status, then p_value, then clumpiness, then (for binary
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1526 // layers that are not selections) the frequency of the less common value,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1527 // then alphabetically by name if all else fails.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1528
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1529 // Note that we can consult the layer metadata "n" and "positives" fields to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1530 // calculate the frequency of the least common value in binary layers,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1531 // without downloading them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1532
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1533 if(layers[a].selection && !layers[b].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1534 // a is a selection and b isn't, so put a first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1535 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1536 } else if(layers[b].selection && !layers[a].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1537 // b is a selection and a isn't, so put b first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1538 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1539 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1540
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1541 if(layers[a].p_value < layers[b].p_value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1542 // a has a lower p value, so put it first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1543 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1544 } else if(layers[b].p_value < layers[a].p_value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1545 // b has a lower p value. Put it first instead.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1546 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1547 } else if(isNaN(layers[b].p_value) && !isNaN(layers[a].p_value)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1548 // a has a p value and b doesn't, so put a first
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1549 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1550 } else if(!isNaN(layers[b].p_value) && isNaN(layers[a].p_value)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1551 // b has a p value and a doesn't, so put b first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1552 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1553 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1554
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1555 if(layers[a].clumpiness < layers[b].clumpiness) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1556 // a has a lower clumpiness score, so put it first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1557 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1558 } else if(layers[b].clumpiness < layers[a].clumpiness) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1559 // b has a lower clumpiness score. Put it first instead.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1560 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1561 } else if(isNaN(layers[b].clumpiness) && !isNaN(layers[a].clumpiness)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1562 // a has a clumpiness score and b doesn't, so put a first
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1563 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1564 } else if(!isNaN(layers[b].clumpiness) && isNaN(layers[a].clumpiness)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1565 // b has a clumpiness score and a doesn't, so put b first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1566 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1567 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1568
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1569
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1570
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1571 if(!layers[a].selection && !isNaN(layers[a].positives) && layers[a].n > 0 &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1572 !layers[b].selection && !isNaN(layers[b].positives) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1573 layers[b].n > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1574
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1575 // We have checked to see each layer is supposed to be bianry layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1576 // without downloading. TODO: This is kind of a hack. Redesign the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1577 // whole system with a proper concept of layer type.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1578
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1579 // We've also verified they both have some data in them. Otherwise we
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1580 // might divide by 0 trying to calculate frequency.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1581
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1582 // Two binary layers (not selections).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1583 // Compute the frequency of the least common value for each
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1584
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1585 // This is the frequency of the least common value in a (will be <=1/2)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1586 var minor_frequency_a = layers[a].positives / layers[a].n;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1587 if(minor_frequency_a > 0.5) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1588 minor_frequency_a = 1 - minor_frequency_a;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1589 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1590
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1591 // And this is the same frequency for the b layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1592 var minor_frequency_b = layers[b].positives / layers[b].n;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1593 if(minor_frequency_b > 0.5) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1594 minor_frequency_b = 1 - minor_frequency_b;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1595 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1596
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1597 if(minor_frequency_a > minor_frequency_b) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1598 // a is more evenly split, so put it first
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1599 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1600 } else if(minor_frequency_a < minor_frequency_b) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1601 // b is more evenly split, so put it first
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1602 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1603 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1604
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1605 } else if (!layers[a].selection && !isNaN(layers[a].positives) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1606 layers[a].n > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1607
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1608 // a is a binary layer we can nicely sort by minor value frequency, but
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1609 // b isn't. Put a first so that we can avoid intransitive sort cycles.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1610
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1611 // Example: X and Z are binary layers, Y is a non-binary layer, Y comes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1612 // after X and before Z by name ordering, but Z comes before X by minor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1613 // frequency ordering. This sort is impossible.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1614
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1615 // The solution is to put both X and Z in front of Y, because they're
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1616 // more interesting.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1617
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1618 return -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1619
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1620 } else if (!layers[b].selection && !isNaN(layers[b].positives) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1621 layers[b].n > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1622
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1623 // b is a binary layer that we can evaluate based on minor value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1624 // frequency, but a isn't. Put b first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1625
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1626 return 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1627
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1628 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1629
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1630 // We couldn't find a difference in selection status, p-value, or clumpiness
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1631 // score, or the binary layer minor value frequency, or whether each layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1632 // *had* a binary layer minor value frequency, so use lexicographic ordering
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1633 // on the name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1634 return a.localeCompare(b);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1635
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1636 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1637
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1638 function sort_layers(layer_array) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1639 // Given an array of layer names, sort the array in place as we want layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1640 // to appear to the user.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1641 // We should sort by p value, with NaNs at the end. But selections should be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1642 // first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1643
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1644 layer_array.sort(layer_sort_order);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1645 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1646
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1647 function fill_layer_metadata(container, layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1648 // Empty the given jQuery container element, and fill it with layer metadata
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1649 // for the layer with the given name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1650
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1651 // Empty the container.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1652 container.html("");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1653
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1654 for(attribute in layers[layer_name]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1655 // Go through everything we know about this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1656 if(attribute == "data" || attribute == "url" ||
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1657 attribute == "magnitude" || attribute == "selection") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1658
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1659 // Skip built-in things
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1660 // TODO: Ought to maybe have all metadata in its own object?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1661 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1662 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1663
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1664 // This holds the metadata value we're displaying
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1665 var value = layers[layer_name][attribute];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1666
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1667 if(typeof value == "number" && isNaN(value)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1668 // If it's a numerical NaN (but not a string), just leave it out.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1669 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1670 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1671
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1672 // If we're still here, this is real metadata.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1673 // Format it for display.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1674 var value_formatted;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1675 if(typeof value == "number") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1676 if(value % 1 == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1677 // It's an int!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1678 // Display the default way
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1679 value_formatted = value;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1680 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1681 // It's a float!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1682 // Format the number for easy viewing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1683 value_formatted = value.toExponential(2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1684 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1685 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1686 // Just put the thing in as a string
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1687 value_formatted = value;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1688 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1689
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1690 // Do some transformations to make the displayed labels make more sense
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1691 lookup = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1692 n: "Number of non-empty values",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1693 positives: "Number of ones",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1694 inside_yes: "Ones in A",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1695 outside_yes: "Ones in background"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1696 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1697
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1698 if(lookup[attribute]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1699 // Replace a boring short name with a useful long name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1700 attribute = lookup[attribute];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1701 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1702
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1703 // Make a spot for it in the container and put it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1704 var metadata = $("<div\>").addClass("layer-metadata");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1705 metadata.text(attribute + " = " + value_formatted);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1706
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1707 container.append(metadata);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1708
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1709 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1710 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1711
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1712 function make_toggle_layout_ui(layout_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1713 // Returns a jQuery element to represent the layer layout the given name in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1714 // the toggle layout panel.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1715
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1716 // This holds a jQuery element that's the root of the structure we're
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1717 // building.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1718 var root = $("<div/>").addClass("layout-entry");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1719 root.data("layout-name", layout_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1720
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1721 // Put in the layer name in a div that makes it wrap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1722 root.append($("<div/>").addClass("layout-name").text(layout_name));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1723
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1724 return root;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1725 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1726
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1727 function make_browse_ui(layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1728 // Returns a jQuery element to represent the layer with the given name in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1729 // the browse panel.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1730
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1731 // This holds a jQuery element that's the root of the structure we're
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1732 // building.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1733 var root = $("<div/>").addClass("layer-entry");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1734 root.data("layer-name", layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1735
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1736 // Put in the layer name in a div that makes it wrap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1737 root.append($("<div/>").addClass("layer-name").text(layer_name));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1738
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1739 // Put in a layer metadata container div
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1740 var metadata_container = $("<div/>").addClass("layer-metadata-container");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1741
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1742 fill_layer_metadata(metadata_container, layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1743
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1744 root.append(metadata_container);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1745
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1746 return root;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1747 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1748
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1749 function update_browse_ui() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1750 // Make the layer browse UI reflect the current list of layers in sorted
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1751 // order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1752
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1753 // Re-sort the sorted list that we maintain
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1754 sort_layers(layer_names_sorted);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1755
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1756 // Close the select if it was open, forcing the data to refresh when it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1757 // opens again.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1758 $("#search").select2("close");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1759 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1760
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1761 function get_slider_range(layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1762 // Given the name of a layer, get the slider range from its shortlist UI
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1763 // entry.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1764 // Assumes the layer has a shortlist UI entry.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1765 return shortlist_ui[layer_name].find(".range-slider").slider("values");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1766 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1767
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1768 function reset_slider(layer_name, shortlist_entry) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1769 // Given a layer name and a shortlist UI entry jQuery element, reset the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1770 // slider in the entry to its default values, after downloading the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1771 // The default value may be invisible because we decided the layer should be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1772 // a colormap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1773
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1774 // We need to set its boundaries to the min and max of the data set
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1775 with_layer(layer_name, function(layer) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1776 if(have_colormap(layer_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1777 // This is a colormap, so don't use the range slider at all.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1778 // We couldn't know this before because the colormap may need to be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1779 // auto-detected upon download.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1780 shortlist_entry.find(".range").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1781 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1782 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1783 // We need the range slider
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1784 shortlist_entry.find(".range").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1785
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1786 // TODO: actually find max and min
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1787 // For now just use + and - magnitude
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1788 // This has the advantage of letting us have 0=black by default
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1789 var magnitude = layer.magnitude;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1790
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1791 // This holds the limit to use, which should be 1 if the magnitude
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1792 // is <1. This is sort of heuristic, but it's a good guess that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1793 // nobody wants to look at a layer with values -0.2 to 0.7 on a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1794 // scale of -10 to 10, say, but they might want it on -1 to 1.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1795 var range = Math.max(magnitude, 1.0)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1796
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1797 // Set the min and max.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1798 shortlist_entry.find(".range-slider").slider("option", "min",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1799 -range);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1800 shortlist_entry.find(".range-slider").slider("option", "max",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1801 range);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1802
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1803 // Set slider to autoscale for the magnitude.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1804 shortlist_entry.find(".range-slider").slider("values", [-magnitude,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1805 magnitude]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1806
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1807 print("Scaled to magnitude " + magnitude);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1808
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1809 // Redraw the view in case this changed anything
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1810 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1811 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1812
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1813 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1814 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1815
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1816 function get_current_layers() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1817 // Returns an array of the string names of the layers that are currently
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1818 // supposed to be displayed, according to the shortlist UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1819 // Not responsible for enforcing maximum selected layers limit.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1820
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1821 // This holds a list of the string names of the currently selected layers,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1822 // in order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1823 var current_layers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1824
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1825 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1826 // This holds the checkbox that determines if we use this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1827 var checkbox = $(element).find(".layer-on");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1828 if(checkbox.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1829 // Put the layer in if its checkbox is checked.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1830 current_layers.push($(element).data("layer"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1831 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1832 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1833
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1834 // Return things in reverse order relative to the UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1835 // Thus, layer-added layers will be "secondary", and e.g. selecting
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1836 // something with only tissue up behaves as you might expect, highlighting
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1837 // those things.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1838 current_layers.reverse();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1839
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1840 return current_layers;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1841 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1842
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1843 function get_current_filters() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1844 // Returns an array of filter objects, according to the shortlist UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1845 // Filter objects have a layer name and a boolean-valued filter function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1846 // that returns true or false, given a value from that layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1847 var current_filters = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1848
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1849 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1850 // Go through all the shortlist entries.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1851 // This function is also the scope used for filtering function config
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1852 // variables.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1853
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1854 // This holds the checkbox that determines if we use this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1855 var checkbox = $(element).find(".filter-on");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1856 if(checkbox.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1857 // Put the layer in if its checkbox is checked.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1858
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1859 // Get the layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1860 var layer_name = $(element).data("layer");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1861
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1862 // This will hold our filter function. Start with a no-op filter.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1863 var filter_function = function(value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1864 return true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1865 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1866
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1867 // Get the filter parameters
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1868 // This holds the input that specifies a filter threshold
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1869 var filter_threshold = $(element).find(".filter-threshold");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1870 // And this the element that specifies a filter match value for
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1871 // discrete layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1872 var filter_value = $(element).find(".filter-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1873
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1874 // We want to figure out which of these to use without going and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1875 // downloading the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1876 // So, we check to see which was left visible by the filter config
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1877 // setup code.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1878 if(filter_threshold.is(":visible")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1879 // Use a threshold. This holds the threshold.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1880 var threshold = parseInt(filter_threshold.val());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1881
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1882 filter_function = function(value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1883 return value > threshold;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1884 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1885 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1886
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1887 if(filter_value.is(":visible")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1888 // Use a discrete value match instead. This hodls the value we
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1889 // want to match.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1890 var desired = filter_value.val();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1891
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1892 filter_function = function(value) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1893 return value == desired;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1894 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1895 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1896
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1897 // Add a filter on this layer, with the function we've prepared.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1898 current_filters.push({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1899 layer_name: layer_name,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1900 filter_function: filter_function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1901 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1902 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1903 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1904
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1905 return current_filters;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1906 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1907
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1908 function get_current_layers() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1909 // Returns an array of the string names of the layers that are currently
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1910 // supposed to be displayed, according to the shortlist UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1911 // Not responsible for enforcing maximum selected layers limit.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1912
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1913 // This holds a list of the string names of the currently selected layers,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1914 // in order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1915 var current_layers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1916
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1917 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1918 // This holds the checkbox that determines if we use this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1919 var checkbox = $(element).find(".layer-on");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1920 if(checkbox.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1921 // Put the layer in if its checkbox is checked.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1922 current_layers.push($(element).data("layer"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1923 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1924 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1925
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1926 // Return things in reverse order relative to the UI.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1927 // Thus, layer-added layers will be "secondary", and e.g. selecting
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1928 // something with only tissue up behaves as you might expect, highlighting
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1929 // those things.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1930 current_layers.reverse();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1931
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1932 return current_layers;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1933 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1934
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1935 function get_current_set_theory_layers(function_type) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1936 // Returns an array of layer names that have been selected.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1937 // This function only looks at the layers that are listed on the shortlist.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1938
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1939 var current_set_theory_layers = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1940
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1941 // Initialize global variables that hold the number of checkboxes selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1942 // for set theory functions to zero so that the new number is calculated
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1943 // each time this function is called.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1944
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1945 if (function_type == "intersection"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1946 shortlist_intersection_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1947 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1948
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1949 if (function_type == "union"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1950 shortlist_union_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1951 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1952
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1953 if (function_type == "set difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1954 shortlist_set_difference_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1955 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1956
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1957 if (function_type == "symmetric difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1958 shortlist_symmetric_difference_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1959 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1960
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1961 if (function_type == "absolute complement"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1962 shortlist_absolute_complement_num = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1963 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1964
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1965 $("#shortlist").children().each(function(index, element) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1966 // Go through all the shortlist entries.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1967
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1968 // This holds the checkbox that determines if we use this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1969 // The class name depends on the function_type.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1970
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1971 // If intersection function look for intersection-checkbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1972 if (function_type == "intersection"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1973 var checkbox = $(element).find(".intersection-checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1974 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1975
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1976 // If union function look for union-checkbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1977 if (function_type == "union"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1978 var checkbox = $(element).find(".union-checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1979 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1980
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1981 // If set difference function look for set-difference-checkbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1982 if (function_type == "set difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1983 var checkbox = $(element).find(".set-difference-checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1984 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1985
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1986 // If symmetric difference function look for
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1987 // symmetric-difference-checkbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1988 if (function_type == "symmetric difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1989 var checkbox = $(element).find(".symmetric-difference-checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1990 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1991
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1992 if (function_type == "absolute complement"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1993 var checkbox = $(element).find(".absolute-complement-checkbox");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1994 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1995
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1996 if(checkbox.is(":checked")) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1997 // Put the layer in if its checkbox is checked.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1998
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1999
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2000 // Get the layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2001 var layer_name = $(element).data("layer");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2002
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2003 // Add the layer_name to the list of current_set_theory_layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2004 current_set_theory_layers.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2005
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2006 // Add to the global "num" variables to keep track of the number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2007 // of selected checkboxes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2008
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2009 if (function_type == "intersection"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2010 shortlist_intersection_num++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2011 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2012
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2013 if (function_type == "union"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2014 shortlist_union_num++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2015 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2016
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2017 if (function_type == "set difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2018 shortlist_set_difference_num++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2019 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2020
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2021 if (function_type == "symmetric difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2022 shortlist_symmetric_difference_num++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2023 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2024
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2025 if (function_type == "absolute complement"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2026 shortlist_absolute_complement_num++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2027 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2028
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2029 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2030 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2031
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2032 return current_set_theory_layers;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2033 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2034
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2035
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2036 function with_filtered_signatures(filters, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2037 // Takes an array of filters, as produced by get_current_filters. Signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2038 // pass a filter if the filter's layer has a value >0 for that signature.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2039 // Computes an array of all signatures passing all filters, and passes that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2040 // to the given callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2041
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2042 // TODO: Re-organize this to do filters one at a time, recursively, like a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2043 // reasonable second-order filter.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2044
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2045 // Prepare a list of all the layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2046 var layer_names = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2047
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2048 for(var i = 0; i < filters.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2049 layer_names.push(filters[i].layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2050 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2051
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2052 with_layers(layer_names, function(filter_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2053 // filter_layers is guaranteed to be in the same order as filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2054
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2055 // This is an array of signatures that pass all the filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2056 var passing_signatures = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2057
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2058 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2059 // For each signature
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2060
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2061 // This holds whether we pass all the filters
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2062 var pass = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2063
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2064 for(var i = 0; i < filter_layers.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2065 // For each filtering layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2066 if(!filters[i].filter_function(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2067 filter_layers[i].data[signature])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2068
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2069 // If the signature fails the filter function for the layer,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2070 // skip the signature.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2071 pass = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2072 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2073 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2074 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2075
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2076 if(pass) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2077 // Record that the signature passes all filters
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2078 passing_signatures.push(signature);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2079 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2080 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2081
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2082 // Now we have our list of all passing signatures, so hand it off to the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2083 // callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2084 callback(passing_signatures);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2085 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2086 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2087
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2088 function select_list(to_select, function_type, layer_names) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2089 // Given an array of signature names, add a new selection layer containing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2090 // just those hexes. Only looks at hexes that are not filtered out by the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2091 // currently selected filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2092
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2093 // function_type is an optional parameter. If no variable is passed for the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2094 // function_type undefined then the value will be undefined and the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2095 // default "selection + #" title will be assigned to the shortlist element.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2096 // If layer_names is undefined, the "selection + #" will also apply as a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2097 // default. However, if a value i.e. "intersection" is passed
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2098 // for function_type, the layer_names will be used along with the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2099 // function_type to assign the correct title.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2100
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2101 // Make the requested signature list into an object for quick membership
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2102 // checking. This holds true if a signature was requested, undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2103 // otherwise.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2104 var wanted = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2105
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2106 for(var i = 0; i < to_select.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2107 wanted[to_select[i]] = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2108 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2109
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2110 // This is the data object for the layer: from signature names to 1/0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2111 var data = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2112
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2113 // How many signatures will we have any mention of in this layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2114 var signatures_available = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2115
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2116 // Start it out with 0 for each signature. Otherwise we wil have missing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2117 // data for signatures not passing the filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2118 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2119 data[signature] = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2120 signatures_available += 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2121 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2122
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2123 // This holds the filters we're going to use to restrict our selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2124 var filters = get_current_filters();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2125
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2126 // Go get the list of signatures passing the filters and come back.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2127 with_filtered_signatures(filters, function(signatures) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2128 // How many signatures get selected?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2129 var signatures_selected = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2130
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2131 for(var i = 0; i < signatures.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2132 if(wanted[signatures[i]]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2133 // This signature is both allowed by the filters and requested.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2134 data[signatures[i]] = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2135 signatures_selected++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2136 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2137 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2138
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2139 // Make up a name for the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2140 var layer_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2141
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2142 // Default Values for Optional Parameters
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2143 if (function_type == undefined && layer_names == undefined){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2144 layer_name = "Selection " + selection_next_id;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2145 selection_next_id++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2146 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2147
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2148 if (function_type == "user selection"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2149 var text = prompt("Please provide a label for your selection",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2150 "Selection Label Text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2151 if (text != null){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2152 layer_name = text;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2153 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2154 if (!text)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2155 {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2156 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2157 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2158 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2159
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2160 // intersection for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2161 if (function_type == "intersection"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2162 layer_name = "(" + layer_names[0] + " ∩ " + layer_names[1] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2163 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2164
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2165 // union for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2166 if (function_type == "union"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2167 layer_name = "(" + layer_names[0] + " U " + layer_names[1] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2168 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2169
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2170 // set difference for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2171 if (function_type == "set difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2172 layer_name = "(" + layer_names[0] + " \\ " + layer_names[1] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2173 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2174
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2175 // symmetric difference for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2176 if (function_type == "symmetric difference"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2177 layer_name = "(" + layer_names[0] + " ∆ " + layer_names[1] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2178 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2179
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2180 // absolute complement for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2181 if (function_type == "absolute complement"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2182 layer_name = "Not: " + "(" + layer_names[0] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2183 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2184
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2185 // saved filter for layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2186 if (function_type == "save"){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2187 layer_name = "(" + layer_names[0] + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2188 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2189
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2190 // Add the layer. Say it is a selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2191 add_layer_data(layer_name, data, {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2192 selection: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2193 selected: signatures_selected, // Display how many hexes are in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2194 n: signatures_available // And how many have a value at all
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2195 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2196
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2197 // Update the browse UI with the new layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2198 update_browse_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2199
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2200 // Immediately shortlist it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2201 shortlist.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2202 update_shortlist_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2203 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2204
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2205 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2206
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2207 function select_rectangle(start, end) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2208 // Given two Google Maps LatLng objects (denoting arbitrary rectangle
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2209 // corners), add a new selection layer containing all the hexagons
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2210 // completely within that rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2211 // Only looks at hexes that are not filtered out by the currently selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2212 // filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2213
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2214 // Sort out the corners to get the rectangle limits in each dimension
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2215 var min_lat = Math.min(start.lat(), end.lat());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2216 var max_lat = Math.max(start.lat(), end.lat());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2217 var min_lng = Math.min(start.lng(), end.lng());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2218 var max_lng = Math.max(start.lng(), end.lng());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2219
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2220 // This holds an array of all signature names in our selection box.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2221 var in_box = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2222
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2223 // Start it out with 0 for each signature. Otherwise we wil have missing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2224 // data for signatures not passing the filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2225 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2226 // Get the path for its hex
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2227 var path = polygons[signature].getPath();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2228
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2229 // This holds if any points of the path are outside the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2230 // box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2231 var any_outside = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2232
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2233 path.forEach(function(point, index) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2234 // Check all the points. Runs synchronously.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2235
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2236 if(point.lat() < min_lat || point.lat() > max_lat ||
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2237 point.lng() < min_lng || point.lng() > max_lng) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2238
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2239 // This point is outside the rectangle
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2240 any_outside = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2241
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2242 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2243 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2244
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2245 // Select the hex if all its corners are inside the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2246 // rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2247 if(!any_outside) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2248 in_box.push(signature);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2249 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2250 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2251
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2252 // Now we have an array of the signatures that ought to be in the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2253 // (if they pass filters). Hand it off to select_list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2254
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2255 var select_function_type = "user selection";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2256 select_list(in_box, select_function_type);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2257
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2258 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2259
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2260 function recalculate_statistics(passed_filters) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2261 // Interrogate the UI to determine signatures that are "in" and "out", and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2262 // run an appropriate statisical test for each layer between the "in" and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2263 // "out" signatures, and update all the "p_value" fields for all the layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2264 // with the p values. Takes in a list of signatures that passed the filters,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2265 // and ignores any signatures not on that list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2266
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2267 // Build an efficient index of passing signatures
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2268 var passed = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2269 for(var i = 0; i < passed_filters.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2270 passed[passed_filters[i]] = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2271 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2272
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2273 // Figure out what the in-list should be (statistics group A)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2274 var layer_a_name = $(".statistics-a:checked").data("layer-name");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2275 var layer_b_name = $(".statistics-b:checked").data("layer-name");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2276
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2277 print("Running statistics between " + layer_a_name + " and " +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2278 layer_b_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2279
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2280 if(!layer_a_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2281 complain("Can't run statistics without an \"A\" group.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2282
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2283 // Get rid of the throbber
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2284 // TODO: Move this UI code out of the backend code.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2285 $(".recalculate-throbber").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2286 $("#recalculate-statistics").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2287
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2288 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2289 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2290
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2291 // We know the layers have data since they're selections, so we can just go
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2292 // look at them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2293
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2294 // This holds the "in" list: hexes from the "A" group.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2295 var in_list = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2296
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2297 for(var signature in layers[layer_a_name].data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2298 if(passed[signature] && layers[layer_a_name].data[signature]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2299 // Add all the signatures in the "A" layer to the in list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2300 in_list.push(signature);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2301 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2302 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2303
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2304 if(in_list.length == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2305 complain("Can't run statistics with an empty \"A\" group.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2306
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2307 // Get rid of the throbber
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2308 // TODO: Move this UI code out of the backend code.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2309 $(".recalculate-throbber").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2310 $("#recalculate-statistics").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2311
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2312 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2313 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2314
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2315 // This holds the "out" list: hexes in the "B" group, or, if that's not
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2316 // defined, all hexes. It's a little odd to run A vs. a set that includes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2317 // some members of A, but Prof. Stuart wants that and it's not too insane
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2318 // for a Binomial test (which is the only currently implemented test
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2319 // anyway).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2320 var out_list = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2321
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2322 if(layer_b_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2323 // We have a layer B, so take everything that's on in it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2324 for(var signature in layers[layer_b_name].data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2325 if(passed[signature] && layers[layer_b_name].data[signature]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2326 // Add all the signatures in the "B" layer to the out list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2327 out_list.push(signature);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2328 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2329 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2330 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2331 // The out list is all hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2332 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2333 if(passed[signature]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2334 // Put it on the out list.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2335 out_list.push(signature);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2336 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2337 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2338 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2339
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2340 // So now we have our in_list and our out_list
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2341
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2342 for(var layer_name in layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2343 // Do the stats on each layer between those lists. This only processes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2344 // layers that don't have URLs. Layers with URLs are assumed to be part
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2345 // of the available matrices.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2346 recalculate_statistics_for_layer(layer_name, in_list, out_list,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2347 passed_filters);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2348 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2349
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2350 // Now do all the layers with URLs. They are in the available score
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2351 // matrices.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2352 for(var i = 0; i < available_matrices.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2353 recalculate_statistics_for_matrix(available_matrices[i], in_list,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2354 out_list, passed_filters);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2355 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2356
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2357 print("Statistics jobs launched.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2358
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2359 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2360
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2361 function recalculate_statistics_for_layer(layer_name, in_list, out_list, all) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2362 // Re-calculate the stats for the layer with the given name, between the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2363 // given in and out arrays of signatures. Store the re-calculated statistics
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2364 // in the layer. all is a list of "all" signatures, from which we can
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2365 // calculate pseudocounts.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2366
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2367 // All we do is send the layer data or URL (whichever is more convenient) to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2368 // the workers. They independently identify the data type and run the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2369 // appropriate test, returning a p value or NaN by callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2370
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2371 // This holds a callback for setting the layer's p_value to the result of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2372 // the statistics.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2373 var callback = function(results) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2374
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2375 // The statistics code really sends back a dict of updated metadata for
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2376 // each layer. Copy it over.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2377 for(var metadata in results) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2378 layers[layer_name][metadata] = results[metadata];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2379 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2380
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2381 if(jobs_running == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2382 // All statistics are done!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2383 // TODO: Unify this code with similar callback below.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2384 // Re-sort everything and draw all the new p values.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2385 update_browse_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2386 update_shortlist_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2387
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2388 // Get rid of the throbber
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2389 $(".recalculate-throbber").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2390 $("#recalculate-statistics").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2391 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2392 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2393
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2394 if(layers[layer_name].data != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2395 // Already have this downloaded. A local copy to the web worker is
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2396 // simplest, and a URL may not exist anyway.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2397
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2398 rpc_call("statistics_for_layer", [layers[layer_name].data, in_list,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2399 out_list, all], callback);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2400 } else if(layers[layer_name].url != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2401 // We have a URL, so the layer must be in a matrix, too.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2402 // Skip it here.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2403 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2404 // Layer has no data and no way to get data. Should never happen.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2405 complain("Layer " + layer_name + " has no data and no url.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2406 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2407 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2408
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2409 function recalculate_statistics_for_matrix(matrix_url, in_list, out_list, all) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2410 // Given the URL of one of the visualizer generator's input score matrices,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2411 // download the matrix, calculate statistics for each layer in the matrix
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2412 // between the given in and out lists, and update the layer p values. all is
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2413 // a list of "all" signatures, from which we can calculate pseudocounts.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2414
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2415 rpc_call("statistics_for_matrix", [matrix_url, in_list, out_list, all],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2416 function(result) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2417
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2418 // The return value is p values by layer name
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2419 for(var layer_name in result) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2420 // The statistics code really sends back a dict of updated metadata
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2421 // for each layer. Copy it over.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2422 for(var metadata in result[layer_name]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2423 layers[layer_name][metadata] = result[layer_name][metadata];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2424 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2425 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2426
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2427 if(jobs_running == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2428 // All statistics are done!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2429 // TODO: Unify this code with similar callback above.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2430 // Re-sort everything and draw all the new p values.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2431 update_browse_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2432 update_shortlist_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2433
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2434 // Get rid of the throbber
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2435 $(".recalculate-throbber").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2436 $("#recalculate-statistics").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2437 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2438 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2439
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2440 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2441
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2442 function rpc_initialize() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2443 // Set up the RPC system. Must be called before rpc_call is used.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2444
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2445 for(var i = 0; i < NUM_RPC_WORKERS; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2446 // Start the statistics RPC (remote procedure call) Web Worker
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2447 var worker = new Worker("statistics.js");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2448
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2449 // Send all its messages to our reply processor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2450 worker.onmessage = rpc_reply;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2451
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2452 // Send its error events to our error processor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2453 worker.onerror = rpc_error;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2454
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2455 // Add it to the list of workers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2456 rpc_workers.push(worker);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2457 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2458 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2459
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2460 function rpc_call(function_name, function_args, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2461 // Given a function name and an array of arguments, send a message to a Web
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2462 // Worker thread to ask it to run the given job. When it responds with the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2463 // return value, pass it to the given callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2464
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2465 // Allocate a new call id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2466 var call_id = rpc_next_id;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2467 rpc_next_id++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2468
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2469 // Store the callback
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2470 rpc_callbacks[call_id] = callback;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2471
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2472 // Launch the call. Pass the function name, function args, and id to send
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2473 // back with the return value.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2474 rpc_workers[next_free_worker].postMessage({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2475 name: function_name,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2476 args: function_args,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2477 id: call_id
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2478 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2479
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2480 // Next time, use the next worker on the list, wrapping if we run out.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2481 // This ensures no one worker gets all the work.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2482 next_free_worker = (next_free_worker + 1) % rpc_workers.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2483
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2484 // Update the UI with the number of jobs in flight. Decrement jobs_running
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2485 // so the callback knows if everything is done or not.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2486 jobs_running++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2487 $("#jobs-running").text(jobs_running);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2488
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2489 // And the number of jobs total
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2490 $("#jobs-ever").text(rpc_next_id);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2491 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2492
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2493 function rpc_reply(message) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2494 // Handle a Web Worker message, which may be an RPC response or a log entry.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2495
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2496 if(message.data.log != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2497 // This is really a log entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2498 print(message.data.log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2499 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2500 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2501
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2502 // This is really a job completion message (success or error).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2503
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2504 // Update the UI with the number of jobs in flight.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2505 jobs_running--;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2506 $("#jobs-running").text(jobs_running);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2507
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2508 if(message.data.error) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2509 // The RPC call generated an error.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2510 // Inform the page.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2511 print("RPC error: " + message.data.error);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2512
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2513 // Get rid of the callback
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2514 delete rpc_callbacks[message.data.id];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2515
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2516 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2517 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2518
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2519 // Pass the return value to the registered callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2520 rpc_callbacks[message.data.id](message.data.return_value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2521
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2522 // Get rid of the callback
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2523 delete rpc_callbacks[message.data.id];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2524 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2525
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2526 function rpc_error(error) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2527 // Handle an error event from a web worker
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2528 // See http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.h
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2529 // tml#errorevent
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2530
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2531 complain("Web Worker error: " + error.message);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2532 print(error.message + "\n at" + error.filename + " line " + error.lineno +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2533 " column " + error.column);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2534 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2535
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2536 function initialize_view(initial_zoom) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2537 // Initialize the global Google Map.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2538
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2539 // Configure a Google map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2540 var mapOptions = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2541 // Look at the center of the map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2542 center: get_LatLng(128, 128),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2543 // Zoom all the way out
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2544 zoom: initial_zoom,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2545 mapTypeId: "blank",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2546 // Don't show a map type picker.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2547 mapTypeControlOptions: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2548 mapTypeIds: []
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2549 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2550 // Or a street view man that lets you walk around various Earth places.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2551 streetViewControl: false
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2552 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2553
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2554 // Create the actual map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2555 googlemap = new google.maps.Map(document.getElementById("visualization"),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2556 mapOptions);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2557
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2558 // Attach the blank map type to the map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2559 googlemap.mapTypes.set("blank", new BlankMapType());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2560
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2561 // Make the global info window
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2562 info_window = new google.maps.InfoWindow({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2563 content: "No Signature Selected",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2564 position: get_LatLng(0, 0)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2565 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2566
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2567 // Add an event to close the info window when the user clicks outside of any
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2568 // hexagon
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2569 google.maps.event.addListener(googlemap, "click", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2570 info_window.close();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2571
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2572 // Also make sure that the selected signature is no longer selected,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2573 // so we don't pop the info_window up again.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2574 selected_signature = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2575
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2576 // Also un-focus the search box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2577 $("#search").blur();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2578 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2579
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2580
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2581 // And an event to clear the selected hex when the info_window closes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2582 google.maps.event.addListener(info_window, "closeclick", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2583 selected_signature = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2584 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2585
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2586 // We also have an event listener that checks when the zoom level changes,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2587 // and turns off hex borders if we zoom out far enough, and turns them on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2588 // again if we come back.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2589 google.maps.event.addListener(googlemap, "zoom_changed", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2590 // Get the current zoom level (low is out)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2591 var zoom = googlemap.getZoom();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2592
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2593 // API docs say: pixelCoordinate = worldCoordinate * 2 ^ zoomLevel
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2594 // So this holds the number of pixels that the global length hex_size
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2595 // corresponds to at this zoom level.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2596 var hex_size_pixels = hex_size * Math.pow(2, zoom);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2597
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2598 if(hex_size_pixels < MIN_BORDER_SIZE) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2599 // We're too small for borders
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2600 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2601 set_hexagon_stroke_weight(polygons[signature], 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2602 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2603 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2604 // We can fit borders on the hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2605 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2606 set_hexagon_stroke_weight(polygons[signature],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2607 HEX_STROKE_WEIGHT);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2608 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2609 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2610
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2611 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2612
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2613 // Subscribe all the tool listeners to the map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2614 subscribe_tool_listeners(googlemap);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2615
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2616 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2617
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2618 function add_tool(tool_name, tool_menu_option, callback) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2619 // Given a programmatic unique name for a tool, some text for the tool's
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2620 // button, and a callback for when the user clicks that button, add a tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2621 // to the tool menu.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2622
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2623 // This hodls a button to activate the tool.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2624 var tool_button = $("<a/>").attr("href", "#").addClass("stacker");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2625 tool_button.text(tool_menu_option);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2626 tool_button.click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2627 // New tool. Remove all current tool listeners
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2628 clear_tool_listeners();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2629
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2630 // Say that the select tool is selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2631 selected_tool = tool_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2632 callback();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2633
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2634 // End of tool workflow must set current_tool to undefined.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2635 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2636
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2637 $("#toolbar").append(tool_button);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2638 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2639
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2640 function add_tool_listener(name, handler, cleanup) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2641 // Add a global event listener over the Google map and everything on it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2642 // name specifies the event to listen to, and handler is the function to be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2643 // set up as an event handler. It should take a single argument: the Google
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2644 // Maps event. A handle is returned that can be used to remove the event
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2645 // listen with remove_tool_listener.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2646 // Only events in the TOOL_EVENTS array are allowed to be passed for name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2647 // TODO: Bundle this event thing into its own object.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2648 // If "cleanup" is specified, it must be a 0-argument function to call when
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2649 // this listener is removed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2650
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2651 // Get a handle
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2652 var handle = tool_listener_next_id;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2653 tool_listener_next_id++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2654
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2655 // Add the listener for the given event under that handle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2656 // TODO: do we also need to index this for O(1) event handling?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2657 tool_listeners[handle] = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2658 handler: handler,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2659 event: name,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2660 cleanup: cleanup
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2661 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2662 return handle;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2663 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2664
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2665 function remove_tool_listener(handle) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2666 // Given a handle returned by add_tool_listener, remove the listener so it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2667 // will no longer fire on its event. May be called only once on a given
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2668 // handle. Runs any cleanup code associated with the handle being removed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2669
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2670 if(tool_listeners[handle].cleanup) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2671 // Run cleanup code if applicable
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2672 tool_listeners[handle].cleanup();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2673 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2674
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2675 // Remove the property from the object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2676 delete tool_listeners[handle];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2677 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2678
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2679 function clear_tool_listeners() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2680 // We're starting to use another tool. Remove all current tool listeners.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2681 // Run any associated cleanup code for each listener.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2682
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2683 for(var handle in tool_listeners) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2684 remove_tool_listener(handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2685 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2686 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2687
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2688 function subscribe_tool_listeners(maps_object) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2689 // Put the given Google Maps object into the tool events system, so that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2690 // events on it will fire global tool events. This can happen before or
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2691 // after the tool events themselves are enabled.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2692
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2693 for(var i = 0; i < TOOL_EVENTS.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2694 // For each event name we care about,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2695 // use an inline function to generate an event name specific handler,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2696 // and attach that to the Maps object.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2697 google.maps.event.addListener(maps_object, TOOL_EVENTS[i],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2698 function(event_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2699 return function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2700 // We are handling an event_name event
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2701
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2702 for(var handle in tool_listeners) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2703 if(tool_listeners[handle].event == event_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2704 // The handler wants this event
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2705 // Fire it with the Google Maps event args
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2706 tool_listeners[handle].handler(event);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2707 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2708 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2709 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2710 }(TOOL_EVENTS[i]));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2711 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2712
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2713 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2714
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2715 function have_colormap(colormap_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2716 // Returns true if the given string is the name of a colormap, or false if
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2717 // it is only a layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2718
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2719 return !(colormaps[colormap_name] == undefined);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2720 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2721
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2722 function get_range_position(score, low, high) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2723 // Given a score float, and the lower and upper bounds of an interval (which
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2724 // may be equal, but not backwards), return a number in the range -1 to 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2725 // that expresses the position of the score in the [low, high] interval.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2726 // Positions out of bounds are clamped to -1 or 1 as appropriate.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2727
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2728 // This holds the length of the input interval
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2729 var interval_length = high - low;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2730
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2731 if(interval_length > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2732 // First rescale 0 to 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2733 score = (score - low) / interval_length
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2734
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2735 // Clamp
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2736 score = Math.min(Math.max(score, 0), 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2737
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2738 // Now re-scale to -1 to 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2739 score = 2 * score - 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2740 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2741 // The interval is just a point
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2742 // Just use 1 if we're above the point, and 0 if below.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2743 score = (score > low)? 1 : -1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2744 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2745
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2746 return score;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2747 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2748
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2749 function refresh() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2750 // Schedule the view to be redrawn after the current event finishes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2751
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2752 // Get rid of the previous redraw request, if there was one. We only want
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2753 // one.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2754 window.clearTimeout(redraw_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2755
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2756 // Make a new one to happen as soon as this event finishes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2757 redraw_handle = window.setTimeout(redraw_view, 0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2758 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2759
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2760 function redraw_view() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2761 // Make the view display the correct hexagons in the colors of the current
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2762 // layer(s), as read from the values of the layer pickers in the global
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2763 // layer pickers array.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2764 // All pickers must have selected layers that are in the object of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2765 // layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2766 // Instead of calling this, you probably want to call refresh().
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2767
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2768 // This holds a list of the string names of the currently selected layers,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2769 // in order.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2770 var current_layers = get_current_layers();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2771
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2772 // This holds arrays of the lower and upper limit we want to use for
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2773 // each layer, by layer number. The lower limit corresponds to u or
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2774 // v = -1, and the upper to u or v = 1. The entries we make for
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2775 // colormaps are ignored.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2776 // Don't do this inside the callback since the UI may have changed by then.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2777 var layer_limits = []
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2778 for(var i = 0; i < current_layers.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2779 layer_limits.push(get_slider_range(current_layers[i]));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2780 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2781
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2782 // This holds all the current filters
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2783 var filters = get_current_filters();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2784
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2785 // Obtain the layer objects (mapping from signatures/hex labels to colors)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2786 with_layers(current_layers, function(retrieved_layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2787 print("Redrawing view with " + retrieved_layers.length + " layers.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2788
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2789 // Turn all the hexes the filtered-out color, pre-emptively
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2790 for(var signature in polygons) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2791 set_hexagon_color(polygons[signature], "black");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2792 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2793
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2794 // Go get the list of filter-passing hexes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2795 with_filtered_signatures(filters, function(signatures) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2796 for(var i = 0; i < signatures.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2797 // For each hex passign the filter
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2798 // This hodls its signature label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2799 var label = signatures[i];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2800
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2801 // This holds the color we are calculating for this hexagon.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2802 // Start with the missing data color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2803 var computed_color = "grey";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2804
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2805 if(retrieved_layers.length >= 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2806 // Two layers. We find a point in u, v cartesian space, map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2807 // it to polar, and use that to compute an HSV color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2808 // However, we map value to the radius instead of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2809 // saturation.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2810
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2811 // Get the heat along u and v axes. This puts us in a square
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2812 // of side length 2. Fun fact: undefined / number = NaN, but
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2813 // !(NaN == NaN)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2814 var u = retrieved_layers[0].data[label];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2815
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2816 if(!have_colormap(current_layers[0])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2817 // Take into account the slider values and re-scale the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2818 // layer value to express its position between them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2819 u = get_range_position(u, layer_limits[0][0],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2820 layer_limits[0][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2821 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2822
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2823 if(retrieved_layers.length >= 2) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2824 // There's a second layer, so use the v axis.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2825 var v = retrieved_layers[1].data[label];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2826
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2827 if(!have_colormap(current_layers[1])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2828 // Take into account the slider values and re-scale
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2829 // the layer value to express its position between
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2830 // them.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2831 v = get_range_position(v, layer_limits[1][0],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2832 layer_limits[1][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2833 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2834
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2835 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2836 // No second layer, so v axis is unused. Don't make it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2837 // undefined (it's not missing data), but set it to 0.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2838 var v = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2839 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2840
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2841 // Either of u or v may be undefined (or both) if the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2842 // did not contain an entry for this signature. But that's
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2843 // OK. Compute the color that we should use to express this
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2844 // combination of layer values. It's OK to pass undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2845 // names here for layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2846 computed_color = get_color(current_layers[0], u,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2847 current_layers[1], v);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2848 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2849
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2850 // Set the color by the composed layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2851 set_hexagon_color(polygons[label], computed_color);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2852 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2853 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2854
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2855 // Draw the color key.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2856 if(retrieved_layers.length == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2857 // No color key to draw
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2858 $(".key").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2859 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2860 // We do actually want the color key
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2861 $(".key").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2862
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2863 // This holds the canvas that the key gets drawn in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2864 var canvas = $("#color-key")[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2865
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2866 // This holds the 2d rendering context
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2867 var context = canvas.getContext("2d");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2868
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2869 for(var i = 0; i < KEY_SIZE; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2870 // We'll use i for the v coordinate (-1 to 1) (left to right)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2871 var v = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2872 if(retrieved_layers.length >= 2) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2873 v = i / (KEY_SIZE / 2) - 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2874
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2875 if(have_colormap(current_layers[1])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2876 // This is a color map, so do bands instead.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2877 v = Math.floor(i / KEY_SIZE *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2878 (retrieved_layers[1].magnitude + 1));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2879 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2880
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2881 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2882
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2883 for(var j = 0; j < KEY_SIZE; j++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2884 // And j spacifies the u coordinate (bottom to top)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2885 var u = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2886 if(retrieved_layers.length >= 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2887 u = 1 - j / (KEY_SIZE / 2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2888
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2889 if(have_colormap(current_layers[0])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2890 // This is a color map, so do bands instead.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2891 // Make sure to flip sign, and have a -1 for the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2892 // 0-based indexing.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2893 u = Math.floor((KEY_SIZE - j - 1) / KEY_SIZE *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2894 (retrieved_layers[0].magnitude + 1));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2895 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2896 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2897
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2898 // Set the pixel color to the right thing for this u, v
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2899 // It's OK to pass undefined names here for layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2900 context.fillStyle = get_color(current_layers[0], u,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2901 current_layers[1], v);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2902
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2903 // Fill the pixel
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2904 context.fillRect(i, j, 1, 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2905 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2906 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2907
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2908 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2909
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2910 if(have_colormap(current_layers[0])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2911 // We have a layer with horizontal bands
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2912 // Add labels to the key if we have names to use.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2913 // TODO: Vertical text for vertical bands?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2914
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2915 // Get the colormap
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2916 var colormap = colormaps[current_layers[0]]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2917
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2918 if(colormap.length > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2919 // Actually have any categories (not auto-generated)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2920 print("Drawing key text for " + colormap.length +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2921 " categories.");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2922
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2923 // How many pixels do we get per label, vertically
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2924 var pixels_per_label = KEY_SIZE / colormap.length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2925
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2926 // Configure for text drawing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2927 context.font = pixels_per_label + "px Arial";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2928 context.textBaseline = "top";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2929
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2930 for(var i = 0; i < colormap.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2931
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2932 // This holds the pixel position where our text goes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2933 var y_position = KEY_SIZE - (i + 1) * pixels_per_label;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2934
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2935 // Get the background color here as a 1x1 ImageData
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2936 var image = context.getImageData(0, y_position, 1, 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2937
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2938 // Get the components r, g, b, a in an array
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2939 var components = image.data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2940
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2941 // Make a Color so we can operate on it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2942 var background_color = Color({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2943 r: components[0],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2944 g: components[1],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2945 b: components[2]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2946 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2947
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2948 if(background_color.light()) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2949 // This color is light, so write in black.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2950 context.fillStyle = "black";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2951 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2952 // It must be dark, so write in white.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2953 context.fillStyle = "white";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2954 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2955
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2956 // Draw the name on the canvas
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2957 context.fillText(colormap[i].name, 0, y_position);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2958 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2959 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2960 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2961
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2962 // We should also set up axis labels on the color key.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2963 // We need to know about colormaps to do this
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2964
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2965 // Hide all the labels
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2966 $(".label").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2967
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2968 if(current_layers.length > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2969 // Show the y axis label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2970 $("#y-axis").text(current_layers[0]).show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2971
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2972 if(!have_colormap(current_layers[0])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2973 // Show the low to high markers for continuous values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2974 $("#low-both").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2975 $("#high-y").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2976 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2977 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2978
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2979 if(current_layers.length > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2980 // Show the x axis label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2981 $("#x-axis").text(current_layers[1]).show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2982
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2983 if(!have_colormap(current_layers[1])) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2984 // Show the low to high markers for continuous values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2985 $("#low-both").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2986 $("#high-x").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2987 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2988 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2989
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2990
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2991 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2992
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2993 // Make sure to also redraw the info window, which may be open.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2994 redraw_info_window();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2995 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2996
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2997 function get_color(u_name, u, v_name, v) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2998 // Given u and v, which represent the heat in each of the two currently
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2999 // displayed layers, as well as u_name and v_name, which are the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3000 // corresponding layer names, return the computed CSS color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3001 // Either u or v may be undefined (or both), in which case the no-data color
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3002 // is returned. If a layer name is undefined, that layer dimension is
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3003 // ignored.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3004
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3005 if(have_colormap(v_name) && !have_colormap(u_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3006 // We have a colormap as our second layer, and a layer as our first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3007 // Swap everything around so colormap is our first layer instead.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3008 // Now we don't need to think about drawing a layer first with a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3009 // colormap second.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3010 // This is a temporary swapping variable.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3011 var temp = v_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3012 v_name = u_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3013 u_name = temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3014
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3015 temp = v;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3016 v = u;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3017 u = temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3018 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3019
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3020 if(isNaN(u) || isNaN(v) || u == undefined || v == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3021 // At least one of our layers has no data for this hex.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3022 return "grey";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3023 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3024
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3025 if(have_colormap(u_name) && have_colormap(v_name) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3026 !colormaps[u_name].hasOwnProperty(u) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3027 !colormaps[v_name].hasOwnProperty(v) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3028 layers[u_name].magnitude <= 1 && layers[v_name].magnitude <= 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3029
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3030 // Special case: two binary or unary auto-generated colormaps.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3031 // Use dark grey/red/blue/purple color scheme
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3032
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3033 if(u == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3034 if(v == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3035 // Both are on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3036 return "#FF00FF";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3037 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3038 // Only the first is on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3039 return "#FF0000";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3040 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3041 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3042 if(v == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3043 // Only the second is on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3044 return "#0000FF";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3045 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3046 // Neither is on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3047 return "#545454";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3048 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3049 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3050
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3051 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3052
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3053 if(have_colormap(u_name) && !colormaps[u_name].hasOwnProperty(u) &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3054 layers[u_name].magnitude <= 1 && v_name == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3055
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3056 // Special case: a single binary or unary auto-generated colormap.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3057 // Use dark grey/red to make 1s stand out.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3058
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3059 if(u == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3060 // Red for on
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3061 return "#FF0000";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3062 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3063 // Dark grey for off
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3064 return "#545454";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3065 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3066 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3067
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3068
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3069 if(have_colormap(u_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3070 // u is a colormap
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3071 if(colormaps[u_name].hasOwnProperty(u)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3072 // And the colormap has an entry here. Use it as the base color.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3073 var to_clone = colormaps[u_name][u].color;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3074
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3075 var base_color = Color({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3076 hue: to_clone.hue(),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3077 saturation: to_clone.saturationv(),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3078 value: to_clone.value()
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3079 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3080 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3081 // The colormap has no entry. Assume we're calculating all the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3082 // entries. We do this by splitting the color circle evenly.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3083
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3084 // This holds the number of colors, which is 1 more than the largest
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3085 // value used (since we start at color 0), which is the magnitude.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3086 // It's OK to go ask for the magnitude of this layer since it must
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3087 // have already been downloaded.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3088 var num_colors = layers[u_name].magnitude + 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3089
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3090 // Calculate the hue for this number.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3091 var hsv_hue = u / (num_colors + 1) * 360;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3092
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3093 // The base color is a color at that hue, with max saturation and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3094 // value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3095 var base_color = Color({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3096 hue: hsv_hue,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3097 saturation: 100,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3098 value: 100
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3099 })
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3100 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3101
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3102 // Now that the base color is set, consult v to see what shade to use.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3103 if(v_name == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3104 // No v layer is actually in use. Use whatever is in the base
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3105 // color
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3106 // TODO: This code path is silly, clean it up.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3107 var hsv_value = base_color.value();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3108 } else if(have_colormap(v_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3109 // Do discrete shades in v
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3110 // This holds the number of shades we need.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3111 // It's OK to go ask for the magnitude of this layer since it must
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3112 // have already been downloaded.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3113 var num_shades = layers[v_name].magnitude + 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3114
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3115 // Calculate what shade we need from the nonnegative integer v
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3116 // We want 100 to be included (since that's full brightness), but we
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3117 // want to skip 0 (since no color can be seen at 0), so we add 1 to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3118 // v.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3119 var hsv_value = (v + 1) / num_shades * 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3120 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3121 // Calculate what shade we need from v on -1 to 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3122 var hsv_value = 50 + v * 50;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3123 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3124
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3125 // Set the color's value component.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3126 base_color.value(hsv_value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3127
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3128 // Return the shaded color
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3129 return base_color.hexString();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3130 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3131
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3132
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3133 // If we get here, we only have non-colormap layers.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3134
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3135 // This is the polar angle (hue) in degrees, forced to be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3136 // positive.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3137 var hsv_hue = Math.atan2(v, u) * 180 / Math.PI;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3138 if(hsv_hue < 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3139 hsv_hue += 360;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3140 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3141
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3142 // Rotate it by 60 degrees, so that the first layer is
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3143 // yellow/blue
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3144 hsv_hue += 60;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3145 if(hsv_hue > 360) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3146 hsv_hue -= 360;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3147 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3148
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3149 // This is the polar radius (value). We inscribe our square
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3150 // of side length 2 in a circle of radius 1 by dividing by
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3151 // sqrt(2). So we get a value from 0 to 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3152 var hsv_value = (Math.sqrt(Math.pow(u, 2) +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3153 Math.pow(v, 2)) / Math.sqrt(2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3154
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3155 // This is the HSV saturation component of the color on 0 to 1.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3156 // Just fix to 1.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3157 var hsv_saturation = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3158
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3159 // Now scale saturation and value to percent
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3160 hsv_saturation *= 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3161 hsv_value *= 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3162
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3163 // Now we have the color as HSV, but CSS doesn't support it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3164
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3165 // Make a Color object and get the RGB string
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3166 try {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3167 return Color({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3168 hue: hsv_hue,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3169 saturation: hsv_saturation,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3170 value: hsv_value,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3171 }).hexString();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3172 } catch(error) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3173 print("(" + u + "," + v + ") broke with color (" + hsv_hue +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3174 "," + hsv_saturation + "," + hsv_value + ")");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3175
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3176 // We'll return an error color
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3177 return "white";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3178 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3179 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3180
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3181 // Define a flat projection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3182 // See https://developers.google.com/maps/documentation/javascript/maptypes#Projections
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3183 function FlatProjection() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3184 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3185
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3186
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3187 FlatProjection.prototype.fromLatLngToPoint = function(latLng) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3188 // Given a LatLng from -90 to 90 and -180 to 180, transform to an x, y Point
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3189 // from 0 to 256 and 0 to 256
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3190 var point = new google.maps.Point((latLng.lng() + 180) * 256 / 360,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3191 (latLng.lat() + 90) * 256 / 180);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3192
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3193 return point;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3194
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3195 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3196
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3197
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3198 FlatProjection.prototype.fromPointToLatLng = function(point, noWrap) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3199 // Given a an x, y Point from 0 to 256 and 0 to 256, transform to a LatLng from
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3200 // -90 to 90 and -180 to 180
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3201 var latLng = new google.maps.LatLng(point.y * 180 / 256 - 90,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3202 point.x * 360 / 256 - 180, noWrap);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3203
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3204 return latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3205 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3206
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3207 // Define a Google Maps MapType that's all blank
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3208 // See https://developers.google.com/maps/documentation/javascript/examples/maptype-base
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3209 function BlankMapType() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3210 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3211
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3212 BlankMapType.prototype.tileSize = new google.maps.Size(256,256);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3213 BlankMapType.prototype.maxZoom = 19;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3214
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3215 BlankMapType.prototype.getTile = function(coord, zoom, ownerDocument) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3216 // This is the element representing this tile in the map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3217 // It should be an empty div
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3218 var div = ownerDocument.createElement("div");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3219 div.style.width = this.tileSize.width + "px";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3220 div.style.height = this.tileSize.height + "px";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3221 div.style.backgroundColor = "#000000";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3222
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3223 return div;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3224 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3225
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3226 BlankMapType.prototype.name = "Blank";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3227 BlankMapType.prototype.alt = "Blank Map";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3228
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3229 BlankMapType.prototype.projection = new FlatProjection();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3230
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3231
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3232
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3233 function get_LatLng(x, y) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3234 // Given a point x, y in map space (0 to 256), get the corresponding LatLng
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3235 return FlatProjection.prototype.fromPointToLatLng(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3236 new google.maps.Point(x, y));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3237 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3238
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3239 function clearMap() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3240
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3241 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3242
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3243 function drl_values(layout_index) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3244
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3245 // Download the DrL position data, and make it into a layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3246 $.get("drl"+ layout_index +".tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3247 // This is an array of rows, which are arrays of values:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3248 // id, x, y
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3249 // Only this time X and Y are Cartesian coordinates.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3250 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3251
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3252 // Compute two layers: one for x position, and one for y position.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3253 var layer_x = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3254 var layer_y = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3255
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3256 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3257 // Pull out the parts of the TSV entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3258 var label = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3259
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3260 if(label == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3261 // DrL ends its output with a blank line, which we skip
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3262 // here.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3263 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3264 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3265
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3266 var x = parseFloat(parsed[i][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3267 // Invert the Y coordinate since we do that in the hex grid
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3268 var y = -parseFloat(parsed[i][2]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3269
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3270 // Add x and y to the appropriate layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3271 layer_x[label] = x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3272 layer_y[label] = y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3273 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3274
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3275 // Register the layers with no priorities. By default they are not
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3276 // selections.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3277 add_layer_data("DrL X Position", layer_x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3278 add_layer_data("DrL Y Position", layer_y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3279
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3280 // Make sure the layer browser has the up-to-date layer list
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3281 update_browse_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3282
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3283 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3284 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3285
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3286 function assignment_values (layout_index, spacing) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3287 // Download the signature assignments to hexagons and fill in the global
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3288 // hexagon assignment grid.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3289 $.get("assignments" + layout_index +".tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3290 // This is an array of rows, which are arrays of values:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3291 // id, x, y
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3292 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3293
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3294 // This holds the maximum observed x
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3295 var max_x = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3296 // And y
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3297 var max_y = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3298
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3299 // Fill in the global signature grid and ploygon grid arrays.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3300 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3301 // Get the label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3302 var label = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3303
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3304 if(label == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3305 // Blank line
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3306 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3307 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3308
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3309 // Get the x coord
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3310 var x = parseInt(parsed[i][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3311 // And the y coord
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3312 var y = parseInt(parsed[i][2]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3313
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3314 x = x * spacing;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3315 y = y * spacing;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3316
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3317
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3318 // Update maxes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3319 max_x = Math.max(x, max_x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3320 max_y = Math.max(y, max_y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3321
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3322
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3323 // Make sure we have a row
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3324 if(signature_grid[y] == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3325 signature_grid[y] = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3326 // Pre-emptively add a row to the polygon grid.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3327 polygon_grid[y] = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3328 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3329
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3330 // Store the label in the global signature grid.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3331 signature_grid[y][x] = label;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3332 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3333
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3334 // We need to fit this whole thing into a 256x256 grid.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3335 // How big can we make each hexagon?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3336 // TODO: Do the algrbra to make this exact. Right now we just make a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3337 // grid that we know to be small enough.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3338 // Divide the space into one column per column, and calculate
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3339 // side length from column width. Add an extra column for dangling
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3340 // corners.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3341 var side_length_x = (256)/ (max_x + 2) * (2.0 / 3.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3342
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3343 print("Max hexagon side length horizontally is " + side_length_x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3344
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3345 // Divide the space into rows and calculate the side length
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3346 // from hex height. Remember to add an extra row for wggle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3347 var side_length_y = ((256)/(max_y + 2)) / Math.sqrt(3);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3348
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3349 print("Max hexagon side length vertically is " + side_length_y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3350
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3351 // How long is a hexagon side in world coords?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3352 // Shrink it from the biggest we can have so that we don't wrap off the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3353 // edges of the map.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3354 var hexagon_side_length = Math.min(side_length_x, side_length_y) / 2.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3355
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3356 // Store this in the global hex_size, so we can later calculate the hex
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3357 // size in pixels and make borders go away if we are too zoomed out.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3358 hex_size = hexagon_side_length;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3359
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3360 // How far in should we move the whole grid from the top left corner of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3361 // the earth?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3362 // Let's try leaving a 1/4 Earth gap at least, to stop wrapping in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3363 // longitude that we can't turn off.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3364 // Since we already shrunk the map to half max size, this would put it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3365 // 1/4 of the 256 unit width and height away from the top left corner.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3366 grid_offset = (256) / 4;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3367
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3368 // Loop through again and draw the polygons, now that we know how big
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3369 // they have to be
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3370 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3371 // TODO: don't re-parse this info
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3372 // Get the label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3373 var label = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3374
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3375 if(label == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3376 // Blank line
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3377 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3378 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3379
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3380 // Get the x coord
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3381 var x = parseInt(parsed[i][1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3382 // And the y coord
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3383 var y = parseInt(parsed[i][2]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3384
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3385 x = x * spacing;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3386 y = y * spacing;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3387
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3388 // Make a hexagon on the Google map and store that.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3389 var hexagon = make_hexagon(y, x, hexagon_side_length, grid_offset);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3390 // Store by x, y in grid
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3391 polygon_grid[y][x] = hexagon;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3392 // Store by label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3393 polygons[label] = hexagon;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3394
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3395 // Set the polygon's signature so we can look stuff up for it when
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3396 // it's clicked.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3397 set_hexagon_signature(hexagon, label);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3398
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3399 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3400
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3401 // Now that the ploygons exist, do the initial redraw to set all their
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3402 // colors corectly. In case someone has messed with the controls.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3403 // TODO: can someone yet have messed with the controlls?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3404 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3405
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3406
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3407 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3408 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3409
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3410 // Function to create a new map based upon the the layout_name argument
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3411 // Find the index of the layout_name and pass it as the index to the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3412 // drl_values and assignment_values functions as these files are indexed
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3413 // according to the appropriate layout
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3414 function recreate_map(layout_name, spacing) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3415
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3416 var layout_index = layout_names.indexOf(layout_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3417 drl_values(layout_index);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3418 assignment_values(layout_index, spacing);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3419
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3420 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3421
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3422 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3423
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3424 // Set up the RPC system for background statistics
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3425 rpc_initialize();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3426
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3427 // Set up the Google Map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3428 initialize_view(0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3429
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3430 // Set up the layer search
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3431 $("#search").select2({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3432 placeholder: "Add Attribute...",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3433 query: function(query) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3434 // Given a select2 query object, call query.callback with an object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3435 // with a "results" array.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3436
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3437 // This is the array of result objects we will be sending back.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3438 var results = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3439
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3440 // Get where we should start in the layer list, from select2's
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3441 // infinite scrolling.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3442 var start_position = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3443 if(query.context != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3444 start_position = query.context;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3445 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3446
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3447 for(var i = start_position; i < layer_names_sorted.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3448 // For each possible result
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3449 if(layer_names_sorted[i].toLowerCase().indexOf(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3450 query.term.toLowerCase()) != -1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3451
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3452 // Query search term is in this layer's name. Add a select2
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3453 // record to our results. Don't specify text: our custom
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3454 // formatter looks up by ID and makes UI elements
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3455 // dynamically.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3456 results.push({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3457 id: layer_names_sorted[i]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3458 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3459
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3460 if(results.length >= SEARCH_PAGE_SIZE) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3461 // Page is full. Send it on.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3462 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3463 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3464
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3465 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3466 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3467
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3468 // Give the results back to select2 as the results parameter.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3469 query.callback({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3470 results: results,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3471 // Say there's more if we broke out of the loop.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3472 more: i < layer_names_sorted.length,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3473 // If there are more results, start after where we left off.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3474 context: i + 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3475 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3476 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3477 formatResult: function(result, container, query) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3478 // Given a select2 result record, the element that our results go
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3479 // in, and the query used to get the result, return a jQuery element
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3480 // that goes in the container to represent the result.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3481
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3482 // Get the layer name, and make the browse UI for it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3483 return make_browse_ui(result.id);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3484 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3485 // We want our dropdown to be big enough to browse.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3486 dropdownCssClass: "results-dropdown"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3487 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3488
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3489 // Handle result selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3490 $("#search").on("select2-selecting", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3491 // The select2 id of the thing clicked (the layer's name) is event.val
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3492 var layer_name = event.val;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3493
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3494 // User chose this layer. Add it to the global shortlist.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3495
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3496 // Only add to the shortlist if it isn't already there
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3497 // Was it already there?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3498 var found = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3499 for(var j = 0; j < shortlist.length; j++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3500 if(shortlist[j] == layer_name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3501 found = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3502 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3503 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3504 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3505
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3506 if(!found) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3507 // It's new. Add it to the shortlist
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3508 shortlist.push(layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3509
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3510 // Update the UI to reflect this. This may redraw the view.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3511 update_shortlist_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3512
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3513 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3514
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3515 // Don't actually change the selection.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3516 // This keeps the dropdown open when we click.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3517 event.preventDefault();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3518 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3519
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3520 $("#recalculate-statistics").button().click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3521 // Re-calculate the statistics between the currently filtered hexes and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3522 // everything else.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3523
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3524 // Put up the throbber instead of us.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3525 $("#recalculate-statistics").hide();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3526 $(".recalculate-throbber").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3527
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3528 // This holds the currently enabled filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3529 var filters = get_current_filters();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3530
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3531 with_filtered_signatures(filters, function(signatures) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3532 // Find everything passing the filters and run the statistics.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3533 recalculate_statistics(signatures);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3534 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3535 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3536
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3537 // Temporary Inflate Button
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3538 $("#inflate").button().click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3539 initialize_view (0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3540 recreate_map(current_layout_name, 2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3541 refresh ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3542 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3543
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3544 // Create Pop-Up UI for Set Operations
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3545 $("#set-operations").prepend(create_set_operation_ui ());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3546
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3547 // Action handler for display of set operation pop-up
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3548 $("#set-operation").button().click(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3549 set_operation_clicks++;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3550 if (set_operation_clicks % 2 != 0){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3551 show_set_operation_drop_down ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3552 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3553 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3554 hide_set_operation_drop_down ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3555 var drop_downs = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3556 for (var i = 0; i < drop_downs.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3557 drop_downs[i].style.visibility="hidden";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3558 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3559 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3560
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3561 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3562
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3563 // Coputation of Set Operations
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3564 var compute_button = document.getElementsByClassName ("compute-button");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3565 compute_button[0].onclick = function () {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3566 var layer_names = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3567 var layer_values = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3568 var layer_values_text = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3569
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3570 var drop_down_layers = document.getElementsByClassName("set-operation-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3571 var drop_down_data_values = document.getElementsByClassName("set-operation-layer-value");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3572
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3573 var function_type = document.getElementById("set-operations-list");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3574 var selected_function = function_type.selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3575
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3576 var selected_index = drop_down_layers[0].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3577 layer_names.push(drop_down_layers[0].options[selected_index].text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3578
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3579 var selected_index = drop_down_data_values[0].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3580 layer_values.push(drop_down_data_values[0].options[selected_index].value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3581 layer_values_text.push(drop_down_data_values[0].options[selected_index].text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3582
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3583 if (selected_function != 5) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3584 var selected_index = drop_down_data_values[1].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3585 layer_values.push(drop_down_data_values[1].options[selected_index].value);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3586 layer_values_text.push(drop_down_data_values[1].options[selected_index].text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3587 var selected_index = drop_down_layers[1].selectedIndex;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3588 layer_names.push(drop_down_layers[1].options[selected_index].text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3589 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3590
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3591
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3592 switch (selected_function) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3593 case 1:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3594 compute_intersection(layer_values, layer_names, layer_values_text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3595 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3596 case 2:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3597 compute_union(layer_values, layer_names, layer_values_text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3598 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3599 case 3:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3600 compute_set_difference(layer_values, layer_names, layer_values_text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3601 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3602 case 4:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3603 compute_symmetric_difference(layer_values, layer_names, layer_values_text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3604 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3605 case 5:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3606 compute_absolute_complement(layer_values, layer_names, layer_values_text);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3607 break
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3608 default:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3609 complain ("Set Theory Error");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3610 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3611 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3612
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3613 // Download the layer index
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3614 $.get("layers.tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3615 // Layer index is <name>\t<filename>\t<clumpiness>
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3616 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3617
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3618 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3619 // Pull out the parts of the TSV entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3620 // This is the name of the layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3621 var layer_name = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3622
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3623 if(layer_name == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3624 // Skip any blank lines
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3625 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3626 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3627
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3628 // This is the URL from which to download the TSV for the actual
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3629 // layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3630 var layer_url = parsed[i][1];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3631
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3632 // This is the layer's clumpiness score
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3633 var layer_clumpiness = parseFloat(parsed[i][2]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3634
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3635 // This is the number of hexes that the layer has any values for.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3636 // We need to get it from the server so we don't have to download
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3637 // the layer to have it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3638 var layer_count = parseFloat(parsed[i][3]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3639
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3640 // This is the number of 1s in a binary layer, or NaN in other
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3641 // layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3642 var layer_positives = parseFloat(parsed[i][4]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3643
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3644 // Add this layer to our index of layers
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3645 add_layer_url(layer_name, layer_url, {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3646 clumpiness: layer_clumpiness,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3647 positives: layer_positives,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3648 n: layer_count
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3649 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3650 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3651
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3652 // Now we have added layer downloaders for all the layers in the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3653 // index. Update the UI
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3654 update_browse_ui();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3655
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3656
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3657 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3658
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3659 // Download full score matrix index, which we later use for statistics. Note
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3660 // that stats won't work unless this finishes first. TODO: enforce this.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3661 $.get("matrices.tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3662 // Matrix index is just <filename>
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3663 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3664
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3665 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3666 // Pull out the parts of the TSV entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3667 // This is the filename of the matrix.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3668 var matrix_name = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3669
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3670 if(matrix_name == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3671 // Not a real matrix
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3672 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3673 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3674
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3675 // Add it to the global list
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3676 available_matrices.push(matrix_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3677 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3678 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3679
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3680 // Download color map information
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3681 $.get("colormaps.tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3682 // Colormap data is <layer name>\t<value>\t<category name>\t<color>
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3683 // \t<value>\t<category name>\t<color>...
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3684 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3685
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3686 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3687 // Get the name of the layer
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3688 var layer_name = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3689
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3690 // Skip blank lines
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3691 if(layer_name == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3692 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3693 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3694
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3695 // This holds all the categories (name and color) by integer index
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3696 var colormap = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3697
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3698 print("Loading colormap for " + layer_name);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3699
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3700 for(j = 1; j < parsed[i].length; j += 3) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3701 // Store each color assignment.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3702 // Doesn't run if there aren't any assignments, leaving an empty
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3703 // colormap object that just forces automatic color selection.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3704
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3705 // This holds the index of the category
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3706 var category_index = parseInt(parsed[i][j]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3707
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3708 // The colormap gets an object with the name and color that the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3709 // index number refers to. Color is stored as a color object.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3710 colormap[category_index] = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3711 name: parsed[i][j + 1],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3712 color: Color(parsed[i][j + 2])
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3713 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3714
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3715 print( colormap[category_index].name + " -> " +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3716 colormap[category_index].color.hexString());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3717 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3718
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3719 // Store the finished color map in the global object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3720 colormaps[layer_name] = colormap;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3721
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3722
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3723 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3724
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3725 // We may need to redraw the view in response to having new color map
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3726 // info, if it came particularly late.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3727 refresh();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3728
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3729 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3730
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3731 // Download the Matrix Names and pass it to the layout_names array
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3732 $.get("matrixnames.tab", function(tsv_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3733 // This is an array of rows, which are strings of matrix names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3734 var parsed = $.tsv.parseRows(tsv_data);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3735
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3736 for(var i = 0; i < parsed.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3737 // Pull out the parts of the TSV entry
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3738 var label = parsed[i][0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3739
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3740 if(label == "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3741 // Skip any blank lines
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3742 continue;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3743 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3744 // Add layout names to global array of names
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3745 layout_names.push(label);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3746
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3747 if(layout_names.length == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3748 // This is the very first layout. Pull it up.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3749
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3750 // TODO: We don't go through the normal change event since we
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3751 // never change the dropdown value actually. But we duplicate
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3752 // user selection hode here.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3753 var current_layout = "Current Layout: " + layout_names[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3754
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3755 $("#current-layout").text(current_layout);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3756 initialize_view (0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3757 recreate_map(layout_names[0], 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3758 refresh ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3759 current_layout_name = layout_names[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3760
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3761 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3762 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3763 }, "text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3764
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3765 $("#layout-search").select2({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3766 placeholder: "Select a Layout...",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3767 query: function(query) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3768 // Given a select2 query object, call query.callback with an object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3769 // with a "results" array.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3770
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3771 // This is the array of result objects we will be sending back.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3772 var results = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3773
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3774 // Get where we should start in the layer list, from select2's
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3775 // infinite scrolling.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3776 var start_position = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3777 if(query.context != undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3778 start_position = query.context;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3779 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3780
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3781 for(var i = start_position; i < layout_names.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3782 // For each possible result
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3783 if(layout_names[i].toLowerCase().indexOf(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3784 query.term.toLowerCase()) != -1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3785
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3786 // Query search term is in this layer's name. Add a select2
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3787 // record to our results. Don't specify text: our custom
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3788 // formatter looks up by ID and makes UI elements
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3789 // dynamically.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3790 results.push({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3791 id: layout_names[i]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3792 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3793
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3794 if(results.length >= SEARCH_PAGE_SIZE) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3795 // Page is full. Send it on.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3796 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3797 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3798
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3799 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3800 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3801
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3802 // Give the results back to select2 as the results parameter.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3803 query.callback({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3804 results: results,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3805 // Say there's more if we broke out of the loop.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3806 more: i < layout_names.length,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3807 // If there are more results, start after where we left off.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3808 context: i + 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3809 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3810 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3811 formatResult: function(result, container, query) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3812 // Given a select2 result record, the element that our results go
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3813 // in, and the query used to get the result, return a jQuery element
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3814 // that goes in the container to represent the result.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3815
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3816 // Get the layer name, and make the browse UI for it.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3817 return make_toggle_layout_ui(result.id);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3818 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3819 // We want our dropdown to be big enough to browse.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3820 dropdownCssClass: "results-dropdown"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3821 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3822
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3823 // Handle result selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3824 $("#layout-search").on("select2-selecting", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3825 // The select2 id of the thing clicked (the layout's name) is event.val
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3826 var layout_name = event.val;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3827
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3828 var current_layout = "Current Layout: " + layout_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3829
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3830 $("#current-layout").text(current_layout);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3831 initialize_view (0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3832 recreate_map(layout_name, 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3833 refresh ();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3834 // Don't actually change the selection.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3835 // This keeps the dropdown open when we click.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3836 event.preventDefault();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3837
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3838 current_layout_name = layout_name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3839 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3840
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3841 drl_values(layout_names[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3842 assignment_values (layout_names[0], 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3843 current_layout_name = layout_names[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3844
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3845 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3846
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3847
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3848