distribute js code in extra files and add barrio form sidepanel

This commit is contained in:
Gandalf 2023-07-10 19:43:07 +02:00
parent d25dab2b58
commit b7f5b6b4ee
4 changed files with 108 additions and 90 deletions

56
sketch/html/app.js Normal file
View file

@ -0,0 +1,56 @@
var map = L.map('map').setView([50.880301, 6.560531], 13,);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { minZoom: 12, maxZoom: 19, attribution: 'Map data: &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>' }).addTo(map);
let editButton = L.control.editButton({position: 'topright'});
map.addControl(editButton,);
var barrio_markers = L.layerGroup(); //overlay where all barrio markers will be added
var tree_markers = L.layerGroup(); //overlay where all tree(house) markers will be added
var test_tree_marker = L.marker([50.880301, 6.560531]).addTo(tree_markers);
map.addLayer(tree_markers);
function onMapClick(e){ //for adding a tree(house)
if (editing && map.getZoom() > max_barrio_zoom) {
sidebar.open('tree');
}
}
function onMapZoom(e){ //for deciding wether to show barrios or treehouses
if (map.getZoom() > max_barrio_zoom) {
map.addLayer(barrio_markers);
map.removeLayer(tree_markers);
}
if (map.getZoom() <= max_barrio_zoom) {
map.addLayer(tree_markers);
map.removeLayer(barrio_markers);
}
}
function onMapMouseDown(e){} //probably needed for Barrio creation -> nope.
function onMapMouseUp(e){
if (editing && (map.getZoom() <= max_barrio_zoom)) {
// use selectfeature.getAreaLatLng() to fill in hidden fields of the form
// add a new panel
let panelContent = {
id: 'barrio_form', // UID, used to access the panel
tab: '<i class="fa fa-tents"></i>', // content can be passed as HTML string,
pane: 'TODO: put form for barrio input here',//someDomNode.innerHTML, // DOM elements can be passed, too
title: 'Barrio Form', // an optional pane header
};
sidebar.addPanel(panelContent);
sidebar.open('barrio_form');
}
}
function onMapContextMenu(e){}//probably neat for something
var sidebar = L.control.sidebar({
container: 'sidebar', // the DOM container or #ID of a predefined sidebar container that should be used
}).addTo(map).open('home');
map.on('click', onMapClick);
map.on('zoomend', onMapZoom);
map.on('mousedown', onMapMouseDown);
map.on('selectAreaFeature:mouseUp', onMapMouseUp); // because registering a listener on mouseup or layeradd breaks the SelectFeature plugin
map.on('contextMenu', onMapContextMenu);
sidebar.on('closing', function(e) {sidebar.removePanel('barrio_form');});

47
sketch/html/editButton.js Normal file
View file

@ -0,0 +1,47 @@
L.Control.EditButton = L.Control.extend({
onAdd: function (map) {
var editButton = L.DomUtil.create('button', 'w3-button w3-white w3-hover-light-blue w3-small leaflet-bar');
//var editButton = L.DomUtil.create('button', 'leaflet-bar leaflet-control leaflet-control-custom');
// editButton.style.backgroundColor = 'white';
// editButton.style.backgroundSize = "30px 30px";
let title_inactive_treehouse = 'Add a treehouse in the current map area';
let title_inactive_barrio = 'Add a barrio in the current map area';
let title_active = 'Disable edit mode to drag the map';
title_inactive = function(){
let zoom = map.getZoom();
if (zoom <= max_barrio_zoom) return title_inactive_barrio;
// if (layer == 'treehouse') // uncomment if you ever introduce another layer or default value
return title_inactive_treehouse;
};
editButton.innerHTML = 'edit';
editButton.title = title_inactive();
editButton.onclick = function(){
if (editing) {
editButton.className = editButton.className.replace("w3-blue", "w3-white");
editButton.title = title_inactive();
map.selectAreaFeature.disable();
editing = false;
} else {
editButton.className = editButton.className.replace("w3-white", "w3-blue");
editButton.title = title_active;
map.selectAreaFeature.enable();
editing = true;
}
}
return editButton;
},
onRemove: function(map) {
// Nothing to do here
}
});
L.control.editButton = function(opts) {
return new L.Control.EditButton(opts);
}

