Add load time and current time to metatags

This commit is contained in:
pietervdvn 2021-03-22 01:04:25 +01:00
parent 1a74dd460b
commit 0dce7b1f3b

View file

@ -4,13 +4,15 @@ import opening_hours from "opening_hours";
import {And, Or, Tag} from "./Tags"; import {And, Or, Tag} from "./Tags";
import {Utils} from "../Utils"; import {Utils} from "../Utils";
import CountryCoder from "latlon2country" import CountryCoder from "latlon2country"
import {UIElement} from "../UI/UIElement";
import Combine from "../UI/Base/Combine";
class SimpleMetaTagger { class SimpleMetaTagger {
public readonly keys: string[]; public readonly keys: string[];
public readonly doc: string; public readonly doc: string;
private _f: (feature: any, index: number) => void; private readonly _f: (feature: any, index: number, freshness: Date) => void;
constructor(keys: string[], doc: string, f: ((feature: any, index: number) => void)) { constructor(keys: string[], doc: string, f: ((feature: any, index: number, freshness: Date) => void)) {
this.keys = keys; this.keys = keys;
this.doc = doc; this.doc = doc;
this._f = f; this._f = f;
@ -21,10 +23,10 @@ class SimpleMetaTagger {
} }
} }
addMetaTags(features: any[]) { addMetaTags(features: { feature: any, freshness: Date }[]) {
for (let i = 0; i < features.length; i++) { for (let i = 0; i < features.length; i++) {
let feature = features[i]; let feature = features[i];
this._f(feature, i); this._f(feature.feature, i, feature.freshness);
} }
} }
@ -60,7 +62,7 @@ export default class MetaTagging {
); );
private static country = new SimpleMetaTagger( private static country = new SimpleMetaTagger(
["_country"], "The country code of the property (with latlon2country)", ["_country"], "The country code of the property (with latlon2country)",
(feature, index) => { feature => {
const coder = new CountryCoder("https://pietervdvn.github.io/latlon2country/"); const coder = new CountryCoder("https://pietervdvn.github.io/latlon2country/");
@ -204,7 +206,6 @@ export default class MetaTagging {
const _sidewalkNone = new Tag("sidewalk", "none"); const _sidewalkNone = new Tag("sidewalk", "none");
let parkingStateKnown = true;
let parallelParkingCount = 0; let parallelParkingCount = 0;
@ -219,7 +220,6 @@ export default class MetaTagging {
} else if (_otherParkingMode.matchesProperties(properties)) { } else if (_otherParkingMode.matchesProperties(properties)) {
parallelParkingCount = 0; parallelParkingCount = 0;
} else { } else {
parkingStateKnown = false;
console.log("No parking data for ", properties.name, properties.id, properties) console.log("No parking data for ", properties.name, properties.id, properties)
} }
@ -278,12 +278,27 @@ export default class MetaTagging {
); );
private static currentTime = new SimpleMetaTagger( private static currentTime = new SimpleMetaTagger(
["_date:now"], ["_now:date", "_now:datetime", "_loaded:date", "_loaded:_datetime"],
"Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely", "Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely",
feature => { (feature, _, freshness) => {
const now = new Date(); const now = new Date();
// @ts-ignore
feature.properties["_date:now"] = now.toISOString().splice(0,-5).replace("T", " "); if(typeof freshness === "string" ){
freshness = new Date(freshness)
}
function date(d: Date) {
return d.toISOString().slice(0, 10);
}
function datetime(d: Date) {
return d.toISOString().slice(0, -5).replace("T", " ");
}
feature.properties["_now:date"] = date(now);
feature.properties["_now:datetime"] = datetime(now);
feature.properties["_loaded:date"] = date(freshness);
feature.properties["_loaded:datetime"] = datetime(freshness);
} }
) )
@ -294,7 +309,7 @@ export default class MetaTagging {
MetaTagging.isOpen, MetaTagging.isOpen,
MetaTagging.carriageWayWidth, MetaTagging.carriageWayWidth,
MetaTagging.directionSimplified, MetaTagging.directionSimplified,
// MetaTagging.currentTime MetaTagging.currentTime
]; ];
@ -302,7 +317,7 @@ export default class MetaTagging {
* An actor which adds metatags on every feature in the given object * An actor which adds metatags on every feature in the given object
* The features are a list of geojson-features, with a "properties"-field and geometry * The features are a list of geojson-features, with a "properties"-field and geometry
*/ */
static addMetatags(features: any[]) { static addMetatags(features: {feature: any, freshness: Date}[]) {
for (const metatag of MetaTagging.metatags) { for (const metatag of MetaTagging.metatags) {
try { try {
@ -314,4 +329,19 @@ export default class MetaTagging {
} }
} }
static HelpText() : UIElement{
const subElements: UIElement[] = [];
for (const metatag of MetaTagging.metatags) {
subElements.push(
new Combine([
"<h3>", metatag.keys.join(", "), "</h3>",
metatag.doc]
)
)
}
return new Combine(subElements)
}
} }