Browse Source

Merge pull request #10 from plepe/master

Sync
master
Igor Eliezer 6 years ago
committed by GitHub
parent
commit
3304326acb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      doc/Icons.md
  2. 3
      doc/TwigJS.md
  3. 1
      index.php
  4. 2
      lang/ast.json
  5. 2
      lang/ca.json
  6. 2
      lang/cs.json
  7. 2
      lang/da.json
  8. 4
      lang/de.json
  9. 2
      lang/el.json
  10. 2
      lang/es.json
  11. 2
      lang/et.json
  12. 2
      lang/hu.json
  13. 2
      lang/it.json
  14. 2
      lang/ja.json
  15. 2
      lang/nl.json
  16. 42
      lang/pl.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. 2
      lib/modulekit/form
  24. 7
      locales/ast.js
  25. 7
      locales/ca.js
  26. 7
      locales/cs.js
  27. 7
      locales/da.js
  28. 7
      locales/de.js
  29. 7
      locales/el.js
  30. 5
      locales/en.js
  31. 7
      locales/es.js
  32. 7
      locales/et.js
  33. 7
      locales/fr.js
  34. 7
      locales/hu.js
  35. 7
      locales/it.js
  36. 7
      locales/ja.js
  37. 7
      locales/nl.js
  38. 7
      locales/pl.js
  39. 7
      locales/pt-br.js
  40. 7
      locales/pt.js
  41. 7
      locales/ro.js
  42. 7
      locales/ru.js
  43. 7
      locales/sr.js
  44. 7
      locales/uk.js
  45. 2
      modulekit.php
  46. 10
      package.json
  47. 7
      repo.php
  48. 8
      src/CategoryOverpass.js
  49. 2
      src/OpenStreetBrowserLoader.js
  50. 39
      src/RepositoryBase.php
  51. 16
      src/RepositoryDir.php
  52. 16
      src/RepositoryGit.php
  53. 2
      src/index.js
  54. 4
      src/tagTranslations.js
  55. 4
      src/twigFunctions.js

6
doc/Icons.md

@ -15,10 +15,10 @@ You may upload images to your repository and use them via a relative image link:
This will include the image from your repository (when uploaded to your 'img' directory).
#### Font Awesome Icons
[Font Awesome 5](https://fontawesome.com/) is included in OpenStreetBrowser, therefore you can use, e.g.:
[Font Awesome 5 Free](https://fontawesome.com/) is included in OpenStreetBrowser, therefore you can use, e.g.:
```html
<i class="fas fa-compass" aria-hidden="true"></i> <!-- solid -->
<i class="far fa-compass" aria-hidden="true"></i> <!-- regular -->
<i class="fas fa-compass"></i> <!-- solid -->
<i class="far fa-compass"></i> <!-- regular -->
```
You can use normal CSS to modify its look, e.g.

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

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

2
lang/ca.json

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

2
lang/cs.json

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

2
lang/da.json

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

4
lang/de.json

@ -14,7 +14,7 @@
"export-prepare": "",
"export:GeoJSON": "Als GeoJSON runterladen",
"export:OSMJSON": "",
"export:OSMXML": null,
"export:OSMXML": "",
"facilities": "Einrichtungen",
"header:attributes": "Attribute",
"header:export": "Export",
@ -29,7 +29,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

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

2
lang/es.json

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

2
lang/et.json

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

2
lang/hu.json

@ -11,7 +11,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

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

2
lang/ja.json

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

2
lang/nl.json

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

42
lang/pl.json

@ -1,45 +1,45 @@
{
"available_branches": "",
"back": "",
"categories": "",
"back": "Wstecz",
"categories": "Kategorie",
"category-info-tooltip": "",
"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"
}

2
lang/pt.json

@ -14,7 +14,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

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

2
lang/ru.json

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

2
lang/sr.json

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

2
lang/template.json

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

2
lang/uk.json

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

2
lib/modulekit/form

@ -1 +1 @@
Subproject commit 5d39b2f61b7eda9a635414acaeb3c4e0dc524490
Subproject commit 50f1ea5eb822240876ed89504e3180f9c7dcbc05

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",
@ -33,9 +33,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",
@ -67,8 +68,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

@ -107,6 +107,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
}
)
p = document.createElement('div')
p.className = 'loadingIndicator'
@ -162,7 +168,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)) {

2
src/index.js

@ -277,7 +277,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