', methods=['GET', 'POST'])
+def admin_layer(id):
+ if request.method == 'GET':
+ return render_template('admin_layer.html', layer=get_layer(id))
+ else:
+ conn = connect()
+ with conn.cursor() as cur:
+ cur.execute('UPDATE layers SET color=%s, definition=%s, name=%s WHERE id=%s', (request.form['color'], request.form['definition'], request.form['name'], id))
+ conn.commit()
+ return render_template('admin_layer.html', layer=get_layer(id), success=True)
+
@app.route('/login')
def login():
"""Initiate an OAuth login.
Call the MediaWiki server to get request secrets and then redirect the
user to the MediaWiki server to sign the request.
"""
consumer_token = mwoauth.ConsumerToken(
app.config['CONSUMER_KEY'], app.config['CONSUMER_SECRET'])
try:
redirect, request_token = mwoauth.initiate(
app.config['OAUTH_MWURI'], consumer_token)
except Exception:
app.logger.exception('mwoauth.initiate failed')
return flask.redirect(flask.url_for('index'))
else:
flask.session['request_token'] = dict(zip(
request_token._fields, request_token))
return flask.redirect(redirect)
@app.route('/oauth-callback')
def oauth_callback():
"""OAuth handshake callback."""
if 'request_token' not in flask.session:
flask.flash(u'OAuth callback failed. Are cookies disabled?')
return flask.redirect(flask.url_for('index'))
consumer_token = mwoauth.ConsumerToken(app.config['CONSUMER_KEY'], app.config['CONSUMER_SECRET'])
try:
access_token = mwoauth.complete(
app.config['OAUTH_MWURI'],
consumer_token,
mwoauth.RequestToken(**flask.session['request_token']),
flask.request.query_string)
identity = mwoauth.identify(app.config['OAUTH_MWURI'], consumer_token, access_token)
except Exception:
app.logger.exception('OAuth authentication failed')
else:
flask.session['request_token_secret'] = dict(zip(access_token._fields, access_token))['secret']
flask.session['request_token_key'] = dict(zip(access_token._fields, access_token))['key']
flask.session['username'] = identity['username']
return flask.redirect(flask.url_for('index'))
@app.route('/logout')
def logout():
"""Log the user out by clearing their session."""
flask.session.clear()
return flask.redirect(flask.url_for('index'))
if __name__ == "__main__":
app.run(debug=True, threaded=True)
diff --git a/src/templates/admin_layer.html b/src/templates/admin_layer.html
new file mode 100644
index 0000000..5732a32
--- /dev/null
+++ b/src/templates/admin_layer.html
@@ -0,0 +1,15 @@
+{% extends 'base.html' %}
+{% block content %}
+
+
Edit layer - {% if layer %} {{layer.3}} {% else %}{{locale['new']}}{% endif %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/src/templates/admin_layers.html b/src/templates/admin_layers.html
new file mode 100644
index 0000000..c80f013
--- /dev/null
+++ b/src/templates/admin_layers.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+{% block content %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/static/map.js b/static/map.js
index bdc22c9..017ce9a 100644
--- a/static/map.js
+++ b/static/map.js
@@ -1,76 +1,82 @@
+var mapsPlaceholder = []
+L.Map.addInitHook(function () {
+ mapsPlaceholder.push(this);
+});
function GetValues() {
+ if(mapsPlaceholder.length == 1) {mapsPlaceholder[0].remove()}
+ $('#map').attr("class", "");
$('#map').html("Processing...
");
var type = $('input[name="optradio"]:checked').val();
var subtype = "unphotographed";
if ($('#nafocene')[0].checked && $('#nenafocene')[0].checked) subtype = "all";
else if ($('#nafocene')[0].checked && !$('#nenafocene')[0].checked) subtype = "unphotographed";
else if (!$('#nafocene')[0].checked && $('#nenafocene')[0].checked) subtype = "photographed";
var payload = {
type: type,
subtype: subtype,
radius: $('#radius').val(),
};
if (type == "article") {
payload["article"] = $('input[name="wikiSearchPole"]').val();
payload["project"] = $('#project-language').val() + $('#project-project').val();
} else if (type == "item") {
payload["item"] = $('input[name="cislo"]').val();
} else if (type == "coordinate") {
payload["lat"] = $('input[name="cislo"]').val();
payload["lon"] = $('input[name="lon"]').val();
}
$.get('map', payload, function(data) {
$('#map').html("").addClass("bigmap");
var style = 'osm-intl';
var server = 'https://maps.wikimedia.org/';
var map = L.map('map');
map.setView([50, 16], 7);
L.tileLayer(server + style + '/{z}/{x}/{y}.png', {
maxZoom: 18,
id: 'wikipedia-map-01',
attribution: 'Wikimedia maps beta | Map data © OpenStreetMap contributors'
}).addTo(map);
var markers = L.markerClusterGroup();
for(var i = 0; i < data.results.bindings.length; i++)
{
var pointData = data.results.bindings[i];
var coor = pointData.coord.value.replace("Point(", "").replace(")", "").split(" ");
if(pointData.rgb) {
var markerHtmlStyles = `
background-color: #${pointData.rgb.value};
width: 3rem;
height: 3rem;
display: block;
left: -1.5rem;
top: -1.5rem;
position: relative;
border-radius: 3rem 3rem 0;
transform: rotate(45deg);
border: 1px solid #FFFFFF`;
} else {
continue;
}
var marker = L.marker(new L.LatLng(coor[1], coor[0]), {
icon: L.divIcon({
className: "my-custom-pin",
iconAnchor: [0, 24],
labelAnchor: [-6, 0],
popupAnchor: [0, -36],
html: ``
}),
title: pointData.itemLabel.value
});
marker.bindPopup(`${pointData.itemLabel.value}`);
markers.addLayer(marker);
}
map.addLayer(markers);
$.get("stats", function (data, status) { $('#statnum').text(data) })
})
}
\ No newline at end of file