annotate hexagram-6ae12361157c/hexagram/tools.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 // tools.js: Code to run all the tools in the menu bar.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2 // References globals in hexagram.js to actually do the tools' work.
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 // To add a tool:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
5 // * Make a $(function() {...}); block to hold your code.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
6 // * Add a tool with add_tool with your tool code as the callback.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
7 // * Add at least one tool listener with add_tool_listener. Give it cleanup code
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
8 // if necessary to remove temporary UI elements.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
9 // * Make sure to set selected_tool to undefined when your tool's normal
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
10 // workflow completes, so that the infowindow can use click events again.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
11 // (it got set to your tool's name by the code prepended to your callback).
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 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
14 // Set up the add text control
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
15 add_tool("add-text", "Add Text...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
16
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
17 // We'll prompt the user for some text, and then put a label where they
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
18 // next click.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
19
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
20 var text = prompt("Enter some text, and click anywhere on the " +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
21 "visualization to place it there", "Label Text");
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 if(!text) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
24 // They don't want to put a label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
25 print("Not putting any text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
26 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
27 return;
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
30 // Add a tool listenerr that places the label. It fires on a click
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
31 // anywhere on anything on the map, including the background. We keep a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
32 // handle to it so we can remove it when it fires, ensuring we get just
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
33 // one label. See http://stackoverflow.com/a/1544185
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
34 var handle = add_tool_listener("click", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
35
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
36 // Make a new MapLabel at the click position
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
37 // See http://bit.ly/18MbLhR (the MapLabel library example page)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
38 var map_label = new MapLabel({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
39 text: text,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
40 position: event.latLng,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
41 map: googlemap,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
42 fontSize: 10,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
43 align: "left"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
44 });
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 // Subscribe tool listeners to the label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
47 subscribe_tool_listeners(map_label);
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 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
50 remove_tool_listener(handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
51 }, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
52 // Cleanup: de-select ourselves.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
53 selected_tool = undefined;
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 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
56 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
57
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
58 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
59 // Set up the selection tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
60 add_tool("select", "Select", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
61
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
62 // Turn on a crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
63 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
64 draggableCursor:"crosshair"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
65 });
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 // Add a listener to start the selection where the user clicks
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
68 var start_handle = add_tool_listener("click",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
69 function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
70
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
71 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
72 remove_tool_listener(start_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
73
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
74 // Turn on a crosshair cursor again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
75 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
76 draggableCursor:"crosshair"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
77 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
78
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
79 // Store the start of the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
80 var selection_start = event.latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
81
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
82 print("Selection started at " + selection_start);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
83
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
84 // Make a rectangle for the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
85 var rectangle = new google.maps.Rectangle({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
86 fillColor: "#FFFFFF",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
87 strokeColor: "#FFFFFF",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
88 strokeWeight: 2,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
89 strokeOpacity: 1.0,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
90 fillOpacity: 0.5,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
91 // Don't give us a clickable cursor, or take mouse events.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
92 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
93 map: googlemap,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
94 bounds: new google.maps.LatLngBounds(selection_start,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
95 selection_start)
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
98 // This holds a selection preview event handler that should happen
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
99 // when we mouse over the map or the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
100 var preview = function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
101
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
102 // Store the end of the selection (provisionally)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
103 var selection_end = event.latLng;
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
106 if(selection_end.lng() < selection_start.lng()) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
107 // The user has selected a backwards rectangle, which wraps
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
108 // across the place where the globe is cut. None of our
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
109 // selections ever need to do this.
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 // Make the rectangle backwards
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
112 rectangle.setBounds(new google.maps.LatLngBounds(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
113 selection_end, selection_start));
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 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
116 // Make the rectangle forwards
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
117 rectangle.setBounds(new google.maps.LatLngBounds(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
118 selection_start, selection_end));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
119 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
120 }
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 a cleanup function to get rid of the rectangle when
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
123 // the resizing listener goes away.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
124 var preview_cleanup = function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
125 // Remove the rectangle
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
126 rectangle.setMap(undefined);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
127
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
128 // Remove the crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
129 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
130 draggableCursor: undefined
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 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
133
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
134 // Add a mouse move listener for interactivity
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
135 // Works over the map, hexes, or the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
136 var move_handle = add_tool_listener("mousemove", preview,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
137 preview_cleanup);
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 // We need a listener to finish the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
140 var finish = function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
141 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
142 remove_tool_listener(stop_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
143
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
144 // Also stop the dynamic updates. This removes the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
145 remove_tool_listener(move_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
146
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
147 // Store the end of the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
148 var selection_end = event.latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
149
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
150 print("Selection ended at " + selection_end);
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 // Select the rectangle by arbitrary corners.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
153 select_rectangle(selection_start, selection_end);
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
156 // Attach the listener.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
157 // The listener can still use its own handle because variable
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
158 // references are resolved at runtime.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
159 var stop_handle = add_tool_listener("click", finish, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
160 // Cleanup: say this tool is no longer selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
161 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
162 });
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 }, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
165 // Remove the crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
166 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
167 draggableCursor: undefined
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 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
171 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
172
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
173 // A tool for importing a list of hexes as a selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
174 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
175 add_tool("import", "Import...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
176 // Make the import form
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
177 var import_form = $("<form/>").attr("title",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
178 "Import List As Selection");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
179
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
180 import_form.append($("<div/>").text("Input names, one per line:"));
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 // A big text box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
183 var text_area = $("<textarea/>").addClass("import");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
184 import_form.append(text_area);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
185
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
186 import_form.append($("<div/>").text(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
187 "Open a file:"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
188
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
189 // This holds a file form element
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
190 var file_picker = $("<input/>").attr("type", "file").addClass("import");
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 import_form.append(file_picker);
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 file_picker.change(function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
195 // When a file is selected, read it in and populate the text box.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
196
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
197 // What file do we really want to read?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
198 var file = event.target.files[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
199
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
200 // Make a FileReader to read the file
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
201 var reader = new FileReader();
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 reader.onload = function(read_event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
204 // When we read with readAsText, we get a string. Just stuff it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
205 // in the text box for the user to see.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
206 text_area.text(reader.result);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
207 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
208
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
209 // Read the file, and, when it comes in, stick it in the textbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
210 reader.readAsText(file);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
211 });
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 import_form.dialog({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
214 modal: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
215 buttons: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
216 "Import": function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
217 // Do the import of the data. The data in question is always
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
218 // in the textbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
219
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
220 // Select all the entered hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
221 select_string(text_area.val());
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 // Finally, close the dialog
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
224 $(this).dialog("close");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
225
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
226 // Done with the tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
227 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
228 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
229 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
230 close: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
231 // They didn't want to use this tool.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
232 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
233 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
234 });
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 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
237
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
238 // The actual text to selection import function used by that tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
239 function select_string(string) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
240 // Given a string of hex names, one per line, make a selection of all those
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
241 // hexes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
242
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
243 // This is an array of signature names entered.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
244 var to_select = [];
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 // This holds the array of lines. Split on newlines (as seen in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
247 // jQuery.tsv.js)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
248 var lines = string.split(/\r?\n/);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
249
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
250 for(var i = 0; i < lines.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
251 // Trim and add to our requested selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
252 to_select.push(lines[i].trim());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
253 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
254
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
255 // Add a selection with as many of the requested hexes as actually exist and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
256 // pass the current filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
257 select_list(to_select);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
258 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
259
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
260 // And a tool for exporting selections as lists of hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
261 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
262 add_tool("export", "Export...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
263 // Make the export form
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
264 var export_form = $("<form/>").attr("title",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
265 "Export Selection As List");
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 export_form.append($("<div/>").text("Select a selection to export:"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
268
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
269 // Make a select box for picking from all selections.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
270 var select_box = $("<select/>");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
271
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
272 // Populate it with all existing selections
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
273 for(var layer_name in layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
274 if(layers[layer_name].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
275 // This is a selection, so add it to the dropdown.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
276 select_box.append($("<option/>").text(layer_name).attr("value",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
277 layer_name));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
278 }
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
281 export_form.append(select_box);
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 export_form.append($("<div/>").text("Exported data:"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
284
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
285 // A big text box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
286 var text_area = $("<textarea/>").addClass("export");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
287 text_area.prop("readonly", true);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
288 export_form.append(text_area);
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 // Add a download as file link. The "download" attribute makes the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
291 // browser save it, and the href data URI holds the data.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
292 var download_link = $("<a/>").attr("download", "selection.txt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
293 download_link.attr("href", "data:text/plain;base64,");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
294 download_link.text("Download As Text");
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 export_form.append(download_link);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
297
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
298 text_area.focus(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
299 // Select all on focus.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
300
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
301 $(this).select();
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
304 text_area.mouseup(function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
305 // Don't change selection on mouseup. See
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
306 // http://stackoverflow.com/a/5797700/402891 and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
307 // http://stackoverflow.com/q/3380458/402891
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
308 event.preventDefault();
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 select_box.change(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
312 // Update the text area with the list of hexes in the selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
313 // layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
314
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
315 // Get the layer name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
316 var layer_name = select_box.val();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
317 if(!have_layer(layer_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
318 // Not a real layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
319 // Probably just an empty select or something
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
320 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
321 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
322
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
323 // This holds our list. We build it in a string so we can escape it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
324 // with one .text() call when adding it to the page.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
325 var exported = "";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
326
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
327 // Get the layer data to export
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
328 var layer_data = layers[layer_name].data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
329 for(var signature in layer_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
330 if(layer_data[signature]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
331 // It's selected, put it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
332
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
333 if(exported != "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
334 // If there's already text, put a newline first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
335 exported += "\n";
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
338 exported += signature;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
339 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
340 }
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 // Now we know all the signatures from the selection, so tell the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
343 // page.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
344 text_area.text(exported);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
345
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
346 // Also fill in the data URI for saving. We use the handy
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
347 // window.bota encoding function.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
348 download_link.attr("href", "data:text/plain;base64," +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
349 window.btoa(exported));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
350 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
351
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
352 // Trigger the change event on the select box for the first selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
353 // thing, if any.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
354 select_box.change();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
355
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
356 export_form.dialog({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
357 modal: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
358 buttons: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
359 "Done": function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
360 // First, close the dialog
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
361 $(this).dialog("close");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
362
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
363 // Done with the tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
364 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
365 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
366 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
367 close: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
368 // They didn't want to use this tool.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
369 selected_tool = undefined;
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 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
373 });