From ec92c5fb64465d409b61d1cb702f8e907549f6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Sat, 10 Jun 2017 21:00:37 +0200 Subject: [PATCH] Change logic of loader; register types --- categories/gastro.json | 1 + categories/parks.json | 1 + categories/trees.json | 1 + index.js | 8 +++++--- src/OpenStreetBrowserCategory.js | 2 ++ src/OpenStreetBrowserIndex.js | 3 +++ src/OpenStreetBrowserLoader.js | 24 +++++++++++++++++------- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/categories/gastro.json b/categories/gastro.json index d196994e..8db80169 100644 --- a/categories/gastro.json +++ b/categories/gastro.json @@ -1,4 +1,5 @@ { + "type": "category", "query": "(node[amenity~'^(bar|biergarten|cafe|fast_food|ice_cream|pub|restaurant)$'];way[amenity~'^(bar|biergarten|cafe|fast_food|ice_cream|pub|restaurant)$'];relation[amenity~'^(bar|biergarten|cafe|fast_food|ice_cream|pub|restaurant)$'];);", "minZoom": 16, "markerSign": "{% if tags.amenity=='bar' %}🍸{% elseif tags.amenity=='biergarten'%}🍻{% elseif tags.amenity=='cafe' %}☕{% elseif tags.amenity=='fast_food' %}🍔{% elseif tags.amenity=='ice_cream' %}🍨{% elseif tags.amenity=='pub' %}🍺{% else %}🍴{% endif %}", diff --git a/categories/parks.json b/categories/parks.json index 9c5dcd41..4526a04a 100644 --- a/categories/parks.json +++ b/categories/parks.json @@ -1,4 +1,5 @@ { + "type": "category", "query": "(way[leisure=park];relation[leisure=park];)", "style": { "color": "green", diff --git a/categories/trees.json b/categories/trees.json index a8243456..ab8e367c 100644 --- a/categories/trees.json +++ b/categories/trees.json @@ -1,4 +1,5 @@ { + "type": "category", "query": "node[natural=tree];", "style": { "nodeFeature": "CircleMarker", diff --git a/index.js b/index.js index e43d2ea1..fd31be15 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,9 @@ var OverpassLayerList = require('overpass-layer').List var OverpassFrontend = require('overpass-frontend') var OpenStreetBrowserLoader = require('./src/OpenStreetBrowserLoader') +require('./src/OpenStreetBrowserCategory') +require('./src/OpenStreetBrowserIndex') + var map var categories = {} @@ -21,8 +24,7 @@ window.onload = function() { ) osm_mapnik.addTo(map) - - OpenStreetBrowserLoader('index', function (err, category) { + OpenStreetBrowserLoader.load('index', function (err, category) { if (err) { alert(err) return @@ -38,7 +40,7 @@ window.toggleCategory = function (id) { if (id in categories) { categories[id].toggle() } else { - OpenStreetBrowserLoader(id, function (err, category) { + OpenStreetBrowserLoader.load(id, function (err, category) { if (err) { alert(err) return diff --git a/src/OpenStreetBrowserCategory.js b/src/OpenStreetBrowserCategory.js index 0c3ce54a..8d6ffa4b 100644 --- a/src/OpenStreetBrowserCategory.js +++ b/src/OpenStreetBrowserCategory.js @@ -1,3 +1,4 @@ +var OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') var OverpassLayer = require('overpass-layer') var OverpassLayerList = require('overpass-layer').List @@ -34,4 +35,5 @@ OpenStreetBrowserCategory.prototype.toggle = function () { } } +OpenStreetBrowserLoader.registerType('category', OpenStreetBrowserCategory) module.exports = OpenStreetBrowserCategory diff --git a/src/OpenStreetBrowserIndex.js b/src/OpenStreetBrowserIndex.js index 8e4e1439..89c9723a 100644 --- a/src/OpenStreetBrowserIndex.js +++ b/src/OpenStreetBrowserIndex.js @@ -1,3 +1,5 @@ +var OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') + function OpenStreetBrowserIndex (id, data) { this.id = id this.data = data @@ -23,4 +25,5 @@ OpenStreetBrowserIndex.prototype.addTo = function (map, parentDom) { } } +OpenStreetBrowserLoader.registerType('index', OpenStreetBrowserIndex) module.exports = OpenStreetBrowserIndex diff --git a/src/OpenStreetBrowserLoader.js b/src/OpenStreetBrowserLoader.js index aaebcb73..f22fdc04 100644 --- a/src/OpenStreetBrowserLoader.js +++ b/src/OpenStreetBrowserLoader.js @@ -1,7 +1,9 @@ -var OpenStreetBrowserIndex = require('./OpenStreetBrowserIndex') -var OpenStreetBrowserCategory = require('./OpenStreetBrowserCategory') +function OpenStreetBrowserLoader () { + this.types = {} +} + -function OpenStreetBrowserLoader (id, callback) { +OpenStreetBrowserLoader.prototype.load = function (id, callback) { function reqListener (req) { if (req.status !== 200) { console.log(req) @@ -10,10 +12,14 @@ function OpenStreetBrowserLoader (id, callback) { var data = JSON.parse(req.responseText) - if (data.type && data.type === 'index') { - var layer = new OpenStreetBrowserIndex(id, data) + if (!data.type) { + callback('no type defined', null) + return + } else if (!(data.type in this.types)) { + callback('unknown type', null) + return } else { - var layer = new OpenStreetBrowserCategory(id, data) + var layer = new this.types[data.type](id, data) } callback(null, layer) @@ -25,4 +31,8 @@ function OpenStreetBrowserLoader (id, callback) { req.send() } -module.exports = OpenStreetBrowserLoader +OpenStreetBrowserLoader.prototype.registerType = function (type, classObject) { + this.types[type] = classObject +} + +module.exports = new OpenStreetBrowserLoader()