Browse Source

Merge branch 'master' into 4-filter

master
parent
commit
ddb9e4baf4
  1. 3
      doc/TwigJS.md
  2. 1
      index.php
  3. 2
      lang/ast.json
  4. 2
      lang/ca.json
  5. 2
      lang/cs.json
  6. 2
      lang/da.json
  7. 4
      lang/de.json
  8. 2
      lang/el.json
  9. 2
      lang/es.json
  10. 2
      lang/et.json
  11. 2
      lang/hu.json
  12. 2
      lang/it.json
  13. 2
      lang/ja.json
  14. 2
      lang/nl.json
  15. 42
      lang/pl.json
  16. 14
      lang/pt-br.json
  17. 2
      lang/pt.json
  18. 2
      lang/ro.json
  19. 2
      lang/ru.json
  20. 2
      lang/sr.json
  21. 2
      lang/template.json
  22. 2
      lang/uk.json
  23. 7
      locales/ast.js
  24. 7
      locales/ca.js
  25. 7
      locales/cs.js
  26. 7
      locales/da.js
  27. 7
      locales/de.js
  28. 7
      locales/el.js
  29. 5
      locales/en.js
  30. 7
      locales/es.js
  31. 7
      locales/et.js
  32. 7
      locales/fr.js
  33. 7
      locales/hu.js
  34. 7
      locales/it.js
  35. 7
      locales/ja.js
  36. 7
      locales/nl.js
  37. 7
      locales/pl.js
  38. 7
      locales/pt-br.js
  39. 7
      locales/pt.js
  40. 7
      locales/ro.js
  41. 7
      locales/ru.js
  42. 7
      locales/sr.js
  43. 7
      locales/uk.js
  44. 2
      modulekit.php
  45. 10
      package.json
  46. 7
      repo.php
  47. 8
      src/CategoryOverpass.js
  48. 2
      src/OpenStreetBrowserLoader.js
  49. 39
      src/RepositoryBase.php
  50. 16
      src/RepositoryDir.php
  51. 16
      src/RepositoryGit.php
  52. 9
      src/category.css
  53. 2
      src/index.js
  54. 4
      src/tagTranslations.js
  55. 4
      src/twigFunctions.js

3
doc/TwigJS.md

