Browse Source

ObjectDisplay: convert to class

master
parent
commit
692c046b1e
  1. 124
      src/ObjectDisplay.js
  2. 10
      src/index.js
  3. 119
      src/objectDisplay.js

124
src/ObjectDisplay.js

@ -0,0 +1,124 @@
const exportAll = require('./exportAll')
const tagsDisplay = require('./tagsDisplay').display
const displayBlock = require('./displayBlock')
module.exports = class ObjectDisplay {
constructor ({feature, category, dom, displayId, fallbackIds}, callback) {
if (!fallbackIds) {
fallbackIds = []
}
var div, h, dt, dd, li, a
var k
dom.innerHTML = ''
let header = document.createElement('div')
header.className = 'header'
dom.appendChild(header)
div = document.createElement('div')
div.className = 'description'
div.innerHTML = getProperty(feature.data, 'description', displayId, fallbackIds)
header.appendChild(div)
feature.sublayer.updateAssets(div, feature)
div = document.createElement('div')
div.className = 'title'
div.innerHTML = getProperty(feature.data, 'title', displayId, fallbackIds)
header.appendChild(div)
feature.sublayer.updateAssets(div, feature)
div = document.createElement('div')
div.className = 'body'
dom.appendChild(div)
function updateBody (div) {
div.innerHTML = getProperty(feature.data, 'body', displayId, fallbackIds)
feature.sublayer.updateAssets(div, feature)
}
feature.object.on('update', updateBody.bind(this, div))
updateBody(div)
let body = document.createElement('div')
body.className = 'body'
dom.appendChild(body)
category.renderTemplate(feature, displayId + 'Body', (err, result) => {
body.innerHTML = result
feature.sublayer.updateAssets(body, feature)
})
displayBlock({
dom,
content: exportAll(feature),
title: lang('header:export'),
order: 5
})
displayBlock({
dom,
content: tagsDisplay(feature.object.tags),
title: lang('header:attributes'),
order: 10
})
div = document.createElement('dl')
div.className = 'meta'
dt = document.createElement('dt')
dt.appendChild(document.createTextNode('id'))
div.appendChild(dt)
dd = document.createElement('dd')
a = document.createElement('a')
a.appendChild(document.createTextNode(feature.object.type + '/' + feature.object.osm_id))
a.href = config.urlOpenStreetMap + '/' + feature.object.type + '/' + feature.object.osm_id
a.target = '_blank'
dd.appendChild(a)
div.appendChild(dd)
for (k in feature.object.meta) {
dt = document.createElement('dt')
dt.appendChild(document.createTextNode(k))
div.appendChild(dt)
dd = document.createElement('dd')
dd.appendChild(document.createTextNode(feature.object.meta[k]))
div.appendChild(dd)
}
displayBlock({
dom,
content: div,
title: lang('header:osm_meta'),
order: 11
})
call_hooks_callback('show-' + displayId, feature, category, dom, err => {
if (err.length) {
return callback(err.join(', '))
}
callback()
})
}
close () {
}
}
function getProperty(data, id, displayId, fallbackIds) {
const idCap = id[0].toUpperCase() + id.substr(1)
let variants = [displayId + idCap]
variants = variants.concat(fallbackIds.map(fid => fid + idCap))
variants.push(id)
variants = variants.filter(vid => vid in data)
if (variants.length) {
return data[variants[0]]
}
return ''
}

10
src/index.js

@ -42,7 +42,8 @@ require('./GeoInfo')
require('./PluginMeasure')
require('./PluginGeoLocate')
require('./tagsDisplay-tag2link')
const objectDisplay = require('./objectDisplay')
const ObjectDisplay = require('./ObjectDisplay')
let currentObjectDisplay = null
window.onload = function () {
var initState = config.defaultView
@ -240,7 +241,7 @@ function show (id, options, callback) {
}
if (options.showDetails) {
objectDisplay({
currentObjectDisplay = new ObjectDisplay({
feature: data,
dom: document.getElementById('contentDetails'),
category,
@ -258,6 +259,11 @@ function show (id, options, callback) {
}
function hide () {
if (currentObjectDisplay) {
currentObjectDisplay.close()
currentObjectDisplay = null
}
call_hooks('hide-' + document.getElementById('content').className)
document.getElementById('content').className = 'list'
}

119
src/objectDisplay.js

@ -1,119 +0,0 @@
const exportAll = require('./exportAll')
const tagsDisplay = require('./tagsDisplay').display
const displayBlock = require('./displayBlock')
function getProperty(data, id, displayId, fallbackIds) {
const idCap = id[0].toUpperCase() + id.substr(1)
let variants = [displayId + idCap]
variants = variants.concat(fallbackIds.map(fid => fid + idCap))
variants.push(id)
variants = variants.filter(vid => vid in data)
if (variants.length) {
return data[variants[0]]
}
return ''
}
module.exports = function objectDisplay ({feature, category, dom, displayId, fallbackIds}, callback) {
if (!fallbackIds) {
fallbackIds = []
}
var div, h, dt, dd, li, a
var k
dom.innerHTML = ''
let header = document.createElement('div')
header.className = 'header'
dom.appendChild(header)
div = document.createElement('div')
div.className = 'description'
div.innerHTML = getProperty(feature.data, 'description', displayId, fallbackIds)
header.appendChild(div)
feature.sublayer.updateAssets(div, feature)
div = document.createElement('div')
div.className = 'title'
div.innerHTML = getProperty(feature.data, 'title', displayId, fallbackIds)
header.appendChild(div)
feature.sublayer.updateAssets(div, feature)
div = document.createElement('div')
div.className = 'body'
dom.appendChild(div)
function updateBody (div) {
div.innerHTML = getProperty(feature.data, 'body', displayId, fallbackIds)
feature.sublayer.updateAssets(div, feature)
}
feature.object.on('update', updateBody.bind(this, div))
updateBody(div)
div = document.createElement('div')
div.className = 'body'
dom.appendChild(div)
category.renderTemplate(feature, displayId + 'Body', function (div, err, result) {
div.innerHTML = result
feature.sublayer.updateAssets(div, feature)
}.bind(this, div))
displayBlock({
dom,
content: exportAll(feature),
title: lang('header:export'),
order: 5
})
displayBlock({
dom,
content: tagsDisplay(feature.object.tags),
title: lang('header:attributes'),
order: 10
})
div = document.createElement('dl')
div.className = 'meta'
dt = document.createElement('dt')
dt.appendChild(document.createTextNode('id'))
div.appendChild(dt)
dd = document.createElement('dd')
a = document.createElement('a')
a.appendChild(document.createTextNode(feature.object.type + '/' + feature.object.osm_id))
a.href = config.urlOpenStreetMap + '/' + feature.object.type + '/' + feature.object.osm_id
a.target = '_blank'
dd.appendChild(a)
div.appendChild(dd)
for (k in feature.object.meta) {
dt = document.createElement('dt')
dt.appendChild(document.createTextNode(k))
div.appendChild(dt)
dd = document.createElement('dd')
dd.appendChild(document.createTextNode(feature.object.meta[k]))
div.appendChild(dd)
}
displayBlock({
dom,
content: div,
title: lang('header:osm_meta'),
order: 11
})
call_hooks_callback('show-' + displayId, feature, category, dom, err => {
if (err.length) {
return callback(err.join(', '))
}
callback()
})
}
Loading…
Cancel
Save