Fixed custom generator by fixing dependencies
This commit is contained in:
parent
d326e56b15
commit
9c53fe9868
5 changed files with 88 additions and 78 deletions
23
UI/LanguagePicker.ts
Normal file
23
UI/LanguagePicker.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import {UIElement} from "./UIElement";
|
||||||
|
import {DropDown} from "./Input/DropDown";
|
||||||
|
import Locale from "./i18n/Locale";
|
||||||
|
|
||||||
|
export default class LanguagePicker {
|
||||||
|
|
||||||
|
|
||||||
|
public static CreateLanguagePicker(
|
||||||
|
languages : string[] ,
|
||||||
|
label: string | UIElement = "") {
|
||||||
|
|
||||||
|
if (languages.length <= 1) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new DropDown(label, languages.map(lang => {
|
||||||
|
return {value: lang, shown: lang}
|
||||||
|
}
|
||||||
|
), Locale.language);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
import {UIEventSource} from "../../Logic/UIEventSource";
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
import {UIElement} from "../UIElement";
|
import {UIElement} from "../UIElement";
|
||||||
import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource";
|
import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource";
|
||||||
import {DropDown} from "../Input/DropDown";
|
|
||||||
|
|
||||||
|
|
||||||
export default class Locale {
|
export default class Locale {
|
||||||
|
@ -18,21 +17,6 @@ export default class Locale {
|
||||||
}
|
}
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CreateLanguagePicker(
|
|
||||||
languages : string[] ,
|
|
||||||
label: string | UIElement = "") {
|
|
||||||
|
|
||||||
if (languages.length <= 1) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DropDown(label, languages.map(lang => {
|
|
||||||
return {value: lang, shown: lang}
|
|
||||||
}
|
|
||||||
), Locale.language);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ export default class Translations {
|
||||||
for (const subKey in tr) {
|
for (const subKey in tr) {
|
||||||
if (Translations.isTranslation(tr[subKey])) {
|
if (Translations.isTranslation(tr[subKey])) {
|
||||||
copy[subKey] = new Translation(tr[subKey]);
|
copy[subKey] = new Translation(tr[subKey]);
|
||||||
} else if(tr[subKey].translations === undefined /**should not be a translation alreay*/){
|
} else if(tr[subKey].translations === undefined /**should not be a translation already*/){
|
||||||
queue.push(tr[subKey]);
|
queue.push(tr[subKey]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
58
Utils.ts
58
Utils.ts
|
@ -1,6 +1,5 @@
|
||||||
import {UIElement} from "./UI/UIElement";
|
import {UIElement} from "./UI/UIElement";
|
||||||
import * as $ from "jquery"
|
import * as $ from "jquery"
|
||||||
import {FixedUiElement} from "./UI/Base/FixedUiElement";
|
|
||||||
|
|
||||||
export class Utils {
|
export class Utils {
|
||||||
|
|
||||||
|
@ -156,61 +155,4 @@ export class Utils {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static generateStats(action:(stats:string) => void) {
|
|
||||||
// Binary searches the latest changeset
|
|
||||||
function search(lowerBound: number,
|
|
||||||
upperBound: number,
|
|
||||||
onCsFound: ((id: number, lastDate: Date) => void),
|
|
||||||
depth = 0) {
|
|
||||||
if (depth > 30) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const tested = Math.floor((lowerBound + upperBound) / 2);
|
|
||||||
console.log("Testing", tested)
|
|
||||||
Utils.changesetDate(tested, (createdAtDate: Date) => {
|
|
||||||
new FixedUiElement(`Searching, value between ${lowerBound} and ${upperBound}. Queries till now: ${depth}`).AttachTo('maindiv')
|
|
||||||
if (lowerBound + 1 >= upperBound) {
|
|
||||||
onCsFound(lowerBound, createdAtDate);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (createdAtDate !== undefined) {
|
|
||||||
search(tested, upperBound, onCsFound, depth + 1)
|
|
||||||
} else {
|
|
||||||
search(lowerBound, tested, onCsFound, depth + 1);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
search(91000000, 100000000, (last, lastDate: Date) => {
|
|
||||||
const link = "http://osm.org/changeset/" + last;
|
|
||||||
|
|
||||||
const delta = 100000;
|
|
||||||
|
|
||||||
Utils.changesetDate(last - delta, (prevDate) => {
|
|
||||||
|
|
||||||
|
|
||||||
const diff = (lastDate.getTime() - prevDate.getTime()) / 1000;
|
|
||||||
|
|
||||||
// Diff: seconds needed/delta changesets
|
|
||||||
const secsPerCS = diff / delta;
|
|
||||||
|
|
||||||
const stillNeeded = 1000000 - (last % 1000000);
|
|
||||||
const timeNeededSeconds = Math.floor(secsPerCS * stillNeeded);
|
|
||||||
|
|
||||||
const secNeeded = timeNeededSeconds % 60;
|
|
||||||
const minNeeded = Math.floor(timeNeededSeconds / 60) % 60;
|
|
||||||
const hourNeeded = Math.floor(timeNeededSeconds / (60 * 60)) % 24;
|
|
||||||
const daysNeeded = Math.floor(timeNeededSeconds / (24 * 60 * 60));
|
|
||||||
|
|
||||||
const result = `Last changeset: <a href='${link}'>${link}</a><br/>We needed ${(Math.floor(diff / 60))} minutes for the last ${delta} changesets.<br/>
|
|
||||||
This is around ${secsPerCS} seconds/changeset.<br/> The next million (still ${stillNeeded} away) will be broken in around ${daysNeeded} days ${hourNeeded}:${minNeeded}:${secNeeded}`
|
|
||||||
action(result);
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
67
test.ts
67
test.ts
|
@ -1,4 +1,4 @@
|
||||||
//*
|
/*
|
||||||
|
|
||||||
|
|
||||||
import {UIEventSource} from "./Logic/UIEventSource";
|
import {UIEventSource} from "./Logic/UIEventSource";
|
||||||
|
@ -21,7 +21,68 @@ new FeatureInfoBox(src, SharedLayers.sharedLayers["ghost_bike"]).AttachTo('maind
|
||||||
import {Utils} from "./Utils";
|
import {Utils} from "./Utils";
|
||||||
import {FixedUiElement} from "./UI/Base/FixedUiElement";
|
import {FixedUiElement} from "./UI/Base/FixedUiElement";
|
||||||
|
|
||||||
Utils.generateStats((stats) => {
|
|
||||||
new FixedUiElement(stats).AttachTo('maindiv')
|
function generateStats(action: (stats: string) => void) {
|
||||||
|
// Binary searches the latest changeset
|
||||||
|
function search(lowerBound: number,
|
||||||
|
upperBound: number,
|
||||||
|
onCsFound: ((id: number, lastDate: Date) => void),
|
||||||
|
depth = 0) {
|
||||||
|
if (depth > 30) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const tested = Math.floor((lowerBound + upperBound) / 2);
|
||||||
|
console.log("Testing", tested)
|
||||||
|
Utils.changesetDate(tested, (createdAtDate: Date) => {
|
||||||
|
new FixedUiElement(`Searching, value between ${lowerBound} and ${upperBound}. Queries till now: ${depth}`).AttachTo('maindiv')
|
||||||
|
if (lowerBound + 1 >= upperBound) {
|
||||||
|
onCsFound(lowerBound, createdAtDate);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (createdAtDate !== undefined) {
|
||||||
|
search(tested, upperBound, onCsFound, depth + 1)
|
||||||
|
} else {
|
||||||
|
search(lowerBound, tested, onCsFound, depth + 1);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
search(91000000, 100000000, (last, lastDate: Date) => {
|
||||||
|
const link = "http://osm.org/changeset/" + last;
|
||||||
|
|
||||||
|
const delta = 100000;
|
||||||
|
|
||||||
|
Utils.changesetDate(last - delta, (prevDate) => {
|
||||||
|
|
||||||
|
|
||||||
|
const diff = (lastDate.getTime() - prevDate.getTime()) / 1000;
|
||||||
|
|
||||||
|
// Diff: seconds needed/delta changesets
|
||||||
|
const secsPerCS = diff / delta;
|
||||||
|
|
||||||
|
const stillNeeded = 1000000 - (last % 1000000);
|
||||||
|
const timeNeededSeconds = Math.floor(secsPerCS * stillNeeded);
|
||||||
|
|
||||||
|
const secNeeded = timeNeededSeconds % 60;
|
||||||
|
const minNeeded = Math.floor(timeNeededSeconds / 60) % 60;
|
||||||
|
const hourNeeded = Math.floor(timeNeededSeconds / (60 * 60)) % 24;
|
||||||
|
const daysNeeded = Math.floor(timeNeededSeconds / (24 * 60 * 60));
|
||||||
|
|
||||||
|
const result = `Last changeset: <a href='${link}'>${link}</a><br/>We needed ${(Math.floor(diff / 60))} minutes for the last ${delta} changesets.<br/>
|
||||||
|
This is around ${secsPerCS} seconds/changeset.<br/> The next million (still ${stillNeeded} away) will be broken in around ${daysNeeded} days ${hourNeeded}:${minNeeded}:${secNeeded}`
|
||||||
|
action(result);
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
generateStats((stats) => {
|
||||||
|
new FixedUiElement(stats).AttachTo('maindiv')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
//*/
|
//*/
|
Loading…
Reference in a new issue