@ -45,6 +45,7 @@ When rendering map features, the following properties are available:
* `meta.uid` (UID of the user, who changed the object last)
* `map.zoom` (Current zoom level)
* `const.*` (Values from the 'const' option)
* `user.*` (Values from the user's options, e.g. `user.ui_lang`, `user.data_lang`, ...)
For the info-section of a category the following properties are available:
* `layer_id` (the id of the category)
@ -57,6 +58,7 @@ There are several extra functions defined for the TwigJS language:
* function `tagTransList`: return the translations of the given tag for tags with multiple values separated by ';' (e.g. 'cuisine'). Parameters: key (required, e.g. 'cuisine'), value (required, e.g. 'kebab' or 'kebab;pizza;noodles;burger').
* function `localizedTag`: return a localized tag if available (e.g. 'name:de' for the german translation of the tag). Parameters: tags (the tags property), key prefix (e.g. 'name'). Which language will be returned depends on the "data language" which can be set via Options. If no localized tag is available, the tag value itself will be returned (e.g. value of 'name').
* function `trans`: return the translation of the given string (e.g. 'save', 'unknown', 'unnamed', ...). Parameters: string (the string to translate).
* function `repoTrans`: translate strings from this repositories' language file (located in `lang/xy.json`, where `xy` stands for the current locale).
* function `tagsPrefix(tags, prefix)`: return all tags with the specified prefix. The result will be an array with `{ "en": "name:en", "de": "name:de" }` (for the input `{ "name": "foo", "name:en": "english foo", "name:de": "german foo" }` and the prefix "name:").
* function openingHoursState(opening_hours_definition): returns state of object as string: 'closed', 'open' or 'unknown'.
* function colorInterpolate(map, value): interpolates between two or more colors. E.g. `colorInterpolate([ 'red', 'yellow', 'green' ], 0.75)`.
@ -65,6 +67,7 @@ Extra filters:
* filter websiteUrl: return a valid http link. Example: `{{ "www.google.com"|websiteUrl }}` -> "http://www.google.com"; `{{ "https://google.com"|websiteUrl }}` -> "https://google.com"
* filter `matches`: regular expression match. e.g. `{{ "test"|matches("e(st)$") }}` returns `[ "est", "st" ]`. Returns null if it does not match.
* filter `osmDateParse`: returns an array with the lower and upper boundary of the year of a `start_date` tag. See [https://github.com/plepe/openstreetmap-date-parser](openstreetmap-date-parser) for details.
* filter `osmDateFormat`: returns the date as localized strings. Accept an object for options, e.g. `{{ tags.start_date|osmDateFormat({ format: 'short' }) }}`. See [https://github.com/plepe/openstreetmap-date-format](openstreetmap-date-format) for details.
* filter `natsort`: Sort an array naturally, see [https://www.npmjs.com/package/natsort](natsort) for details.
* filter `unique`: Remove duplicate elements from an array.
* filter `md5`: calculate md5 hash of a string.

1
index.php

@ -55,6 +55,7 @@ html_export_var(array(
<?php print modulekit_include_css(); /* prints all css-includes */ ?>
<?php print_add_html_headers(); /* print additional html headers */ ?>
<script src="dist/openstreetbrowser.js?<?=$modulekit['version']?>"></script>
<script src="dist/locale-<?=$ui_lang?>.js?<?=$modulekit['version']?>"></script>
<?php @include "local-head.php" ?>
</head>
<body>

2
lang/ast.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/ca.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/cs.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/da.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

4
lang/de.json

@ -15,7 +15,7 @@
"export-prepare": "",
"export:GeoJSON": "Als GeoJSON runterladen",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "Einrichtungen",
"header:attributes": "Attribute",
"header:export": "Export",
@ -30,7 +30,7 @@
"more_results": "",
"open": "geöffnet",
"options:data_lang": "Datensprache",
"options:data_lang:desc": null,
"options:data_lang:desc": "",
"options:data_lang:local": "Lokale Sprache",
"options:overpassUrl": "OverpassAPI Adresse",
"options:preferredBaseMap": "Bevorzugte Hintergrundkarte",

2
lang/el.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/es.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/et.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/hu.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "Letöltés GeoJSON formátumban",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "Létesítmények",
"header:attributes": "Tulajdonságok",
"header:export": "Exportálás",

2
lang/it.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/ja.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/nl.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

42
lang/pl.json

@ -1,46 +1,46 @@
{
"available_branches": "",
"back": "",
"categories": "",
"back": "Wstecz",
"categories": "Kategorie",
"category-info-tooltip": "",
"choose_filter": "",
"closed": "",
"default": "",
"edit": "",
"error": "",
"closed": "Zamknięte",
"default": "Domyślne",
"edit": "Edycja",
"error": "Błąd",
"export-all": "",
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",
"header:export": "Eksport",
"header:osm_meta": "",
"images": "",
"loading": "",
"images": "Obrazy",
"loading": "Wczytywanie",
"main:options": "Opcje",
"main:permalink": "",
"more": "więcej",
"more": "Więcej",
"more_categories": "Więcej kategorii",
"more_categories_gitea": "",
"more_results": "",
"open": "",
"more_results": "Więcej wyników",
"open": "Otwórz",
"options:data_lang": "Język danych",
"options:data_lang:desc": "",
"options:data_lang:local": "Język lokalny",
"options:overpassUrl": "",
"options:preferredBaseMap": "",
"options:ui_lang": "Język interfejsu",
"other": "",
"other": "Inne",
"repo-use-as-base": "",
"repositories": "",
"repositories": "Repozytoria",
"save": "Zapisz",
"show details": "",
"toggle_fullscreen": "",
"unknown": "",
"unnamed": "nienazwane",
"show details": "Pokaż szczegóły",
"toggle_fullscreen": "Przełącz pełny ekran",
"unknown": "Nieznane",
"unnamed": "Nienazwane",
"wikipedia:no-url-parse": "",
"zoom_in_appear": "",
"zoom_in_more": ""
"zoom_in_appear": "Powiększ widoczność",
"zoom_in_more": "Powiększ bardziej"
}

14
lang/pt-br.json

@ -1,7 +1,7 @@
{
"available_branches": "",
"available_branches": "Redes disponíveis",
"back": "voltar",
"categories": "",
"categories": "Categorias",
"category-info-tooltip": "Info & Legenda",
"choose_filter": "",
"closed": "fechado",
@ -23,11 +23,11 @@
"images": "Imagens",
"loading": "Carregando...",
"main:options": "Opções",
"main:permalink": "",
"main:permalink": "Link permanente",
"more": "mais",
"more_categories": "Mais categorias",
"more_categories_gitea": "Criar &amp; melhorar categorias você mesmo!",
"more_results": "",
"more_results": "Exibir mais resultados",
"open": "abrir",
"options:data_lang": "Língua dos dados",
"options:data_lang:desc": "Muitos elementos do mapa possuem seus nomes (e outras etiquetas) traduzidas para línguas diferentes (p.ex. com 'name:en', 'name:de'). Especificar qual língua deve ser usada para exibição, ou 'Língua local' de forma que sempre os valores não tranduzidos (p.ex. 'name') sejam usados.",
@ -36,8 +36,8 @@
"options:preferredBaseMap": "Mapa-base preferido",
"options:ui_lang": "Língua da interface",
"other": "Outro",
"repo-use-as-base": "",
"repositories": "",
"repo-use-as-base": "Usar este repositório como repositório base",
"repositories": "Repositórios",
"save": "Salvar",
"show details": "mostrar detalhes",
"toggle_fullscreen": "Alternar modo tela cheia",
@ -45,5 +45,5 @@
"unnamed": "sem nome",
"wikipedia:no-url-parse": "Não se pôde analisar URL da Wikipédia",
"zoom_in_appear": "aproxime para elementos do mapa aparecer",
"zoom_in_more": "aproxime para mais elementos do mapa"
"zoom_in_more": "aproxime para mais elementos no mapa"
}

2
lang/pt.json

@ -15,7 +15,7 @@
"export-prepare": "",
"export:GeoJSON": "Descarregar como GeoJSON",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "Instalações",
"header:attributes": "Atributos",
"header:export": "Exportar",

2
lang/ro.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/ru.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/sr.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/template.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

2
lang/uk.json

@ -12,7 +12,7 @@
"export-prepare": "",
"export:GeoJSON": "",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "",
"header:attributes": "",
"header:export": "",

7
locales/ast.js

@ -0,0 +1,7 @@
global.locale = {
id: 'ast',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
//require('moment/locale/ast')

7
locales/ca.js

@ -0,0 +1,7 @@
global.locale = {
id: 'ca',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/de')
}
require('moment/locale/ca')

7
locales/cs.js

@ -0,0 +1,7 @@
global.locale = {
id: 'cs',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/cs')

7
locales/da.js

@ -0,0 +1,7 @@
global.locale = {
id: 'da',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/da')

7
locales/de.js

@ -0,0 +1,7 @@
global.locale = {
id: 'de',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/de')
}
require('moment/locale/de')

7
locales/el.js

@ -0,0 +1,7 @@
global.locale = {
id: 'el',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/el')

5
locales/en.js

@ -0,0 +1,5 @@
global.locale = {
id: 'en',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}

7
locales/es.js

@ -0,0 +1,7 @@
global.locale = {
id: 'es',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/es')

7
locales/et.js

@ -0,0 +1,7 @@
global.locale = {
id: 'et',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/et')

7
locales/fr.js

@ -0,0 +1,7 @@
global.locale = {
id: 'fr',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/fr')

7
locales/hu.js

@ -0,0 +1,7 @@
global.locale = {
id: 'hu',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/hu')

7
locales/it.js

@ -0,0 +1,7 @@
global.locale = {
id: 'it',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/it')

7
locales/ja.js

@ -0,0 +1,7 @@
global.locale = {
id: 'ja',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/ja')

7
locales/nl.js

@ -0,0 +1,7 @@
global.locale = {
id: 'nl',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/nl')

7
locales/pl.js

@ -0,0 +1,7 @@
global.locale = {
id: 'pl',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/pl')

7
locales/pt-br.js

@ -0,0 +1,7 @@
global.locale = {
id: 'pt-br',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/pt-br')

7
locales/pt.js

@ -0,0 +1,7 @@
global.locale = {
id: 'pt',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/pt')

7
locales/ro.js

@ -0,0 +1,7 @@
global.locale = {
id: 'ro',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/ro')

7
locales/ru.js

@ -0,0 +1,7 @@
global.locale = {
id: 'ru',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/ru')

7
locales/sr.js

@ -0,0 +1,7 @@
global.locale = {
id: 'sr',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/sr')

7
locales/uk.js

@ -0,0 +1,7 @@
global.locale = {
id: 'uk',
moment: require('moment'),
osmDateFormatTemplates: require('openstreetmap-date-format/templates/en')
}
require('moment/locale/uk')

2
modulekit.php

@ -25,4 +25,4 @@ $include = array(
'style.css',
),
);
$version = "4.3";
$version = "4.4";

10
package.json

@ -1,6 +1,6 @@
{
"name": "openstreetbrowser",
"version": "4.3.2",
"version": "4.4.0",
"description": "A re-make of the famous OpenStreetBrowser (pure JS, using Overpass API)",
"main": "src/export.js",
"repository": "https://github.com/plepe/openstreetbrowser",
@ -34,9 +34,10 @@
"natsort": "^1.0.6",
"opening_hours": "^3.5.0",
"openstreetbrowser-categories-main": "https://github.com/plepe/openstreetbrowser-categories-main",
"openstreetmap-date-format": "^0.1.0",
"openstreetmap-date-parser": "^0.1.0",
"openstreetmap-tag-translations": "https://github.com/plepe/openstreetmap-tag-translations",
"overpass-layer": "^2.0.0",
"overpass-layer": "^2.3.0",
"query-string": "^5.0.0",
"sheet-router": "^4.2.3",
"temaki": "^1.0.0",
@ -68,8 +69,9 @@
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "browserify -g browserify-css src/index.js -o dist/tmp1.js && babel --presets env dist/tmp1.js > dist/tmp2.js && mv dist/tmp2.js dist/openstreetbrowser.js && rm dist/tmp1.js",
"watch": "watchify --debug -g browserify-css src/index.js -o dist/openstreetbrowser.js -v",
"build": "npm run build-locales && browserify -g browserify-css src/index.js -o dist/tmp1.js && babel --presets env dist/tmp1.js > dist/tmp2.js && mv dist/tmp2.js dist/openstreetbrowser.js && rm dist/tmp1.js",
"build-locales": "for i in `ls locales/` ; do browserify locales/$i -o dist/locale-$i ; done",
"watch": "npm run build-locales && watchify --debug -g browserify-css src/index.js -o dist/openstreetbrowser.js -v",
"prepublish": "npm run build",
"lint": "standard src/*.js"
},

7
repo.php

@ -35,6 +35,9 @@ if (!isset($_REQUEST['repo'])) {
$fullRepoId = $_REQUEST['repo'];
list($repoId, $branchId) = explode('~', $fullRepoId);
if (array_key_exists('lang', $_REQUEST)) {
$fullRepoId .= '~' . $_REQUEST['lang'];
}
if (!array_key_exists($repoId, $allRepositories)) {
Header("HTTP/1.1 404 Repository not found");
@ -67,7 +70,9 @@ if (isset($config['cache'])) {
}
}
$data = $repo->data();
$data = $repo->data($_REQUEST);
$repo->updateLang($data, $_REQUEST);
if (!array_key_exists('index', $data['categories'])) {
$data['categories']['index'] = array(

8
src/CategoryOverpass.js

@ -109,6 +109,12 @@ function CategoryOverpass (options, data) {
this.layer.on('add', (ob, data) => this.emit('add', ob, data))
this.layer.on('remove', (ob, data) => this.emit('remove', ob, data))
this.layer.on('zoomChange', (ob, data) => this.emit('remove', ob, data))
this.layer.on('twigData',
(ob, data, result) => {
result.user = global.options
global.currentCategory = this
}
)
call_hooks('category-overpass-init', this)
@ -200,7 +206,7 @@ CategoryOverpass.prototype.updateAssets = function (div) {
var src = img.getAttribute('src') || img.getAttribute('data-src')
if (src === null) {
} else if (src.match(/^(maki|temaki):.*/)) {
let m = src.match(/^(maki|temaki):([a-z0-9-]*)(?:\?(.*))?$/)
let m = src.match(/^(maki|temaki):([a-z0-9-_]*)(?:\?(.*))?$/)
if (m) {
let span = document.createElement('span')
img.parentNode.insertBefore(span, img)

2
src/OpenStreetBrowserLoader.js

@ -58,6 +58,7 @@ OpenStreetBrowserLoader.prototype.getCategory = function (id, options, callback)
this.getCategoryFromData(ids.id, opt, repoData.categories[ids.entityId], function (err, category) {
if (category) {
category.setMap(this.map)
category.lang = repoData.lang
}
callback(err, category)
@ -112,6 +113,7 @@ OpenStreetBrowserLoader.prototype.getRepo = function (repo, options, callback) {
if (repo) {
param.push('repo=' + encodeURIComponent(repo))
}
param.push('lang=' + encodeURIComponent(ui_lang))
param.push(config.categoriesRev)
param = param.length ? '?' + param.join('&') : ''

39
src/RepositoryBase.php

@ -23,16 +23,53 @@ class RepositoryBase {
return $ret;
}
function data () {
function data ($options) {
$data = array(
'categories' => array(),
'templates' => array(),
'timestamp' => Date(DATE_ISO8601, $this->timestamp()),
'lang' => array(),
);
return $data;
}
function updateLang (&$data, $options) {
$lang = array_key_exists('lang', $options) ? $options['lang'] : 'en';
if (!is_array($data['lang'])) {
$data['lang'] = array();
}
foreach ($data['categories'] as $id => $category) {
$name = null;
if (array_key_exists("category:{$id}", $data['lang'])) {
$name = $data['lang']["category:{$id}"];
if ($name !== '' && $name !== null) {
$data['categories'][$id]['name'] = array(
$lang => $data['lang']["category:{$id}"],
);
}
}
elseif (array_key_exists('name', $category)) {
if (array_key_exists($lang, $category['name'])) {
$name = $category['name'][$lang];
}
elseif (array_key_exists('en', $category['name'])) {
$name = $category['name']['en'];
}
elseif (sizeof($category['name'])) {
$name = $category['name'][array_keys($category['name'])[0]];
}
$data['lang']["category:{$id}"] = $name;
$data['categories'][$id]['name'] = array($lang => $name);
}
}
}
function isCategory ($data) {
if (!array_key_exists('type', $data)) {
return false;

16
src/RepositoryDir.php

@ -14,8 +14,20 @@ class RepositoryDir extends RepositoryBase {
return $ts;
}
function data () {
$data = parent::data();
function data ($options) {
$data = parent::data($options);
$lang = array_key_exists('lang', $options) ? $options['lang'] : 'en';
if (file_exists("{$this->path}/lang/{$lang}.json")) {
$data['lang'] = json_decode(file_get_contents("{$this->path}/lang/en.json"), true);
$lang = json_decode(file_get_contents("{$this->path}/lang/{$options['lang']}.json"), true);
foreach ($lang as $k => $v) {
if ($v !== null && $v !== '') {
$data['lang'][$k] = $v;
}
}
}
$d = opendir($this->path);
while ($f = readdir($d)) {

16
src/RepositoryGit.php

@ -29,8 +29,20 @@ class RepositoryGit extends RepositoryBase {
return $ts;
}
function data () {
$data = parent::data();
function data ($options) {
$data = parent::data($options);
$lang = array_key_exists('lang', $options) ? $options['lang'] : 'en';
if (true) {
$data['lang'] = json_decode(shell_exec("cd " . escapeShellArg($this->path) . "; git show {$this->branchEsc}:lang/en.json 2>/dev/null"), true);
$lang = json_decode(shell_exec("cd " . escapeShellArg($this->path) . "; git show {$this->branchEsc}:lang/" . escapeShellArg("{$options['lang']}.json") . " 2>/dev/null"), true);
foreach ($lang as $k => $v) {
if ($v !== null && $v !== '') {
$data['lang'][$k] = $v;
}
}
}
$d = popen("cd " . escapeShellArg($this->path) . "; git ls-tree {$this->branchEsc}", "r");
while ($r = fgets($d)) {

9
src/category.css

@ -152,3 +152,12 @@
.overpass-layer-icon div.sign {
font-size: 15px;
}
.info .details {
display: none;
}
.info .infoShowDetails .details {
display: initial;
}
.info .infoShowDetails .summary {
display: none;
}

2
src/index.js

@ -278,7 +278,7 @@ window.showDetails = function (data, category) {
div = document.createElement('div')
div.className = 'description'
div.innerHTML = data.data.description || ''
div.innerHTML = data.data.popupDescription || data.data.description || ''
dom.appendChild(div)
data.sublayer.updateAssets(div, data)

4
src/tagTranslations.js

@ -25,6 +25,10 @@ OverpassLayer.twig.extendFunction('trans', function () {
OverpassLayer.twig.extendFunction('isTranslated', function (str) {
return tagTranslationsIsTranslated(str)
})
OverpassLayer.twig.extendFunction('repoTrans', function (str) {
let lang = global.currentCategory.lang
return str in lang ? lang[str] : str
})
function tagTranslationsIsTranslated (str) {
return !(str in lang_non_translated) && (str in lang_str)

4
src/twigFunctions.js

@ -2,6 +2,7 @@ var OverpassLayer = require('overpass-layer')
var OpeningHours = require('opening_hours')
var colorInterpolate = require('color-interpolate')
var osmParseDate = require('openstreetmap-date-parser')
var osmFormatDate = require('openstreetmap-date-format')
const natsort = require('natsort')
const md5 = require('md5')
@ -66,6 +67,9 @@ OverpassLayer.twig.extendFunction('colorInterpolate', function (map, value) {
OverpassLayer.twig.extendFilter('osmParseDate', function (value) {
return osmParseDate(value)
})
OverpassLayer.twig.extendFilter('osmFormatDate', function (value, param) {
return osmFormatDate(value, param.length ? param[0] : {})
})
OverpassLayer.twig.extendFilter('md5', function (value) {
if (!(value in md5cache)) {
md5cache[value] = md5(value)

Loading…
Cancel
Save