Add a personal, configurable quest

This commit is contained in:
Pieter Vander Vennet 2020-07-31 17:11:44 +02:00
parent 7ec00a3301
commit b36b103ed3
7 changed files with 55 additions and 54 deletions

View file

@ -1,18 +1,18 @@
import {Groen} from "./Layouts/Groen";
import {GRB} from "./Layouts/GRB";
import {Artworks} from "./Layouts/Artworks";
import {Bookcases} from "./Layouts/Bookcases";
import Cyclofix from "./Layouts/Cyclofix";
import {WalkByBrussels} from "./Layouts/WalkByBrussels";
import {All} from "./Layouts/All"; import {All} from "./Layouts/All";
import {Layout} from "./Layout";
import {MetaMap} from "./Layouts/MetaMap";
import {StreetWidth} from "./Layouts/StreetWidth"; import {StreetWidth} from "./Layouts/StreetWidth";
import {Natuurpunt} from "./Layouts/Natuurpunt"; import {LayerDefinition} from "./LayerDefinition";
import {ClimbingTrees} from "./Layouts/ClimbingTrees"; import {ClimbingTrees} from "./Layouts/ClimbingTrees";
import {Smoothness} from "./Layouts/Smoothness"; import {Smoothness} from "./Layouts/Smoothness";
import {LayerDefinition} from "./LayerDefinition"; import {Natuurpunt} from "./Layouts/Natuurpunt";
import {Groen} from "./Layouts/Groen";
import Cyclofix from "./Layouts/Cyclofix";
import {Layout} from "./Layout";
import {CustomLayout} from "../Logic/CustomLayers"; import {CustomLayout} from "../Logic/CustomLayers";
import {GRB} from "./Layouts/GRB";
import {Artworks} from "./Layouts/Artworks";
import {WalkByBrussels} from "./Layouts/WalkByBrussels";
import {MetaMap} from "./Layouts/MetaMap";
import {Bookcases} from "./Layouts/Bookcases";
export class AllKnownLayouts { export class AllKnownLayouts {

View file

@ -1,15 +1,10 @@
import {UIEventSource} from "../UI/UIEventSource"; import {UIEventSource} from "../UI/UIEventSource";
import {UIElement} from "../UI/UIElement";
export class LocalStorageSource { export class LocalStorageSource {
static Get(key: string, defaultValue: string = undefined): UIEventSource<string> { static Get(key: string, defaultValue: string = undefined): UIEventSource<string> {
if (UIElement.runningFromConsole) { try {
// ignore when running from the console
return new UIEventSource<string>(defaultValue);
}
const saved = localStorage.getItem(key); const saved = localStorage.getItem(key);
@ -20,5 +15,8 @@ export class LocalStorageSource {
console.log("Wriging ", key, data) console.log("Wriging ", key, data)
}); });
return source; return source;
} catch (e) {
return new UIEventSource<string>(defaultValue);
}
} }
} }

View file

