This commit is contained in:
parent
027bf29ab5
commit
6b864e6fef
3 changed files with 24 additions and 16 deletions
|
@ -172,7 +172,7 @@ export default class Wikidata {
|
||||||
lang +
|
lang +
|
||||||
"&type=item&origin=*" +
|
"&type=item&origin=*" +
|
||||||
"&props=";// props= removes some unused values in the result
|
"&props=";// props= removes some unused values in the result
|
||||||
const response = await Utils.downloadJson(url)
|
const response = await Utils.downloadJsonCached(url, 10000)
|
||||||
|
|
||||||
const result: any[] = response.search
|
const result: any[] = response.search
|
||||||
|
|
||||||
|
@ -192,6 +192,7 @@ export default class Wikidata {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static async searchAndFetch(
|
public static async searchAndFetch(
|
||||||
search: string,
|
search: string,
|
||||||
options?: WikidataSearchoptions
|
options?: WikidataSearchoptions
|
||||||
|
@ -287,7 +288,7 @@ export default class Wikidata {
|
||||||
}
|
}
|
||||||
|
|
||||||
const url = "https://www.wikidata.org/wiki/Special:EntityData/" + id + ".json";
|
const url = "https://www.wikidata.org/wiki/Special:EntityData/" + id + ".json";
|
||||||
const entities = (await Utils.downloadJson(url)).entities
|
const entities = (await Utils.downloadJsonCached(url, 10000)).entities
|
||||||
const firstKey = <string> Array.from(Object.keys(entities))[0] // Roundabout way to fetch the entity; it might have been a redirect
|
const firstKey = <string> Array.from(Object.keys(entities))[0] // Roundabout way to fetch the entity; it might have been a redirect
|
||||||
const response = entities[firstKey]
|
const response = entities[firstKey]
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import {Utils} from "../Utils";
|
||||||
|
|
||||||
export default class Constants {
|
export default class Constants {
|
||||||
|
|
||||||
public static vNumber = "0.11.3";
|
public static vNumber = "0.11.4";
|
||||||
public static ImgurApiKey = '7070e7167f0a25a'
|
public static ImgurApiKey = '7070e7167f0a25a'
|
||||||
public static readonly mapillary_client_token_v3 = 'TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2'
|
public static readonly mapillary_client_token_v3 = 'TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2'
|
||||||
public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"
|
public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"
|
||||||
|
|
|
@ -13,6 +13,8 @@ import Svg from "../../Svg";
|
||||||
|
|
||||||
export default class WikidataSearchBox extends InputElement<string> {
|
export default class WikidataSearchBox extends InputElement<string> {
|
||||||
|
|
||||||
|
private static readonly _searchCache = new Map<string, Promise<WikidataResponse[]>>()
|
||||||
|
IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false);
|
||||||
private readonly wikidataId: UIEventSource<string>
|
private readonly wikidataId: UIEventSource<string>
|
||||||
private readonly searchText: UIEventSource<string>
|
private readonly searchText: UIEventSource<string>
|
||||||
|
|
||||||
|
@ -29,6 +31,10 @@ export default class WikidataSearchBox extends InputElement<string> {
|
||||||
return this.wikidataId;
|
return this.wikidataId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IsValid(t: string): boolean {
|
||||||
|
return t.startsWith("Q") && !isNaN(Number(t.substring(1)));
|
||||||
|
}
|
||||||
|
|
||||||
protected InnerConstructElement(): HTMLElement {
|
protected InnerConstructElement(): HTMLElement {
|
||||||
|
|
||||||
const searchField = new TextField({
|
const searchField = new TextField({
|
||||||
|
@ -46,12 +52,20 @@ export default class WikidataSearchBox extends InputElement<string> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
searchFailMessage.setData(undefined)
|
searchFailMessage.setData(undefined)
|
||||||
lastSearchResults.WaitForPromise(
|
|
||||||
Wikidata.searchAndFetch(searchText, {
|
const lang = Locale.language.data
|
||||||
lang: Locale.language.data,
|
const key = lang + ":" + searchText
|
||||||
|
let promise = WikidataSearchBox._searchCache.get(key)
|
||||||
|
if (promise === undefined) {
|
||||||
|
promise = Wikidata.searchAndFetch(searchText, {
|
||||||
|
lang,
|
||||||
maxCount: 5
|
maxCount: 5
|
||||||
}
|
}
|
||||||
), err => searchFailMessage.setData(err))
|
)
|
||||||
|
WikidataSearchBox._searchCache.set(key, promise)
|
||||||
|
}
|
||||||
|
|
||||||
|
lastSearchResults.WaitForPromise(promise, err => searchFailMessage.setData(err))
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -61,10 +75,10 @@ export default class WikidataSearchBox extends InputElement<string> {
|
||||||
return new Combine([Translations.t.general.wikipedia.failed.Clone().SetClass("alert"), searchFailMessage.data])
|
return new Combine([Translations.t.general.wikipedia.failed.Clone().SetClass("alert"), searchFailMessage.data])
|
||||||
}
|
}
|
||||||
|
|
||||||
if(searchResults.length === 0){
|
if (searchResults.length === 0) {
|
||||||
return Translations.t.general.wikipedia.noResults.Subs({search: searchField.GetValue().data ?? ""})
|
return Translations.t.general.wikipedia.noResults.Subs({search: searchField.GetValue().data ?? ""})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchResults.length === 0) {
|
if (searchResults.length === 0) {
|
||||||
return Translations.t.general.wikipedia.doSearch
|
return Translations.t.general.wikipedia.doSearch
|
||||||
}
|
}
|
||||||
|
@ -88,7 +102,6 @@ export default class WikidataSearchBox extends InputElement<string> {
|
||||||
|
|
||||||
}, [searchFailMessage]))
|
}, [searchFailMessage]))
|
||||||
|
|
||||||
//
|
|
||||||
const full = new Combine([
|
const full = new Combine([
|
||||||
new Title(Translations.t.general.wikipedia.searchWikidata, 3).SetClass("m-2"),
|
new Title(Translations.t.general.wikipedia.searchWikidata, 3).SetClass("m-2"),
|
||||||
new Combine([
|
new Combine([
|
||||||
|
@ -108,10 +121,4 @@ export default class WikidataSearchBox extends InputElement<string> {
|
||||||
]).ConstructElement();
|
]).ConstructElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false);
|
|
||||||
|
|
||||||
IsValid(t: string): boolean {
|
|
||||||
return t.startsWith("Q") && !isNaN(Number(t.substring(1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue