Select which key entries to show on the client
Rather than requesting a new key every time the zoom or layer changes, serve up all the entries initially with appropriate annotations to allow the client to decide which ones to show.
This commit is contained in:
parent
51f5984c1c
commit
815c98c977
4 changed files with 27 additions and 19 deletions
|
@ -4,13 +4,25 @@ $(document).ready(function () {
|
|||
title = $(this).text();
|
||||
|
||||
function updateMapKey() {
|
||||
$("#sidebar_content").load(url, {
|
||||
layer: map.baseLayer.keyid,
|
||||
zoom: map.getZoom()
|
||||
var mapLayer = map.baseLayer.keyid,
|
||||
mapZoom = map.getZoom();
|
||||
|
||||
$(".mapkey-table-entry").each(function () {
|
||||
var entryLayer = $(this).attr("data-layer"),
|
||||
entryZoomMin = parseInt($(this).attr("data-zoom-min")),
|
||||
entryZoomMax = parseInt($(this).attr("data-zoom-max"));
|
||||
|
||||
if (mapLayer == entryLayer &&
|
||||
mapZoom >= entryZoomMin && mapZoom <= entryZoomMax) {
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateMapKey();
|
||||
$("#sidebar_content").load(url, updateMapKey);
|
||||
|
||||
openSidebar({ title: title });
|
||||
|
||||
$("#sidebar").one("closed", function () {
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
<div id="mapkey">
|
||||
<table class="mapkey-table">
|
||||
<% YAML.load_file("#{Rails.root}/config/key.yml").each do |name,data| %>
|
||||
<% if params[:layer] == name %>
|
||||
<% data.each do |entry| %>
|
||||
<% if params[:zoom].to_i >= entry['min_zoom'] && params[:zoom].to_i <= entry['max_zoom'] %>
|
||||
<tr>
|
||||
<td class="mapkey-table-key">
|
||||
<%= image_tag "key/#{name}/#{entry['image']}" %>
|
||||
</td>
|
||||
<td class="mapkey-table-value">
|
||||
<%= [*t("site.key.table.entry.#{entry['name']}")].to_sentence %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% data.each do |entry| %>
|
||||
<tr class="mapkey-table-entry" data-layer="<%= name %>" data-zoom-min="<%= entry['min_zoom'] %>" data-zoom-max="<%= entry['max_zoom'] %>">
|
||||
<td class="mapkey-table-key">
|
||||
<%= image_tag "key/#{name}/#{entry['image']}" %>
|
||||
</td>
|
||||
<td class="mapkey-table-value">
|
||||
<%= [*t("site.key.table.entry.#{entry['name']}")].to_sentence %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</table>
|
||||
|
|
|
@ -106,7 +106,7 @@ OpenStreetMap::Application.routes.draw do
|
|||
match '/login' => 'user#login', :via => [:get, :post]
|
||||
match '/logout' => 'user#logout', :via => [:get, :post]
|
||||
match '/offline' => 'site#offline', :via => :get
|
||||
match '/key' => 'site#key', :via => :post
|
||||
match '/key' => 'site#key', :via => :get
|
||||
match '/user/new' => 'user#new', :via => :get
|
||||
match '/user/terms' => 'user#terms', :via => [:get, :post]
|
||||
match '/user/save' => 'user#save', :via => :post
|
||||
|
|
|
@ -47,7 +47,7 @@ class SiteControllerTest < ActionController::TestCase
|
|||
{ :controller => "site", :action => "offline" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/key", :method => :post },
|
||||
{ :path => "/key", :method => :get },
|
||||
{ :controller => "site", :action => "key" }
|
||||
)
|
||||
assert_routing(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue