More search improvements - a "Where am I?" link that does a reverse
[rails.git] / app / views / site / _search.rhtml
index 2b2fc6e31b49b76ea76eb5bdbde8db0bf1ed3c7d..14f8fa5f60714f155ec6bc3fb56d452e93b2a0ba 100644 (file)
@@ -1,28 +1,3 @@
-<% content_for "optionals" do %>
-  <div class="optionalbox">
-    <span class="oboxheader">Search</span>
-    <% form_remote_tag(:update => :search_results_content, 
-                       :loading => "openSearchResults()",
-                       :url => { :controller => :geocoder, :action => :search } ) do %>
-      <%= text_field_tag :query, nil, :size => 16 %>
-    <% end %>
-  </div>
-  <script type="text/javascript">
-  <!--
-    function openSearchResults() {
-      $("search_results").style.display = "block";
-      $("search_results_content").innerHTML = "<p class='search_results_entry'>Searching...</p>";
-      <%= onopen %>
-    }
-
-    function closeSearchResults() {
-      $("search_results").style.display = "none";
-      <%= onclose %>
-    }
-  // -->
-  </script>
-<% end %>
-
 <div id="search_results">
   <table class="search_results_title" width="100%">
     <tr>
@@ -33,3 +8,65 @@
   <div id="search_results_content">
   </div>
 </div>
+
+<script type="text/javascript">
+<!--
+  function startSearch() {
+    $("search_results_content").innerHTML = "<p class='search_results_entry'>Searching...</p>";
+    $("search_field").style.display = "none";
+    $("search_active").style.display = "inline";
+  }
+
+  function endSearch() {
+    $("search_field").style.display = "inline";
+    $("search_active").style.display = "none";
+  }
+
+  function openSearchResults() {
+    $("search_results").style.display = "block";
+    <%= onopen %>
+  }
+
+  function closeSearchResults() {
+    $("search_results").style.display = "none";
+    <%= onclose %>
+  }
+
+  function describeLocation() {
+    var position = getPosition();
+
+    <%= remote_function(:loading => "startSearch()",
+                        :complete => "endSearch()",
+                        :url => { :controller => :geocoder, :action => :description },
+                        :with => "'lat=' + position.lat + '&lon=' + position.lon") %>
+  }
+
+  <% if params[:query] %>
+  <%= remote_function(:loading => "startSearch()",
+                      :complete => "endSearch()",
+                      :url => { :controller => :geocoder, :action => :search, :query => params[:query] }) %>
+  <% end %>
+// -->
+</script>
+
+<% content_for "optionals" do %>
+  <div class="optionalbox">
+    <span class="oboxheader">Search</span>
+    <span class="whereami"><a href="javascript:describeLocation()">Where am I?</a></span>
+    <div class="search_form">
+    <span id="search_field">
+    <% form_remote_tag(:loading => "startSearch()",
+                       :complete => "endSearch()",
+                       :url => { :controller => :geocoder, :action => :search }) do %>
+      <%= text_field_tag :query, params[:query] %>
+    <% end %>
+    </span>
+    <p id="search_active">Searching...</p>
+    </div>
+    <p class="search_help">
+      examples: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ',
+      or 'post offices near L√ľnen'
+      <a href="http://wiki.openstreetmap.org/index.php/Search_Help">more examples...</a>
+    </p>
+  </div>
+<% end %>