Resyncing from head 10895:11795
|
@ -10,10 +10,10 @@
|
|||
#
|
||||
# == General structure
|
||||
#
|
||||
# Apart from the talk method (which distributes the requests from the
|
||||
# AMF message), each method generally takes arguments in the order they were
|
||||
# sent by the Potlatch SWF. Do not assume typing has been preserved. Methods
|
||||
# all return an array to the SWF.
|
||||
# Apart from the amf_read and amf_write methods (which distribute the requests
|
||||
# from the AMF message), each method generally takes arguments in the order
|
||||
# they were sent by the Potlatch SWF. Do not assume typing has been preserved.
|
||||
# Methods all return an array to the SWF.
|
||||
#
|
||||
# == Debugging
|
||||
#
|
||||
|
@ -31,16 +31,15 @@ class AmfController < ApplicationController
|
|||
session :off
|
||||
before_filter :check_write_availability
|
||||
|
||||
# Main AMF handler: processes the raw AMF string (using AMF library) and
|
||||
# Main AMF handlers: process the raw AMF string (using AMF library) and
|
||||
# calls each action (private method) accordingly.
|
||||
# ** FIXME: refactor to reduce duplication of code across read/write
|
||||
|
||||
def talk
|
||||
req=StringIO.new(request.raw_post+0.chr) # Get POST data as request
|
||||
# (cf http://www.ruby-forum.com/topic/122163)
|
||||
req.read(2) # Skip version indicator and client ID
|
||||
results={} # Results of each body
|
||||
renumberednodes={} # Shared across repeated putways
|
||||
renumberedways={} # Shared across repeated putways
|
||||
def amf_read
|
||||
req=StringIO.new(request.raw_post+0.chr)# Get POST data as request
|
||||
# (cf http://www.ruby-forum.com/topic/122163)
|
||||
req.read(2) # Skip version indicator and client ID
|
||||
results={} # Results of each body
|
||||
|
||||
# Parse request
|
||||
|
||||
|
@ -69,6 +68,36 @@ class AmfController < ApplicationController
|
|||
when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1].to_i))
|
||||
when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args[0].to_i))
|
||||
when 'getnode_history'; results[index]=AMF.putdata(index,getnode_history(args[0].to_i))
|
||||
when 'findrelations'; results[index]=AMF.putdata(index,findrelations(*args))
|
||||
when 'getpoi'; results[index]=AMF.putdata(index,getpoi(*args))
|
||||
end
|
||||
end
|
||||
sendresponse(results)
|
||||
end
|
||||
|
||||
def amf_write
|
||||
req=StringIO.new(request.raw_post+0.chr)
|
||||
req.read(2)
|
||||
results={}
|
||||
renumberednodes={} # Shared across repeated putways
|
||||
renumberedways={} # Shared across repeated putways
|
||||
|
||||
headers=AMF.getint(req) # Read number of headers
|
||||
headers.times do # Read each header
|
||||
name=AMF.getstring(req) # |
|
||||
req.getc # | skip boolean
|
||||
value=AMF.getvalue(req) # |
|
||||
header["name"]=value # |
|
||||
end
|
||||
|
||||
bodies=AMF.getint(req) # Read number of bodies
|
||||
bodies.times do # Read each body
|
||||
message=AMF.getstring(req) # | get message name
|
||||
index=AMF.getstring(req) # | get index in response sequence
|
||||
bytes=AMF.getlong(req) # | get total size in bytes
|
||||
args=AMF.getvalue(req) # | get response (probably an array)
|
||||
|
||||
case message
|
||||
when 'putway'; r=putway(renumberednodes,*args)
|
||||
renumberednodes=r[3]
|
||||
if r[1] != r[2]
|
||||
|
@ -76,22 +105,11 @@ class AmfController < ApplicationController
|
|||
end
|
||||
results[index]=AMF.putdata(index,r)
|
||||
when 'putrelation'; results[index]=AMF.putdata(index,putrelation(renumberednodes, renumberedways, *args))
|
||||
when 'findrelations'; results[index]=AMF.putdata(index,findrelations(*args))
|
||||
when 'deleteway'; results[index]=AMF.putdata(index,deleteway(args[0],args[1].to_i))
|
||||
when 'putpoi'; results[index]=AMF.putdata(index,putpoi(*args))
|
||||
when 'getpoi'; results[index]=AMF.putdata(index,getpoi(*args))
|
||||
end
|
||||
end
|
||||
|
||||
# Write out response
|
||||
|
||||
a,b=results.length.divmod(256)
|
||||
render :content_type => "application/x-amf", :text => proc { |response, output|
|
||||
output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
|
||||
results.each do |k,v|
|
||||
output.write(v)
|
||||
end
|
||||
}
|
||||
sendresponse(results)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -159,7 +177,9 @@ class AmfController < ApplicationController
|
|||
# way includes a node more than once
|
||||
way = Way.find(wayid)
|
||||
points = way.nodes.collect do |node|
|
||||
[node.lon, node.lat, node.id, nil, node.tags_as_hash]
|
||||
nodetags=node.tags_as_hash
|
||||
nodetags.delete('created_by')
|
||||
[node.lon, node.lat, node.id, nodetags]
|
||||
end
|
||||
tags = way.tags
|
||||
end
|
||||
|
@ -273,11 +293,10 @@ class AmfController < ApplicationController
|
|||
if mid < 0
|
||||
mid = renumberednodes[mid] if m[0] == 'node'
|
||||
mid = renumberedways[mid] if m[0] == 'way'
|
||||
if mid < 0
|
||||
return -2, "Negative ID unresolved"
|
||||
end
|
||||
end
|
||||
typedmembers << [m[0], mid, m[2]]
|
||||
if mid
|
||||
typedmembers << [m[0], mid, m[2]]
|
||||
end
|
||||
end
|
||||
|
||||
# assign new contents
|
||||
|
@ -352,8 +371,10 @@ class AmfController < ApplicationController
|
|||
savenode = true
|
||||
else
|
||||
node = Node.find(id)
|
||||
nodetags=node.tags_as_hash
|
||||
nodetags.delete('created_by')
|
||||
if !fpcomp(lat, node.lat) or !fpcomp(lon, node.lon) or
|
||||
Tags.join(n[4]) != node.tags or !node.visible?
|
||||
n[4] != nodetags or !node.visible?
|
||||
savenode = true
|
||||
end
|
||||
end
|
||||
|
@ -466,6 +487,7 @@ class AmfController < ApplicationController
|
|||
way.unshared_node_ids.each do |n|
|
||||
deleteitemrelations(n, 'node')
|
||||
end
|
||||
deleteitemrelations(way_id, 'way')
|
||||
|
||||
way.delete_with_relations_and_nodes_and_history(user)
|
||||
|
||||
|
@ -519,6 +541,18 @@ class AmfController < ApplicationController
|
|||
return ((a/0.0000001).round==(b/0.0000001).round)
|
||||
end
|
||||
|
||||
# Send AMF response
|
||||
|
||||
def sendresponse(results)
|
||||
a,b=results.length.divmod(256)
|
||||
render :content_type => "application/x-amf", :text => proc { |response, output|
|
||||
output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
|
||||
results.each do |k,v|
|
||||
output.write(v)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
# ====================================================================
|
||||
# Alternative SQL queries for getway/whichways
|
||||
|
@ -582,7 +616,9 @@ class AmfController < ApplicationController
|
|||
ORDER BY sequence_id
|
||||
EOF
|
||||
ActiveRecord::Base.connection.select_all(sql).each do |row|
|
||||
points << [row['lon'].to_f,row['lat'].to_f,row['id'].to_i,nil,tagstring_to_hash(row['tags'])]
|
||||
nodetags=tagstring_to_hash(row['tags'])
|
||||
nodetags.delete('created_by')
|
||||
points << [row['lon'].to_f,row['lat'].to_f,row['id'].to_i,nodetags]
|
||||
end
|
||||
points
|
||||
end
|
||||
|
|
|
@ -69,7 +69,8 @@ class DiaryEntryController < ApplicationController
|
|||
end
|
||||
else
|
||||
@title = "Users' diaries"
|
||||
@entry_pages, @entries = paginate(:diary_entries,
|
||||
@entry_pages, @entries = paginate(:diary_entries, :include => :user,
|
||||
:conditions => "users.visible = 1",
|
||||
:order => 'created_at DESC',
|
||||
:per_page => 20)
|
||||
end
|
||||
|
@ -90,7 +91,9 @@ class DiaryEntryController < ApplicationController
|
|||
render :nothing => true, :status => :not_found
|
||||
end
|
||||
else
|
||||
@entries = DiaryEntry.find(:all, :order => 'created_at DESC', :limit => 20)
|
||||
@entries = DiaryEntry.find(:all, :include => :user,
|
||||
:conditions => "users.visible = 1",
|
||||
:order => 'created_at DESC', :limit => 20)
|
||||
@title = "OpenStreetMap diary entries"
|
||||
@description = "Recent diary entries from users of OpenStreetMap"
|
||||
@link = "http://www.openstreetmap.org/diary"
|
||||
|
|
|
@ -102,7 +102,7 @@ private
|
|||
response = fetch_xml("http://geocoder.ca/?geoit=XML&postal=#{escape_query(query)}")
|
||||
|
||||
# parse the response
|
||||
unless response.get_elements("geodata/error")
|
||||
if response.get_elements("geodata/error").empty?
|
||||
results.push({:lat => response.get_text("geodata/latt").to_s,
|
||||
:lon => response.get_text("geodata/longt").to_s,
|
||||
:zoom => POSTCODE_ZOOM,
|
||||
|
|
|
@ -16,6 +16,7 @@ class UserController < ApplicationController
|
|||
@user.visible = true
|
||||
@user.data_public = true
|
||||
@user.description = "" if @user.description.nil?
|
||||
@user.creation_ip = request.remote_ip
|
||||
|
||||
if @user.save
|
||||
flash[:notice] = "User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)<br>Please note that you won't be able to login until you've received and confirmed your email address."
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
class DiaryEntry < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
has_many :diary_comments, :order => "id"
|
||||
has_many :diary_comments, :include => :user,
|
||||
:conditions => "users.visible = 1",
|
||||
:order => "diary_comments.id"
|
||||
|
||||
validates_presence_of :title, :body
|
||||
validates_length_of :title, :within => 1..255
|
||||
|
|
|
@ -15,6 +15,8 @@ page << <<EOJ
|
|||
OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
|
||||
|
||||
function startBrowse() {
|
||||
browseActive = true;
|
||||
|
||||
openSidebar({ onclose: stopBrowse });
|
||||
|
||||
var vectors = new OpenLayers.Layer.Vector();
|
||||
|
@ -32,8 +34,6 @@ page << <<EOJ
|
|||
|
||||
map.events.register("moveend", map, showData);
|
||||
map.events.triggerEvent("moveend");
|
||||
|
||||
browseActive = true;
|
||||
}
|
||||
|
||||
function showData() {
|
||||
|
@ -153,7 +153,7 @@ page << <<EOJ
|
|||
return false;
|
||||
}
|
||||
|
||||
function customDataLoader(request) {
|
||||
function customDataLoader(request) {
|
||||
if (browseActive) {
|
||||
var doc = request.responseXML;
|
||||
|
||||
|
@ -223,8 +223,8 @@ page << <<EOJ
|
|||
map.addLayer(browseDataLayer);
|
||||
|
||||
browseSelectControl = new OpenLayers.Control.SelectFeature(browseDataLayer, { onSelect: onFeatureSelect });
|
||||
browseSelectControl.handler.stopDown = false;
|
||||
browseSelectControl.handler.stopUp = false;
|
||||
browseSelectControl.handlers.feature.stopDown = false;
|
||||
browseSelectControl.handlers.feature.stopUp = false;
|
||||
map.addControl(browseSelectControl);
|
||||
browseSelectControl.activate();
|
||||
} else {
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<%= javascript_include_tag 'swfobject.js' %>
|
||||
<script type="text/javascript" defer="defer">
|
||||
var brokenContentSize = $("content").offsetWidth == 0;
|
||||
var fo = new SWFObject("<%= compute_public_path("potlatch.swf", "potlatch") %>", "potlatch", "100%", "100%", "6", "#FFFFFF");
|
||||
var fo = new SWFObject("/potlatch/potlatch.swf?d="+Math.round(Math.random()*1000), "potlatch", "100%", "100%", "6", "#FFFFFF");
|
||||
// 700,600 for fixed size, 100%,100% for resizable
|
||||
var changesaved=true;
|
||||
var winie=false; if (document.all && window.print) { winie=true; }
|
||||
|
|
10
config/initializers/query_cache.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
module QueryCache
|
||||
private
|
||||
def cache_sql(sql)
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -29,14 +29,11 @@ server.errorlog = "/var/log/lighttpd/error.log"
|
|||
#
|
||||
# Allow munin to monitor the server's status
|
||||
#
|
||||
$HTTP["remoteip"] == "127.0.0.1" { status.status-url = "/server-status" }
|
||||
|
||||
#
|
||||
# Fail any attempt to access old versions of the API without
|
||||
# getting rails involved at all
|
||||
#
|
||||
$HTTP["url"] =~ "^/api/0.3/" { url.access-deny = ("") }
|
||||
$HTTP["url"] =~ "^/api/0.4/" { url.access-deny = ("") }
|
||||
$HTTP["remoteip"] == "127.0.0.1" {
|
||||
status.config-url = "/server-config"
|
||||
status.status-url = "/server-status"
|
||||
status.statistics-url = "/server-statistics"
|
||||
}
|
||||
|
||||
#
|
||||
# IP blocked at SteveC's request as it was trying to download the
|
||||
|
@ -65,9 +62,17 @@ mimetype.assign = (
|
|||
".js" => "application/x-javascript",
|
||||
".png" => "image/png",
|
||||
".swf" => "application/x-shockwave-flash",
|
||||
".txt" => "text/plain"
|
||||
".txt" => "text/plain",
|
||||
".xml" => "text/xml"
|
||||
)
|
||||
|
||||
#
|
||||
# Force special MIME type for crossdomain.xml files
|
||||
#
|
||||
$HTTP["url"] =~ "/crossdomain\.xml$" {
|
||||
mimetype.assign = ( ".xml" => "text/x-cross-domain-policy" )
|
||||
}
|
||||
|
||||
#
|
||||
# Enable compression of appropriate static content
|
||||
#
|
||||
|
@ -111,29 +116,103 @@ cgi.assign = ( ".pl" => "/usr/bin/perl" )
|
|||
#
|
||||
# Serve static content from the rails public area ourselves
|
||||
#
|
||||
server.document-root = "/var/www/rails/public"
|
||||
server.document-root = "/home/rails/public"
|
||||
|
||||
#
|
||||
# Send everything else to the appropriate FastCGI server
|
||||
#
|
||||
server.error-handler-404 = "/dispatch.fcgi"
|
||||
$HTTP["url"] =~ "^/api/" { server.error-handler-404 = "/dispatch.api" }
|
||||
$HTTP["useragent"] == "tilesAtHome" {
|
||||
server.error-handler-404 = "/dispatch.tah"
|
||||
}
|
||||
else $HTTP["url"] =~ "^/api/0\.5/(map|trackpoints|amf|amf/read|swf/trackpoints)$" {
|
||||
server.error-handler-404 = "/dispatch.bulkapi"
|
||||
}
|
||||
else $HTTP["url"] =~ "^/api/0\.5/.*/search$" {
|
||||
server.error-handler-404 = "/dispatch.bulkapi"
|
||||
}
|
||||
else $HTTP["url"] =~ "^/api/0\.5/" {
|
||||
server.error-handler-404 = "/dispatch.api"
|
||||
}
|
||||
else $HTTP["url"] =~ "^/api/0\.[0-9]+/" {
|
||||
url.access-deny = ("")
|
||||
}
|
||||
else $HTTP["url"] =~ "^/" {
|
||||
server.error-handler-404 = "/dispatch.web"
|
||||
}
|
||||
|
||||
#
|
||||
# Configure the FastCGI servers
|
||||
#
|
||||
fastcgi.server = (
|
||||
".fcgi" => (
|
||||
".web" => (
|
||||
( "host" => "127.0.0.1", "port" => 8000, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8001, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8002, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8003, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8004, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8005, "check-local" => "disable" )
|
||||
),
|
||||
".api" => (
|
||||
( "host" => "127.0.0.1", "port" => 8005, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8006, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8007, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8008, "check-local" => "disable" )
|
||||
( "host" => "127.0.0.1", "port" => 8008, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8009, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8010, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8011, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8012, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8013, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8014, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8015, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8016, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8017, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8018, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8019, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8020, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8021, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8022, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8023, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8024, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8025, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8026, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8027, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8028, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8029, "check-local" => "disable" )
|
||||
),
|
||||
".api" => (
|
||||
( "host" => "127.0.0.1", "port" => 8030, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8031, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8032, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8033, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8034, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8035, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8036, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8037, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8038, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8039, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8040, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8041, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8042, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8043, "check-local" => "disable" ),
|
||||
( "host" => "127.0.0.1", "port" => 8044, "check-local" => "disable" )
|
||||
),
|
||||
".bulkapi" => (
|
||||
( "host" => "10.0.0.10", "port" => 8000, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8000, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8000, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.10", "port" => 8001, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8001, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8001, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.10", "port" => 8002, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8002, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8002, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.10", "port" => 8003, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8003, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8003, "check-local" => "disable" )
|
||||
),
|
||||
".tah" => (
|
||||
( "host" => "10.0.0.10", "port" => 8004, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8004, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8004, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.10", "port" => 8005, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.11", "port" => 8005, "check-local" => "disable" ),
|
||||
( "host" => "10.0.0.12", "port" => 8005, "check-local" => "disable" )
|
||||
)
|
||||
)
|
||||
|
|
|
@ -8,7 +8,7 @@ cycleway/way lane,track,opposite_lane,opposite_track,opposite
|
|||
waterway/way river,canal,stream,drain,dock,riverbank
|
||||
waterway/point lock_gate,lock,turning_point,aqueduct,boatyard,water_point,waste_disposal,mooring,weir
|
||||
waterway/POI boatyard,water_point,waste_disposal,mooring
|
||||
railway/way rail,tram,light_rail,subway,preserved,disused,abandoned,narrow_gauge,monorail
|
||||
railway/way rail,tram,light_rail,subway,preserved,disused,abandoned,narrow_gauge,monorail,platform
|
||||
railway/point station,halt,viaduct,crossing,level_crossing,subway_entrance
|
||||
railway/POI subway_entrance
|
||||
aeroway/way runway,taxiway,apron
|
||||
|
|
|
@ -62,7 +62,7 @@ winding hole: place=,waterway=turning_point
|
|||
mooring: place=,waterway=mooring
|
||||
|
||||
point/railway
|
||||
station: place=,railway=station
|
||||
station: place=,railway=station,name=(type name here)
|
||||
viaduct: place=,railway=viaduct
|
||||
level crossing: place=,railway=crossing
|
||||
|
||||
|
|
|
@ -63,7 +63,8 @@ ActionController::Routing::Routes.draw do |map|
|
|||
|
||||
# Potlatch API
|
||||
|
||||
map.connect "api/#{API_VERSION}/amf", :controller =>'amf', :action =>'talk'
|
||||
map.connect "api/#{API_VERSION}/amf/read", :controller =>'amf', :action =>'amf_read'
|
||||
map.connect "api/#{API_VERSION}/amf/write", :controller =>'amf', :action =>'amf_write'
|
||||
map.connect "api/#{API_VERSION}/amf", :controller =>'amf', :action =>'talk'
|
||||
map.connect "api/#{API_VERSION}/swf/trackpoints", :controller =>'swf', :action =>'trackpoints'
|
||||
|
||||
|
|
9
db/migrate/016_add_creation_ip.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
class AddCreationIp < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column "users", "creation_ip", :string
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column "users", "creation_ip"
|
||||
end
|
||||
end
|
|
@ -7,9 +7,9 @@
|
|||
static void exit_mysql_err(MYSQL *mysql) {
|
||||
const char *err = mysql_error(mysql);
|
||||
if (err) {
|
||||
fprintf(stderr, "017_populate_node_tags_and_remove_helper: MySQL error: %s\n", err);
|
||||
fprintf(stderr, "018_populate_node_tags_and_remove_helper: MySQL error: %s\n", err);
|
||||
} else {
|
||||
fprintf(stderr, "017_populate_node_tags_and_remove_helper: MySQL error\n");
|
||||
fprintf(stderr, "018_populate_node_tags_and_remove_helper: MySQL error\n");
|
||||
}
|
||||
abort();
|
||||
exit(EXIT_FAILURE);
|
||||
|
@ -192,7 +192,7 @@ int main(int argc, char **argv) {
|
|||
struct data data, *d = &data;
|
||||
|
||||
if (argc != 8) {
|
||||
printf("Usage: 017_populate_node_tags_and_remove_helper host user passwd database port socket prefix\n");
|
||||
printf("Usage: 018_populate_node_tags_and_remove_helper host user passwd database port socket prefix\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
10
public/api/crossdomain.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
|
||||
|
||||
<cross-domain-policy>
|
||||
<allow-access-from domain="*"/>
|
||||
<allow-http-request-headers-from domain="*" headers="Authorization"/>
|
||||
<allow-http-request-headers-from domain="*.openstreetmap.org" headers="*"/>
|
||||
<allow-http-request-headers-from domain="*.openstreetmap.net" headers="*"/>
|
||||
<allow-http-request-headers-from domain="*.openstreetmap.com" headers="*"/>
|
||||
</cross-domain-policy>
|
6
public/crossdomain.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
|
||||
|
||||
<cross-domain-policy>
|
||||
<site-control permitted-cross-domain-policies="by-content-type"/>
|
||||
</cross-domain-policy>
|
|
@ -32,7 +32,8 @@ function createMap(divName, options) {
|
|||
],
|
||||
units: "m",
|
||||
maxResolution: 156543.0339,
|
||||
numZoomLevels: 20
|
||||
numZoomLevels: 20,
|
||||
displayProjection: new OpenLayers.Projection("EPSG:4326")
|
||||
});
|
||||
|
||||
var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {
|
||||
|
@ -133,6 +134,8 @@ function getMapCenter(center, zoom) {
|
|||
}
|
||||
|
||||
function setMapCenter(center, zoom) {
|
||||
var numzoom = map.getNumZoomLevels();
|
||||
if (zoom >= numzoom) zoom = numzoom - 1;
|
||||
map.setCenter(center.clone().transform(epsg4326, map.getProjectionObject()), zoom);
|
||||
}
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
|||
"http://b.andy.sandbox.cloudmade.com/tiles/cycle/",
|
||||
"http://c.andy.sandbox.cloudmade.com/tiles/cycle/"
|
||||
];
|
||||
options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options);
|
||||
options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
|
||||
var newArguments = [name, url, options];
|
||||
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
||||
},
|
||||
|
|
7
public/openlayers/theme/default/ie6-style.css
Executable file
|
@ -0,0 +1,7 @@
|
|||
.olControlZoomPanel div {
|
||||
background-image: url(img/zoom-panel-NOALPHA.png);
|
||||
}
|
||||
.olControlPanPanel div {
|
||||
background-image: url(img/pan-panel-NOALPHA.png);
|
||||
}
|
||||
|
BIN
public/openlayers/theme/default/img/navigation_history.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
public/openlayers/theme/default/img/pan-panel-NOALPHA.png
Normal file
After Width: | Height: | Size: 566 B |
BIN
public/openlayers/theme/default/img/pan-panel.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
public/openlayers/theme/default/img/save_features_off.png
Normal file
After Width: | Height: | Size: 357 B |
BIN
public/openlayers/theme/default/img/save_features_on.png
Normal file
After Width: | Height: | Size: 364 B |
BIN
public/openlayers/theme/default/img/zoom-panel-NOALPHA.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/openlayers/theme/default/img/zoom-panel.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
|
@ -1,5 +1,15 @@
|
|||
div.olMap {
|
||||
z-index: 0;
|
||||
padding: 0px!important;
|
||||
margin: 0px!important;
|
||||
}
|
||||
|
||||
div.olMapViewport {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.olLayerDiv {
|
||||
-moz-user-select: none
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
.olLayerGoogleCopyright {
|
||||
|
@ -128,29 +138,24 @@ div.olControlMousePosition {
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.olControlNavigationHistoryPreviousItemActive {
|
||||
background-image: url("img/view_previous_on.png");
|
||||
.olControlNavigationHistory {
|
||||
background-image: url("img/navigation_history.png");
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
|
||||
}
|
||||
.olControlNavigationHistoryPreviousItemActive {
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
.olControlNavigationHistoryPreviousItemInactive {
|
||||
background-image: url("img/view_previous_off.png");
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-position: 0px -24px;
|
||||
}
|
||||
.olControlNavigationHistoryNextItemActive {
|
||||
background-image: url("img/view_next_on.png");
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-position: -24px 0px;
|
||||
}
|
||||
.olControlNavigationHistoryNextItemInactive {
|
||||
background-image: url("img/view_next_off.png");
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-position: -24px -24px;
|
||||
}
|
||||
|
||||
.olControlNavToolbar .olControlNavigationItemActive {
|
||||
|
@ -177,51 +182,47 @@ div.olControlMousePosition {
|
|||
width: 200px;
|
||||
}
|
||||
.olControlEditingToolbar div {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
float:right;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 5px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlNavigationItemActive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -103px -23px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlNavigationItemInactive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -103px -0px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePointItemActive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -77px -23px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePointItemInactive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -77px -0px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePathItemInactive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -51px 0px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePathItemActive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -51px -23px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -26px 0px;
|
||||
}
|
||||
.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive {
|
||||
background-image: url("img/editing_tool_bar.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -26px -23px ;
|
||||
}
|
||||
.olControlSaveFeaturesItemActive {
|
||||
background-image: url(img/save_features_on.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0px 1px;
|
||||
}
|
||||
.olControlSaveFeaturesItemInactive {
|
||||
background-image: url(img/save_features_off.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0px 1px;
|
||||
}
|
||||
|
||||
.olHandlerBoxZoomBox {
|
||||
border: 2px solid red;
|
||||
|
@ -230,12 +231,82 @@ div.olControlMousePosition {
|
|||
opacity: 0.50;
|
||||
font-size: 1px;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
.olHandlerBoxSelectFeature {
|
||||
border: 2px solid blue;
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
opacity: 0.50;
|
||||
font-size: 1px;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
|
||||
/*
|
||||
* Due to current limitations in the OpenLayers code, you can only
|
||||
* replace this image with another image which is 17px x 17px.
|
||||
*/
|
||||
.olControlPanPanel {
|
||||
top: 10px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.olControlPanPanel div {
|
||||
background-image: url(img/pan-panel.png);
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.olControlPanPanel .olControlPanNorthItemInactive {
|
||||
top: 0px;
|
||||
left: 9px;
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
.olControlPanPanel .olControlPanSouthItemInactive {
|
||||
top: 36px;
|
||||
left: 9px;
|
||||
background-position: 18px 0px;
|
||||
}
|
||||
.olControlPanPanel .olControlPanWestItemInactive {
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
left: 0px;
|
||||
background-position: 0px 18px;
|
||||
}
|
||||
.olControlPanPanel .olControlPanEastItemInactive {
|
||||
top: 18px;
|
||||
left: 18px;
|
||||
background-position: 18px 18px;
|
||||
}
|
||||
|
||||
.olControlZoomPanel {
|
||||
top: 71px;
|
||||
left: 14px;
|
||||
}
|
||||
|
||||
.olControlZoomPanel div {
|
||||
background-image: url(img/zoom-panel.png);
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.olControlZoomPanel .olControlZoomInItemInactive {
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
|
||||
.olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
|
||||
top: 18px;
|
||||
left: 0px;
|
||||
background-position: 0px -18px;
|
||||
}
|
||||
|
||||
.olControlZoomPanel .olControlZoomOutItemInactive {
|
||||
top: 36px;
|
||||
left: 0px;
|
||||
background-position: 0px 18px;
|
||||
}
|
||||
|
||||
.olPopupCloseBox {
|
||||
background: url("img/close.gif") no-repeat;
|
||||
cursor: pointer;
|
||||
|
|
|
@ -1,2 +1,5 @@
|
|||
User-agent: *
|
||||
Disallow: /api/
|
||||
Disallow: /trace/
|
||||
Disallow: /edit
|
||||
Disallow: /login
|
|
@ -1,21 +1,9 @@
|
|||
a {
|
||||
color: #0000ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:visited {
|
||||
color: #0000ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:active {
|
||||
color: #0000ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:link {
|
||||
color: #0000ff;
|
||||
a, a:visited, a:active, a:link, a:hover {
|
||||
color: #00f;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #0000ff;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
@ -33,9 +21,10 @@ a:hover {
|
|||
|
||||
body {
|
||||
font-family: Arial,sans-serif;
|
||||
color: Black;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#left {
|
||||
|
@ -50,17 +39,17 @@ body {
|
|||
padding: 10px;
|
||||
margin: 10px;
|
||||
height: 150px;
|
||||
background: #ffffff;
|
||||
border: 1px solid #ccccdd;
|
||||
background: #fff;
|
||||
border: 1px solid #ccd;
|
||||
}
|
||||
#logo h1 {
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
margin: 0px;
|
||||
}
|
||||
#logo h2 {
|
||||
font-size: 10px;
|
||||
margin: 0;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
#greeting {
|
||||
|
@ -115,47 +104,32 @@ body {
|
|||
.left_menu h1 {
|
||||
font-style: normal;
|
||||
font-size: 15px;
|
||||
padding: 0 0 0 1em;
|
||||
padding: 0em 0em 0em 1em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.left_menu ul {
|
||||
/*list-style: none;*/
|
||||
padding-left: 10px;
|
||||
margin: 0;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.left_menu li {
|
||||
margin:0;
|
||||
padding:0;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.left_menu img {
|
||||
margin: 2px 8px 0 0;
|
||||
margin: 2px 8px 0px 0px;
|
||||
}
|
||||
|
||||
.left_menu a {
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.left_menu a:visited {
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.left_menu a:active {
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.left_menu a:link {
|
||||
color: #000000;
|
||||
.left_menu a, .left_menu a:visited, .left_menu a:active, .left_menu a:link, .left_menu a:hover {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.left_menu a:hover {
|
||||
color: #000000;
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
@ -165,8 +139,8 @@ body {
|
|||
|
||||
|
||||
#content {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
position: absolute;
|
||||
left: 192px;
|
||||
right: 10px;
|
||||
|
@ -201,7 +175,7 @@ body {
|
|||
font-size: small;
|
||||
text-align: left;
|
||||
border-collapse: collapse;
|
||||
border-width: 0;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
#keyvalue.th {
|
||||
|
@ -214,46 +188,46 @@ body {
|
|||
|
||||
|
||||
#header {
|
||||
float:left;
|
||||
width:100%;
|
||||
background:#DAE0D2 url("bg.gif") repeat-x bottom;
|
||||
font-size:93%;
|
||||
line-height:normal;
|
||||
float: left;
|
||||
width: 100%;
|
||||
background: #DAE0D2 url("bg.gif") repeat-x bottom;
|
||||
font-size: 93%;
|
||||
line-height: normal;
|
||||
}
|
||||
#header ul {
|
||||
margin:0;
|
||||
padding:10px 10px 0px 215px;
|
||||
list-style:none;
|
||||
margin: 0px;
|
||||
padding: 10px 10px 0px 215px;
|
||||
list-style: none;
|
||||
}
|
||||
#header li {
|
||||
float:left;
|
||||
float: left;
|
||||
/*background:url("left.gif") no-repeat left top;*/
|
||||
margin:0;
|
||||
padding:0 0 0 9px;
|
||||
margin: 0px;
|
||||
padding: 0px 0px 0px 9px;
|
||||
}
|
||||
#header li a {
|
||||
float:left;
|
||||
display:block;
|
||||
float: left;
|
||||
display: block;
|
||||
/*background:url("right.gif") no-repeat right top;*/
|
||||
padding:5px 15px 4px 6px;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
color:#765;
|
||||
padding: 5px 15px 4px 6px;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #765;
|
||||
}
|
||||
/* Commented Backslash Hack
|
||||
hides rule from IE5-Mac \*/
|
||||
#header li a {float:none;}
|
||||
/* End IE5-Mac hack */
|
||||
#header li a:hover {
|
||||
color:#333;
|
||||
color: #333;
|
||||
}
|
||||
#header #current {
|
||||
/* background-image:url("left_on.gif"); */
|
||||
}
|
||||
#header #current a {
|
||||
background-image:url("right_on.gif");
|
||||
color:#333;
|
||||
padding-bottom:5px;
|
||||
background-image: url("right_on.gif");
|
||||
color: #333;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
#tabnav
|
||||
|
@ -266,8 +240,8 @@ hides rule from IE5-Mac \*/
|
|||
}
|
||||
#tabnav li
|
||||
{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
@ -278,7 +252,7 @@ hides rule from IE5-Mac \*/
|
|||
font-size: 13px;
|
||||
line-height: 14px;
|
||||
font-weight: bold;
|
||||
padding: 2px 10px 2px 10px;
|
||||
padding: 2px 10px;
|
||||
margin-right: 4px;
|
||||
border: 1px solid #ccc;
|
||||
text-decoration: none;
|
||||
|
@ -330,7 +304,7 @@ hides rule from IE5-Mac \*/
|
|||
border: 1px solid #ccc;
|
||||
left: 0px;
|
||||
line-height: 1.2em;
|
||||
text-align: Left;
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
background: #eee;
|
||||
}
|
||||
|
@ -388,7 +362,7 @@ hides rule from IE5-Mac \*/
|
|||
padding: 10px;
|
||||
left: 0px;
|
||||
line-height: 1.2em;
|
||||
text-align: Left;
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
background: #fff;
|
||||
|
@ -402,10 +376,10 @@ hides rule from IE5-Mac \*/
|
|||
#controls
|
||||
{
|
||||
position:absolute;
|
||||
top:0px;
|
||||
left:0px;
|
||||
width:64px;
|
||||
height:32px;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 64px;
|
||||
height: 32px;
|
||||
z-index: 9998;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -446,7 +420,7 @@ hides rule from IE5-Mac \*/
|
|||
|
||||
.sidebar_title {
|
||||
margin: 0px;
|
||||
padding: 3px 6px 3px 6px;
|
||||
padding: 3px 6px;
|
||||
height: 29px;
|
||||
font-size: 14px;
|
||||
line-height: 15px;
|
||||
|
@ -456,31 +430,31 @@ hides rule from IE5-Mac \*/
|
|||
|
||||
.browse_heading {
|
||||
margin: 0px;
|
||||
padding: 3px 6px 3px 6px;
|
||||
padding: 3px 6px;
|
||||
border: 1px solid #ccc;
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.browse_details {
|
||||
margin: 0px;
|
||||
padding: 0px 6px 0px 6px;
|
||||
padding: 0px 6px;
|
||||
}
|
||||
|
||||
.search_results_heading {
|
||||
margin: 0px;
|
||||
padding: 3px 6px 3px 6px;
|
||||
padding: 3px 6px;
|
||||
border: 1px solid #ccc;
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.search_results_entry {
|
||||
margin: 0px;
|
||||
padding: 2px 6px 2px 6px;
|
||||
padding: 2px 6px;
|
||||
}
|
||||
|
||||
.search_results_error {
|
||||
margin: 0px;
|
||||
padding: 2px 6px 0px 6px;
|
||||
padding: 2px 6px 0px;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
|
@ -536,7 +510,7 @@ hides rule from IE5-Mac \*/
|
|||
|
||||
#errorExplanation p {
|
||||
color: #333;
|
||||
margin-bottom: 0;
|
||||
margin-bottom: 0px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
|
@ -566,8 +540,8 @@ input[type="submit"] {
|
|||
}
|
||||
|
||||
.editDescription {
|
||||
height : 10ex;
|
||||
width : 30em;
|
||||
height: 10ex;
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
.nowrap {
|
||||
|
@ -575,14 +549,14 @@ input[type="submit"] {
|
|||
}
|
||||
|
||||
#map #popup p {
|
||||
margin : 0;
|
||||
padding : 2px;
|
||||
margin: 0px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/**State of the Map */
|
||||
|
||||
#sotminfo {
|
||||
background: #9999FF;
|
||||
background: #99F;
|
||||
font-size: 11px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
|
@ -615,7 +589,7 @@ input[type="submit"] {
|
|||
|
||||
.export_heading {
|
||||
margin: 0px;
|
||||
padding: 3px 6px 3px 6px;
|
||||
padding: 3px 6px;
|
||||
border: 1px solid #ccc;
|
||||
background: #ddd;
|
||||
}
|
||||
|
@ -630,7 +604,7 @@ input[type="submit"] {
|
|||
}
|
||||
|
||||
.export_details {
|
||||
padding: 2px 6px 2px 6px;
|
||||
padding: 2px 6px;
|
||||
}
|
||||
|
||||
#export_osm {
|
||||
|
@ -646,7 +620,7 @@ input[type="submit"] {
|
|||
}
|
||||
|
||||
.export_hint {
|
||||
padding: 0px 12px 0px 12px;
|
||||
padding: 0px 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
|
@ -656,8 +630,8 @@ input[type="submit"] {
|
|||
}
|
||||
|
||||
#noscript {
|
||||
z-index:20000000;
|
||||
position:absolute;
|
||||
top:15px;
|
||||
left:15px
|
||||
z-index: 20000000;
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px
|
||||
}
|
||||
|
|