/** * Wallonie#Demain Prototype * * Requires jQuery **/ // We don't have working GeoJSON support yet USE_GEOJSON = false VERSION = '0.0.1' // 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":"#FF9200"}, {"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":"#FFEB00"}, {"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":"#7CFB80"}, {"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":"#02ACCC"}, {"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":"#97C000"}, {"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":"#C6B117"}, {"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":"#7E8AE0"}, {"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":"#677362"}, /* {"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} */ {"id": 9, "name": "9. Initiatives de transition", "subcategories":[ {"name":"Associées au Réseau Transition", "id":999} ], "color":"#D3A9B5"} ] // Store known sections (refs #3) const KnownSections = [] // Our map -- We customize attribution down below const map = L.map('map', {attributionControl: false}) 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) { KnownSections.push(s.id) // refs #3 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 function apiBaseUrl() { if (location.href.includes('localhost')) { return 'http://localhost/data/' } return 'https://map.incommon.cc/data/' } const api_base = apiBaseUrl() 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 = $('