@ -2,11 +2,13 @@
* Wraps the query parameters into UIEventSources * Wraps the query parameters into UIEventSources
*/ */
import {UIEventSource} from "../UI/UIEventSource"; import {UIEventSource} from "../UI/UIEventSource";
import {UIElement} from "../UI/UIElement";
export class QueryParameters { export class QueryParameters {
private static order: string [] = ["layout","test","z","lat","lon"]; private static order: string [] = ["layout","test","z","lat","lon"];
private static knownSources = QueryParameters.init(); private static knownSources = {};
private static initialized = false;
private static defaults = {} private static defaults = {}
private static addOrder(key){ private static addOrder(key){
@ -16,11 +18,13 @@ export class QueryParameters {
} }
private static init() { private static init() {
const knownSources = {}
if(window === undefined){ if(this.initialized){
return; return;
} }
if (window.location.search) { this.initialized = true;
if (window?.location?.search) {
const params = window.location.search.substr(1).split("&"); const params = window.location.search.substr(1).split("&");
for (const param of params) { for (const param of params) {
const kv = param.split("="); const kv = param.split("=");
@ -29,10 +33,9 @@ export class QueryParameters {
const v = kv[1]; const v = kv[1];
const source = new UIEventSource<string>(v); const source = new UIEventSource<string>(v);
source.addCallback(() => QueryParameters.Serialize()) source.addCallback(() => QueryParameters.Serialize())
knownSources[key] = source; QueryParameters.knownSources[key] = source;
} }
} }
return knownSources;
} }
private static Serialize() { private static Serialize() {
@ -51,6 +54,9 @@ export class QueryParameters {
} }
public static GetQueryParameter(key: string, deflt: string): UIEventSource<string> { public static GetQueryParameter(key: string, deflt: string): UIEventSource<string> {
if(!this.initialized){
this.init();
}
if (deflt !== undefined) { if (deflt !== undefined) {
QueryParameters.defaults[key] = deflt; QueryParameters.defaults[key] = deflt;
} }

View file

@ -25,6 +25,7 @@ export class State {
// The singleton of the global state // The singleton of the global state
public static state: State; public static state: State;
public static runningFromConsole: boolean = false;
/** /**
THe layout to use THe layout to use
@ -176,6 +177,10 @@ export class State {
"Beantwoorden van vragen met #MapComplete voor vragenset #" + this.layoutToUse.data.name, "Beantwoorden van vragen met #MapComplete voor vragenset #" + this.layoutToUse.data.name,
this); this);
if(State.runningFromConsole){
console.warn("running from console - not initializing map. Assuming test.html");
return;
}
if (document.getElementById("leafletDiv") === null) { if (document.getElementById("leafletDiv") === null) {

View file

@ -1,9 +1,6 @@
import {UIEventSource} from "../UIEventSource"; import {UIEventSource} from "../UIEventSource";
import {LocalStorageSource} from "../../Logic/LocalStorageSource"; import {LocalStorageSource} from "../../Logic/LocalStorageSource";
import {DropDown} from "../Input/DropDown";
import {Layout} from "../../Customizations/Layout";
import {UIElement} from "../UIElement"; import {UIElement} from "../UIElement";
import {State} from "../../State";
export default class Locale { export default class Locale {
@ -11,10 +8,12 @@ export default class Locale {
public static language: UIEventSource<string> = Locale.setup(); public static language: UIEventSource<string> = Locale.setup();
private static setup() { private static setup() {
const source = LocalStorageSource.Get('language', "en"); const source = LocalStorageSource.Get('language', "en");
if (!UIElement.runningFromConsole) {
// @ts-ignore // @ts-ignore
window.setLanguage = function (language: string) { window.setLanguage = function (language: string) {
source.setData(language) source.setData(language)
} }
}
return source; return source;
} }

View file

@ -25,6 +25,9 @@ export class Utils {
} }
static DoEvery(millis: number, f: (() => void)) { static DoEvery(millis: number, f: (() => void)) {
if(State.runningFromConsole){
return;
}
window.setTimeout( window.setTimeout(
function () { function () {
f(); f();

View file

@ -1,25 +1,15 @@
import {Groen} from "./Customizations/Layouts/Groen"; import {UIElement} from "./UI/UIElement";
import {Bookcases} from "./Customizations/Layouts/Bookcases"; UIElement.runningFromConsole = true;
import {GRB} from "./Customizations/Layouts/GRB";
import Cyclofix from "./Customizations/Layouts/Cyclofix";
import {WalkByBrussels} from "./Customizations/Layouts/WalkByBrussels";
import {MetaMap} from "./Customizations/Layouts/MetaMap";
import {StreetWidth} from "./Customizations/Layouts/StreetWidth";
import {Natuurpunt} from "./Customizations/Layouts/Natuurpunt";
import {AllKnownLayouts} from "./Customizations/AllKnownLayouts"; import {AllKnownLayouts} from "./Customizations/AllKnownLayouts";
import {Layout} from "./Customizations/Layout"; import {Layout} from "./Customizations/Layout";
import {readFileSync, writeFile, writeFileSync} from "fs"; import {readFileSync, writeFile, writeFileSync} from "fs";
import {Utils} from "./Utils";
import svg2img from 'promise-svg2img'; import svg2img from 'promise-svg2img';
import Translation from "./UI/i18n/Translation"; import Translation from "./UI/i18n/Translation";
import Locale from "./UI/i18n/Locale"; import Locale from "./UI/i18n/Locale";
import Translations from "./UI/i18n/Translations"; import Translations from "./UI/i18n/Translations";
import {UIElement} from "./UI/UIElement";
import {LayerDefinition} from "./Customizations/LayerDefinition"; import {LayerDefinition} from "./Customizations/LayerDefinition";
console.log("Building the layouts") console.log("Building the layouts")
UIElement.runningFromConsole = true;
function enc(str: string): string { function enc(str: string): string {
return encodeURIComponent(str.toLowerCase()); return encodeURIComponent(str.toLowerCase());
@ -73,7 +63,6 @@ function validate(layout: Layout) {
} }
const alreadyWritten = [] const alreadyWritten = []
function createIcon(iconPath: string, size: number) { function createIcon(iconPath: string, size: number) {
@ -110,7 +99,7 @@ function createIcon(iconPath: string, size: number) {
} }
function createManifest(layout: Layout, relativePath: string) { function createManifest(layout: Layout, relativePath: string) {
const name = Utils.Upper(layout.name); const name = layout.name;
const icons = []; const icons = [];
@ -151,7 +140,6 @@ function createManifest(layout: Layout, relativePath: string) {
} }
const template = readFileSync("index.html", "utf8"); const template = readFileSync("index.html", "utf8");
function createLandingPage(layout: Layout) { function createLandingPage(layout: Layout) {
Locale.language.setData(layout.supportedLanguages[0]); Locale.language.setData(layout.supportedLanguages[0]);
@ -172,9 +160,9 @@ function createLandingPage(layout: Layout) {
`<link rel="icon" href="${layout.icon}" sizes="any" type="image/svg+xml">`) `<link rel="icon" href="${layout.icon}" sizes="any" type="image/svg+xml">`)
} }
const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap"] const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap"]
const all = AllKnownLayouts.allSets; const all = AllKnownLayouts.allSets;
/*
for (const layoutName in all) { for (const layoutName in all) {
if (blacklist.indexOf(layoutName.toLowerCase()) >= 0) { if (blacklist.indexOf(layoutName.toLowerCase()) >= 0) {
console.log(`Skipping a layout with name${layoutName}, it is on the blacklist`); console.log(`Skipping a layout with name${layoutName}, it is on the blacklist`);
@ -197,3 +185,5 @@ for (const layoutName in all) {
} }
Translations.CountTranslations(); Translations.CountTranslations();
*/