From c19a1f93bfffa56882ae8a9f06bea144c857b08b Mon Sep 17 00:00:00 2001 From: hellekin Date: Fri, 9 Mar 2018 14:40:04 +0100 Subject: First preview of the prototype for Wallonie#Demain --- assets/mapper.js | 485 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 485 insertions(+) create mode 100644 assets/mapper.js (limited to 'assets/mapper.js') diff --git a/assets/mapper.js b/assets/mapper.js new file mode 100644 index 0000000..ac1e2fc --- /dev/null +++ b/assets/mapper.js @@ -0,0 +1,485 @@ +/** + * Wallonie#Demain Prototype + * + * Requires jQuery + **/ + +// We don't have working GeoJSON support yet +USE_GEOJSON = false + +// Subset of Dewey Maps' Deck +// See https://lite.framacalc.org/XNQBPjpQuO +const Categories = [ + {"id":6, "name":"1. S'alimenter", "subcategories":[ + {"name":"Marchés", "id":170}, + {"name":"Ateliers cuisine", "id":180}, + {"name":"Spots 'plantes aromatiques'", "id":155}, + {"name":"Épiceries solidaires", "id":135}, + {"name":"Eau potable", "id":115}, + {"name":"Repas gratuits", "id":154}, + {"name":"Restaurants sociaux", "id":118}, + {"name":"Initiatives de récup' alimentaire", "id":28}, + {"name":"GASAP (groupes d'achat)", "id":27}, + {"name":"GASAP (producteurs)", "id":185} + ], "color":"#FFEB00"}, + + {"id":11, "name":"2. Se laver, s'habiller", "subcategories":[ + {"name":"Boîtes à dons", "id":210}, + {"name":"Vestiaires sociaux", "id":156}, + {"name":"Donneries, marchés gratuits", "id":46}, + {"name":"Douches publiques", "id":144}, + {"name":"Friperies, vêtements de 2ème main", "id":104} + ], "color":"#7CFB80"}, + + {"id":10, "name":"3. Guérir, se soigner", "subcategories":[ + {"name":"Maisons médicales", "id":18}, + {"name":"Réseaux de santé", "id":145}, + {"name":"Services de santé pour personnes précaires", "id":157} + ], "color":"#02ACCC"}, + + {"id":15, "name":"4. Recycler, réparer", "subcategories":[ + {"name":"Ateliers de travail du bois", "id":138}, + {"name":"Récup' de cartouches d'imprimantes", "id":136}, + {"name":"Boîtes à livres", "id":50}, + {"name":"Aide au compostage", "id":132}, + {"name":"Repair cafés", "id":42}, + {"name":"Récup' de matériaux de construction", "id":113}, + {"name":"Bulles à vêtements", "id":206}, + {"name":"Matériaux informatiques recyclés", "id":47}, + {"name":"Recyclage de verre", "id":205}, + {"name":"Marchés aux puces", "id":120} + ], "color":"#97C000"}, + + {"id":7, "name":"5. respirer, se mettre au vert", "subcategories":[ + {"name":"Soutien aux potagistes", "id":128}, + {"name":"Composts collectifs ou 'de quartier'", "id":121}, + {"name":"Potagers & vergers", "id":116}, + {"name":"Réserves naturelles", "id":133}, + {"name":"Associations de naturalistes", "id":194}, + {"name":"Parcs publics", "id":129}, + {"name":"Grainothèques, bourses aux semences", "id":125}, + {"name":"Associations apicoles", "id":127} + ], "color":"#7E8A0E"}, + + {"id":3, "name":"6. Se rencontrer, s'entraider", "subcategories":[ + {"name":"Comités de quartiers", "id":102}, + {"name":"Associations de soutien aux seniors", "id":19}, + {"name":"Maisons de Jeunes", "id":17}, + {"name":"Soutien à l'enfance et à la famille", "id":14}, + {"name":"Maisons de quartiers", "id":10}, + {"name":"Monnaies complémentaires", "id":211}, + {"name":"Associations de soutien scolaire", "id":119}, + {"name":"Associations de Femmes", "id":15}, + {"name":"Accueil des réfugiés", "id":188}, + {"name":"Soutien aux personnes en situation d'handicap", "id":16}, + {"name":"Accueil des primo-arrivants", "id":197}, + {"name":"Coopération et solidarité internationale", "id":209}, + {"name":"Associations pour l'égalité des genres", "id":202}, + {"name":"Centres communautaires NL", "id":204}, + {"name":"Initiatives de récup' alimentaire", "id":201}, + {"name":"Soutien aux personnes précaires", "id":193}, + {"name":"Systèmes d'échange locaux (SEL)", "id":184} + ], "color":"#677362"}, + + {"id":2, "name":"7. Apprendre, se former", "subcategories":[ + {"name":"Association d'écologie urbaine", "id":90}, + {"name":"Espaces de travail partagés, co-working", "id":87}, + {"name":"Soutien à l'économie locale", "id":12}, + {"name":"Associations d'éducation permanente", "id":13} + ], "color":"#008080"}, + + {"id":13, "name":"8. S'exprimer, communiquer", "subcategories":[ + {"name":"Bornes d'accès à Internet", "id":124}, + {"name":"Hackerspaces", "id":43}, + {"name":"Médias indépendants", "id":109}, + {"name":"Écrivains publics", "id":177}, + {"name":"Lieux de promotion du logiciel libre", "id":174} + ], "color":"#0E408A"}, + + {"id":9, "name":"9. Bouger, se déplacer", "subcategories":[ + {"name":"Cours de vélo", "id":179}, + {"name":"Ateliers vélo", "id":71}, + {"name":"Vélos partagés", "id":147}, + {"name":"Livraisons à vélo", "id":140}, + {"name":"Pompes à vélos", "id":212}, + {"name":"Taxis collectifs (Collecto)", "id":196}, + {"name":"Voitures partagées", "id":141} + ], "color":"#0E0140"} +] + +// Our map +const map = L.map('map') +const mcg = L.markerClusterGroup({ + disableClusteringAtZoom: 18, + spiderfyOnMaxZoom: false, + showCoverageOnHover: false, + zoomToBoundsOnClick: true, + removeOutsideVisibleBounds: true +}) + +// GeoJSON cache of markers by section +const Markers = [] +const SectionLayers = [] +// Prepare Markers for lazy-loading +Categories.forEach(function(c) { + c.subcategories.forEach(function(s) { + Markers[s.id] = {} + if (USE_GEOJSON === true) { + SectionLayers[s.id] = L.geoJSON([], { + filter: function(feature, layer) { + console.log('layer filter for ' + s.id) + return feature.properties.subcategories[0].id == s.id + }, + onEachFeature: function(feature, layer) { + if (feature.properties && feature.properties.popup) { + console.log(feature.properties.popup) + layer.bindPopup(feature.properties.popup) + } + } + }) + } else { + SectionLayers[s.id] = L.featureGroup.subGroup(mcg, []) + } + }) +}) + +// Where do we get our JSON data from +const api_base = 'http://localhost/data/' +//const api_base = 'https://map.incommon.cc/data/' +//const api_base = 'http://maps.dewey.be/api' +const cat_uri = api_base + '/categories.json' + +/** + * Setup the navigation to filter markers on map by category and + * section. It creates an unordered list of categories to toggle + * section display. +**/ +function navSetup() { + var nav = $('body > aside > nav') + var ul = $('