2
sketch/html/globals.js Normal file
View file

@ -0,0 +1,2 @@
const max_barrio_zoom = 16;
let editing = false;

View file

@ -70,96 +70,9 @@
</script>
<script src="leaflet/leaflet-sidebar-v2/js/leaflet-sidebar.js"></script>
<script src="leaflet/Leaflet.SelectAreaFeature/src/Leaflet.SelectAreaFeature.js"></script>
<script>
const max_barrio_zoom = 16;
L.Control.EditButton = L.Control.extend({
onAdd: function (map) {
var editButton = L.DomUtil.create('button', 'w3-button w3-white w3-hover-light-blue w3-small leaflet-bar');
//var editButton = L.DomUtil.create('button', 'leaflet-bar leaflet-control leaflet-control-custom');
// editButton.style.backgroundColor = 'white';
// editButton.style.backgroundSize = "30px 30px";
let active = false;
let title_inactive_treehouse = 'Add a treehouse in the current map area';
let title_inactive_barrio = 'Add a barrio in the current map area';
let title_active = 'Disable edit mode to drag the map';
title_inactive = function(){
let zoom = map.getZoom();
if (zoom <= max_barrio_zoom) return title_inactive_barrio;
// if (layer == 'treehouse') // uncomment if you ever introduce another layer or default value
return title_inactive_treehouse;
};
editButton.innerHTML = 'edit';
editButton.title = title_inactive();
editButton.onclick = function(){
if (active) {
editButton.className = editButton.className.replace("w3-blue", "w3-white");
editButton.title = title_inactive();
map.selectAreaFeature.disable();
active = false;
} else {
editButton.className = editButton.className.replace("w3-white", "w3-blue");
editButton.title = title_active;
map.selectAreaFeature.enable();
active = true;
}
}
return editButton;
},
onRemove: function(map) {
// Nothing to do here
}
});
L.control.editButton = function(opts) {
return new L.Control.EditButton(opts);
}
var map = L.map('map').setView([50.880301, 6.560531], 13,);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { minZoom: 12, maxZoom: 19, attribution: 'Map data: &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>' }).addTo(map);
let editButton = L.control.editButton({position: 'topright'});
map.addControl(editButton,);
var barrio_markers = L.layerGroup(); //overlay where all barrio markers will be added
var tree_markers = L.layerGroup(); //overlay where all tree(house) markers will be added
var test_tree_marker = L.marker([50.880301, 6.560531]).addTo(tree_markers);
map.addLayer(tree_markers);
function onMapClick(e){} //for adding a tree(house)
function onMapZoom(e){ //for deciding wether to show barrios or treehouses
if (map.getZoom() > max_barrio_zoom) {
map.addLayer(barrio_markers);
map.removeLayer(tree_markers);
}
if (map.getZoom() <= max_barrio_zoom) {
map.addLayer(tree_markers);
map.removeLayer(barrio_markers);
}
}
function onMapMouseDown(e){} //probably needed for Barrio creation
function onMapMouseUp(e){} //^^
function onMapContextMenu(e){}//probably neat for something
map.on('click', onMapClick);
map.on('zoomend', onMapZoom);
map.on('mousedown', onMapMouseDown);
map.on('mouseup', onMapMouseUp);
map.on('contextMenu', onMapContextMenu);
var sidebar = L.control.sidebar({
container: 'sidebar', // the DOM container or #ID of a predefined sidebar container that should be used
}).addTo(map).open('home');
</script>
<script src="globals.js"></script>
<script src="editButton.js"></script>
<script src="app.js"></script>
</body>
</html>