Remove inline javascript from id views

This commit is contained in:
Tom Hughes 2017-03-01 18:07:22 +00:00
parent fe159b2417
commit 293fb99467
4 changed files with 111 additions and 102 deletions

View file

@ -0,0 +1,35 @@
$(document).ready(function () {
var id = $("#id-embed");
if (id.data("key")) {
var hashParams = OSM.params(location.hash.substring(1)),
mapParams = OSM.mapParams(),
params = {};
if (mapParams.object) {
params.id = mapParams.object.type[0] + mapParams.object.id;
mapParams = OSM.parseHash(location.hash);
if (mapParams.center) {
params.map = mapParams.zoom + '/' + mapParams.center.lat + '/' + mapParams.center.lng;
}
} else if (id.data("lat") && id.data("lon")) {
params.map = "16/" + id.data("lat") + "/" + id.data("lon");
} else {
params.map = (mapParams.zoom || 17) + '/' + mapParams.lat + '/' + mapParams.lon;
}
if (hashParams.background) params.background = hashParams.background;
if (hashParams.comment) params.comment = hashParams.comment;
if (hashParams.offset) params.offset = hashParams.offset;
if (id.data("gpx")) {
params.gpx = id.data("gpx");
} else if (hashParams.gpx) {
params.gpx = hashParams.gpx;
}
id.attr("src", id.data("url") + "#" + querystring.stringify(params));
} else {
alert(I18n.t("site.edit.id_not_configured"));
}
});

View file

