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 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
26 return;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
27 }
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 // 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
30 // anywhere on anything on the map, including the background. We keep a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
31 // 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
32 // one label. See http://stackoverflow.com/a/1544185
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
33 var handle = add_tool_listener("click", function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
34
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
35 // Make a new MapLabel at the click position
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
36 // See http://bit.ly/18MbLhR (the MapLabel library example page)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
37 var map_label = new MapLabel({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
38 text: text,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
39 position: event.latLng,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
40 map: googlemap,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
41 fontSize: 10,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
42 align: "left"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
43 });
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 // Subscribe tool listeners to the label
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
46 subscribe_tool_listeners(map_label);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
47
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
48 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
49 remove_tool_listener(handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
50 }, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
51 // Cleanup: de-select ourselves.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
52 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
53 });
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 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
58 // Set up the selection tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
59 add_tool("select", "Select", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
60
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
61 // Turn on a crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
62 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
63 draggableCursor:"crosshair"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
64 });
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 // Add a listener to start the selection where the user clicks
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
67 var start_handle = add_tool_listener("click",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
68 function(event) {
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 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
71 remove_tool_listener(start_handle);
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 // Turn on a crosshair cursor again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
74 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
75 draggableCursor:"crosshair"
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
78 // Store the start of the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
79 var selection_start = event.latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
80
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
81 print("Selection started at " + selection_start);
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 // Make a rectangle for the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
84 var rectangle = new google.maps.Rectangle({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
85 fillColor: "#FFFFFF",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
86 strokeColor: "#FFFFFF",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
87 strokeWeight: 2,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
88 strokeOpacity: 1.0,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
89 fillOpacity: 0.5,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
90 // Don't give us a clickable cursor, or take mouse events.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
91 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
92 map: googlemap,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
93 bounds: new google.maps.LatLngBounds(selection_start,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
94 selection_start)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
95 });
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 a selection preview event handler that should happen
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
98 // when we mouse over the map or the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
99 var preview = function(event) {
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 // Store the end of the selection (provisionally)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
102 var selection_end = event.latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
103
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 if(selection_end.lng() < selection_start.lng()) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
106 // The user has selected a backwards rectangle, which wraps
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
107 // across the place where the globe is cut. None of our
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
108 // selections ever need to do this.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
109
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
110 // Make the rectangle backwards
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
111 rectangle.setBounds(new google.maps.LatLngBounds(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
112 selection_end, selection_start));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
113
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
114 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
115 // Make the rectangle forwards
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
116 rectangle.setBounds(new google.maps.LatLngBounds(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
117 selection_start, selection_end));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
118 }
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 // This holds a cleanup function to get rid of the rectangle when
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
122 // the resizing listener goes away.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
123 var preview_cleanup = function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
124 // Remove the rectangle
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
125 rectangle.setMap(undefined);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
126
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
127 // Remove the crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
128 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
129 draggableCursor: undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
130 });
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 // Add a mouse move listener for interactivity
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
134 // Works over the map, hexes, or the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
135 var move_handle = add_tool_listener("mousemove", preview,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
136 preview_cleanup);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
137
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
138 // We need a listener to finish the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
139 var finish = function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
140 // Don't trigger again
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
141 remove_tool_listener(stop_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
142
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
143 // Also stop the dynamic updates. This removes the rectangle.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
144 remove_tool_listener(move_handle);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
145
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
146 // Store the end of the selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
147 var selection_end = event.latLng;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
148
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
149 print("Selection ended at " + selection_end);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
150
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
151 // Select the rectangle by arbitrary corners.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
152 select_rectangle(selection_start, selection_end);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
153 };
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 // Attach the listener.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
156 // The listener can still use its own handle because variable
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
157 // references are resolved at runtime.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
158 var stop_handle = add_tool_listener("click", finish, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
159 // Cleanup: say this tool is no longer selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
160 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
161 });
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 }, function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
164 // Remove the crosshair cursor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
165 googlemap.setOptions({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
166 draggableCursor: undefined
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
167 });
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 // A tool for importing a list of hexes as a selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
173 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
174 add_tool("import", "Import...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
175 // Make the import form
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
176 var import_form = $("<form/>").attr("title",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
177 "Import List As Selection");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
178
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
179 import_form.append($("<div/>").text("Input names, one per line:"));
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 // A big text box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
182 var text_area = $("<textarea/>").addClass("import");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
183 import_form.append(text_area);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
184
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
185 import_form.append($("<div/>").text(
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
186 "Open a file:"));
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 // This holds a file form element
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
189 var file_picker = $("<input/>").attr("type", "file").addClass("import");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
190
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
191 import_form.append(file_picker);
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 file_picker.change(function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
194 // 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
195
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
196 // What file do we really want to read?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
197 var file = event.target.files[0];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
198
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
199 // Make a FileReader to read the file
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
200 var reader = new FileReader();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
201
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
202 reader.onload = function(read_event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
203 // When we read with readAsText, we get a string. Just stuff it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
204 // in the text box for the user to see.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
205 text_area.text(reader.result);
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
208 // 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
209 reader.readAsText(file);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
210 });
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 import_form.dialog({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
213 modal: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
214 buttons: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
215 "Import": function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
216 // Do the import of the data. The data in question is always
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
217 // in the textbox.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
218
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
219 // Select all the entered hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
220 select_string(text_area.val());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
221
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
222 // Finally, close the dialog
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
223 $(this).dialog("close");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
224
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
225 // Done with the tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
226 selected_tool = undefined;
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 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
229 close: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
230 // They didn't want to use this tool.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
231 selected_tool = undefined;
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 });
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 // The actual text to selection import function used by that tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
238 function select_string(string) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
239 // 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
240 // hexes.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
241
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
242 // This is an array of signature names entered.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
243 var to_select = [];
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 // This holds the array of lines. Split on newlines (as seen in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
246 // jQuery.tsv.js)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
247 var lines = string.split(/\r?\n/);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
248
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
249 for(var i = 0; i < lines.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
250 // Trim and add to our requested selection
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
251 to_select.push(lines[i].trim());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
252 }
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 // 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
255 // pass the current filters.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
256 select_list(to_select);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
257 }
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 // And a tool for exporting selections as lists of hexes
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
260 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
261 add_tool("export", "Export...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
262 // Make the export form
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
263 var export_form = $("<form/>").attr("title",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
264 "Export Selection As List");
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 export_form.append($("<div/>").text("Select a selection to export:"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
267
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
268 // Make a select box for picking from all selections.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
269 var select_box = $("<select/>");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
270
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
271 // Populate it with all existing selections
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
272 for(var layer_name in layers) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
273 if(layers[layer_name].selection) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
274 // This is a selection, so add it to the dropdown.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
275 select_box.append($("<option/>").text(layer_name).attr("value",
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
276 layer_name));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
277 }
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 export_form.append(select_box);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
281
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
282 export_form.append($("<div/>").text("Exported data:"));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
283
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
284 // A big text box
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
285 var text_area = $("<textarea/>").addClass("export");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
286 text_area.prop("readonly", true);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
287 export_form.append(text_area);
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 // Add a download as file link. The "download" attribute makes the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
290 // browser save it, and the href data URI holds the data.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
291 var download_link = $("<a/>").attr("download", "selection.txt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
292 download_link.attr("href", "data:text/plain;base64,");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
293 download_link.text("Download As Text");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
294
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
295 export_form.append(download_link);
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 text_area.focus(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
298 // Select all on focus.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
299
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
300 $(this).select();
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 text_area.mouseup(function(event) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
304 // Don't change selection on mouseup. See
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
305 // http://stackoverflow.com/a/5797700/402891 and
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
306 // http://stackoverflow.com/q/3380458/402891
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
307 event.preventDefault();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
308 });
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 select_box.change(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
311 // Update the text area with the list of hexes in the selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
312 // layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
313
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
314 // Get the layer name.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
315 var layer_name = select_box.val();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
316 if(!have_layer(layer_name)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
317 // Not a real layer.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
318 // Probably just an empty select or something
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
319 return;
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
322 // 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
323 // with one .text() call when adding it to the page.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
324 var exported = "";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
325
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
326 // Get the layer data to export
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
327 var layer_data = layers[layer_name].data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
328 for(var signature in layer_data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
329 if(layer_data[signature]) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
330 // It's selected, put it in
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
331
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
332 if(exported != "") {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
333 // If there's already text, put a newline first.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
334 exported += "\n";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
335 }
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 exported += signature;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
338 }
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 // Now we know all the signatures from the selection, so tell the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
342 // page.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
343 text_area.text(exported);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
344
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
345 // Also fill in the data URI for saving. We use the handy
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
346 // window.bota encoding function.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
347 download_link.attr("href", "data:text/plain;base64," +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
348 window.btoa(exported));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
349 });
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 // Trigger the change event on the select box for the first selected
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
352 // thing, if any.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
353 select_box.change();
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 export_form.dialog({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
356 modal: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
357 buttons: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
358 "Done": function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
359 // First, close the dialog
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
360 $(this).dialog("close");
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 // Done with the tool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
363 selected_tool = undefined;
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 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
366 close: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
367 // They didn't want to use this tool.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
368 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
369 }
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
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
374 $(function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
375 // Set up the link to this page control
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
376 add_tool("link-to-page", "Link to this Page...", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
377
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
378 // We will provide the user with an alert box with the link to the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
379 // hexagrap visualization map.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
380
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
381 var link = (window.location.protocol + "//" + window.location.host
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
382 + "/" + window.location.pathname);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
383
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
384 alert(link);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
385 selected_tool = undefined;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
386
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
387 });
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