From 9151fb40a9cc5e989940db31164ebeb585c5f270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Sun, 11 Jun 2017 08:20:51 +0200 Subject: [PATCH] Move category handling to OpenStreetBrowserLoader --- index.js | 33 +++++++++++++++----------------- src/OpenStreetBrowserCategory.js | 14 ++++++++++++-- src/OpenStreetBrowserIndex.js | 19 +++++++++++++++--- src/OpenStreetBrowserLoader.js | 20 ++++++++++++++++++- 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/index.js b/index.js index fd31be15..0464848c 100644 --- a/index.js +++ b/index.js @@ -2,12 +2,12 @@ var OverpassLayer = require('overpass-layer') var OverpassLayerList = require('overpass-layer').List var OverpassFrontend = require('overpass-frontend') var OpenStreetBrowserLoader = require('./src/OpenStreetBrowserLoader') +window.OpenStreetBrowserLoader = OpenStreetBrowserLoader require('./src/OpenStreetBrowserCategory') require('./src/OpenStreetBrowserIndex') var map -var categories = {} window.onload = function() { map = L.map('map').setView([51.505, -0.09], 18) @@ -24,30 +24,27 @@ window.onload = function() { ) osm_mapnik.addTo(map) - OpenStreetBrowserLoader.load('index', function (err, category) { + OpenStreetBrowserLoader.setMap(map) + OpenStreetBrowserLoader.setParentDom(document.getElementById('info')) + + OpenStreetBrowserLoader.getCategory('index', function (err, category) { if (err) { alert(err) return } - categories[category.id] = category - category.addTo(map, document.getElementById('info')) - + category.setParentDom(document.getElementById('info')) + category.open() }) } window.toggleCategory = function (id) { - if (id in categories) { - categories[id].toggle() - } else { - OpenStreetBrowserLoader.load(id, function (err, category) { - if (err) { - alert(err) - return - } - - categories[category.id] = category - category.addTo(map, document.getElementById('category-' + id).lastChild) - }) - } + OpenStreetBrowserLoader.getCategory(id, function (err, category) { + if (err) { + alert(err) + return + } + + category.toggle() + }) } diff --git a/src/OpenStreetBrowserCategory.js b/src/OpenStreetBrowserCategory.js index 8d6ffa4b..990679e9 100644 --- a/src/OpenStreetBrowserCategory.js +++ b/src/OpenStreetBrowserCategory.js @@ -5,11 +5,21 @@ var OverpassLayerList = require('overpass-layer').List function OpenStreetBrowserCategory (id, data) { this.id = id this.layer = new OverpassLayer(data.query, data) + this.isOpen = false } -OpenStreetBrowserCategory.prototype.addTo = function (map, parentDom) { +OpenStreetBrowserCategory.prototype.setMap = function (map) { this.map = map +} + +OpenStreetBrowserCategory.prototype.setParentDom = function (parentDom) { this.parentDom = parentDom +} + +OpenStreetBrowserCategory.prototype.open = function () { + if (typeof this.parentDom === 'string') { + this.parentDom = document.getElementById(this.parentDom) + } this.layer.addTo(this.map) @@ -31,7 +41,7 @@ OpenStreetBrowserCategory.prototype.toggle = function () { if (this.isOpen) { this.remove() } else { - this.addTo(this.map, this.parentDom) + this.open() } } diff --git a/src/OpenStreetBrowserIndex.js b/src/OpenStreetBrowserIndex.js index 89c9723a..d0424fe6 100644 --- a/src/OpenStreetBrowserIndex.js +++ b/src/OpenStreetBrowserIndex.js @@ -3,14 +3,27 @@ var OpenStreetBrowserLoader = require('./OpenStreetBrowserLoader') function OpenStreetBrowserIndex (id, data) { this.id = id this.data = data + this.isOpen = false } -OpenStreetBrowserIndex.prototype.addTo = function (map, parentDom) { +OpenStreetBrowserIndex.prototype.setMap = function (map) { + this.map = map +} + +OpenStreetBrowserIndex.prototype.setParentDom = function (parentDom) { + this.parentDom = parentDom +} + +OpenStreetBrowserIndex.prototype.open = function () { + if (typeof this.parentDom === 'string') { + this.parentDom = document.getElementById(this.parentDom) + } + for (var i = 0; i < this.data.subCategories.length; i++) { var data = this.data.subCategories[i] var dom = document.createElement('div') dom.id = 'category-' + data.id - parentDom.appendChild(dom) + this.parentDom.appendChild(dom) var domHeader = document.createElement('header') dom.appendChild(domHeader) @@ -21,7 +34,7 @@ OpenStreetBrowserIndex.prototype.addTo = function (map, parentDom) { domHeader.appendChild(a) var domContent = document.createElement('div') - parentDom.appendChild(domContent) + this.parentDom.appendChild(domContent) } } diff --git a/src/OpenStreetBrowserLoader.js b/src/OpenStreetBrowserLoader.js index f22fdc04..466ef0d6 100644 --- a/src/OpenStreetBrowserLoader.js +++ b/src/OpenStreetBrowserLoader.js @@ -1,9 +1,22 @@ function OpenStreetBrowserLoader () { this.types = {} + this.categories = {} } +OpenStreetBrowserLoader.prototype.setMap = function (map) { + this.map = map +} + +OpenStreetBrowserLoader.prototype.setParentDom = function (parentDom) { + this.parentDom = parentDom +} + +OpenStreetBrowserLoader.prototype.getCategory = function (id, callback) { + if (id in this.categories) { + callback(null, this.categories[id]) + return + } -OpenStreetBrowserLoader.prototype.load = function (id, callback) { function reqListener (req) { if (req.status !== 200) { console.log(req) @@ -22,6 +35,11 @@ OpenStreetBrowserLoader.prototype.load = function (id, callback) { var layer = new this.types[data.type](id, data) } + layer.setMap(this.map) + layer.setParentDom('category-' + id) + + this.categories[id] = layer + callback(null, layer) }