@ -1 +1,56 @@
//= require iD //= require iD
document.addEventListener("DOMContentLoaded", function(e) {
var container = document.getElementById("id-container");
if (typeof iD == 'undefined' || !iD.Detect().support) {
container.innerHTML = 'This editor is supported ' +
'in Firefox, Chrome, Safari, Opera, Edge, and Internet Explorer 11. ' +
'Please upgrade your browser or use Potlatch 2 to edit the map.';
container.className = 'unsupported';
} else {
var id = iD.Context()
.embed(true)
.assetPath("iD/")
.assetMap(container.dataset.assetMap)
.locale(container.dataset.locale, container.dataset.localePath)
.preauth({
urlroot: location.protocol + "//" + location.host,
oauth_consumer_key: container.dataset.consumerKey,
oauth_secret: container.dataset.consumerSecret,
oauth_token: container.dataset.token,
oauth_token_secret: container.dataset.tokenSecret
});
id.map().on('move.embed', parent.$.throttle(250, function() {
if (id.inIntro()) return;
var zoom = ~~id.map().zoom(),
center = id.map().center(),
llz = { lon: center[0], lat: center[1], zoom: zoom };
parent.updateLinks(llz, zoom);
// Manually resolve URL to avoid iframe JS context weirdness.
// http://bl.ocks.org/jfirebaugh/5439412
var hash = parent.OSM.formatHash(llz);
if (hash !== parent.location.hash) {
parent.location.replace(parent.location.href.replace(/(#.*|$)/, hash));
}
}));
parent.$("body").on("click", "a.set_position", function (e) {
e.preventDefault();
var data = parent.$(this).data();
// 0ms timeout to avoid iframe JS context weirdness.
// http://bl.ocks.org/jfirebaugh/5439412
setTimeout(function() {
id.map().centerZoom(
[data.lon, data.lat],
Math.max(data.zoom || 15, 13));
}, 0);
});
id.ui()(container);
}
});

View file

@ -1,47 +1,10 @@
<% if defined? ID_KEY %> <%= javascript_include_tag "edit/id" %>
<div id="map">
<iframe frameBorder="0" id="id-embed" class="id-embed" allowfullscreen></iframe>
</div>
<script>
var params = {};
var mapParams = OSM.mapParams(); <div id="map">
if (mapParams.object) { <% data = { :key => ID_KEY } -%>
params.id = mapParams.object.type[0] + mapParams.object.id; <% data[:lat] = @lat if @lat -%>
mapParams = OSM.parseHash(location.hash); <% data[:lon] = @lon if @lon -%>
if (mapParams.center) { <% data[:gpx] = trace_data_url(params[:gpx], :format => :xml) if params[:gpx] -%>
params.map = mapParams.zoom + '/' + mapParams.center.lat + '/' + mapParams.center.lng; <% data[:url] = id_url(:locale => params[:locale]) -%>
} <%= content_tag :iframe, "", :frameBorder => 0, :id => "id-embed", :class => "id-embed", :allowfullscreen => "", :data => data %>
} else { </div>
<% if @lat && @lon -%>
params.map = '16/<%= @lat %>/<%= @lon %>';
<% else -%>
params.map = (mapParams.zoom || 17) + '/' + mapParams.lat + '/' + mapParams.lon;
<% end -%>
}
var hashParams = OSM.params(location.hash.substring(1));
if (hashParams.background) {
params.background = hashParams.background;
}
if (hashParams.comment) {
params.comment = hashParams.comment;
}
if (hashParams.offset) {
params.offset = hashParams.offset;
}
<% if params[:gpx] -%>
params.gpx = '<%= trace_data_url(params[:gpx], :format => :xml) %>';
<% else -%>
if (hashParams.gpx) {
params.gpx = hashParams.gpx;
}
<% end -%>
$('#id-embed').attr('src', '<%= id_url :locale => params[:locale] %>#' + querystring.stringify(params));
</script>
<% else %>
<script type="text/javascript">alert("<%= t 'site.edit.id_not_configured' %>")</script>
<% end %>

View file

@ -8,61 +8,17 @@
<!-- <![endif]--> <!-- <![endif]-->
</head> </head>
<body> <body>
<div id='id-container'></div> <% data = {} -%>
<script> <% if defined? ID_KEY %>
if (typeof iD == 'undefined' || !iD.Detect().support) { <% token = @user.access_token(ID_KEY) %>
document.getElementById('id-container').innerHTML = 'This editor is supported ' + <% data[:token] = token.token -%>
'in Firefox, Chrome, Safari, Opera, Edge, and Internet Explorer 11. ' + <% data[:token_secret] = token.secret -%>
'Please upgrade your browser or use Potlatch 2 to edit the map.'; <% data[:consumer_key] = token.client_application.key -%>
document.getElementById('id-container').className = 'unsupported'; <% data[:consumer_secret] = token.client_application.secret -%>
} else { <% end %>
<% locale = ID::LOCALES.preferred(preferred_languages).to_s %> <% data[:locale] = ID::LOCALES.preferred(preferred_languages).to_s -%>
<% data[:locale_path] = asset_path("iD/locales/#{data[:locale]}.json") -%>
var id = iD.Context() <% data[:asset_map] = assets("iD").to_json -%>
.embed(true) <%= content_tag :div, "", :id => "id-container", :data => data %>
.assetPath("iD/")
.assetMap(<%= assets("iD").to_json.html_safe %>)
.locale("<%= locale %>", "<%= asset_path("iD/locales/#{locale}.json") %>")
.preauth({
<% token = @user.access_token(ID_KEY) %>
urlroot: "<%= request.protocol + request.host_with_port %>",
oauth_consumer_key: "<%= token.client_application.key %>",
oauth_secret: "<%= token.client_application.secret %>",
oauth_token: "<%= token.token %>",
oauth_token_secret: "<%= token.secret %>"
});
id.map().on('move.embed', parent.$.throttle(250, function() {
if (id.inIntro()) return;
var zoom = ~~id.map().zoom(),
center = id.map().center(),
llz = { lon: center[0], lat: center[1], zoom: zoom };
parent.updateLinks(llz, zoom);
// Manually resolve URL to avoid iframe JS context weirdness.
// http://bl.ocks.org/jfirebaugh/5439412
var hash = parent.OSM.formatHash(llz);
if (hash !== parent.location.hash) {
parent.location.replace(parent.location.href.replace(/(#.*|$)/, hash));
}
}));
parent.$("body").on("click", "a.set_position", function (e) {
e.preventDefault();
var data = parent.$(this).data();
// 0ms timeout to avoid iframe JS context weirdness.
// http://bl.ocks.org/jfirebaugh/5439412
setTimeout(function() {
id.map().centerZoom(
[data.lon, data.lat],
Math.max(data.zoom || 15, 13));
}, 0);
});
id.ui()(document.getElementById("id-container"));
}
</script>
</body> </body>
</html> </html>