forked from MapComplete/MapComplete
Fix sharebutton
This commit is contained in:
parent
afbe765ce9
commit
42d13f564c
7 changed files with 51 additions and 59 deletions
|
@ -152,11 +152,10 @@ export default class LayoutConfig {
|
|||
);
|
||||
}
|
||||
|
||||
const defaultClustering = {
|
||||
this.clustering = {
|
||||
maxZoom: 16,
|
||||
minNeededElements: 500
|
||||
};
|
||||
this.clustering = defaultClustering;
|
||||
if (json.clustering) {
|
||||
this.clustering = {
|
||||
maxZoom: json.clustering.maxZoom ?? 18,
|
||||
|
@ -164,7 +163,7 @@ export default class LayoutConfig {
|
|||
}
|
||||
for (const layer of this.layers) {
|
||||
if (layer.wayHandling !== LayerConfig.WAYHANDLING_CENTER_ONLY) {
|
||||
console.error("WARNING: In order to allow clustering, every layer must be set to CENTER_ONLY. Layer", layer.id, "does not respect this for layout", this.id);
|
||||
console.debug("WARNING: In order to allow clustering, every layer must be set to CENTER_ONLY. Layer", layer.id, "does not respect this for layout", this.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,6 +86,7 @@ export default abstract class BaseUIElement {
|
|||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The same as 'Render', but creates a HTML element instead of the HTML representation
|
||||
*/
|
||||
|
|
|
@ -2,16 +2,16 @@ import BaseUIElement from "../BaseUIElement";
|
|||
|
||||
export default class ShareButton extends BaseUIElement{
|
||||
private _embedded: BaseUIElement;
|
||||
private _shareData: { text: string; title: string; url: string };
|
||||
private _shareData: () => { text: string; title: string; url: string };
|
||||
|
||||
constructor(embedded: BaseUIElement, shareData: {
|
||||
constructor(embedded: BaseUIElement, generateShareData: () => {
|
||||
text: string,
|
||||
title: string,
|
||||
url: string
|
||||
}) {
|
||||
super();
|
||||
this._embedded = embedded;
|
||||
this._shareData = shareData;
|
||||
this._shareData = generateShareData;
|
||||
this.SetClass("share-button")
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ export default class ShareButton extends BaseUIElement{
|
|||
|
||||
e.addEventListener('click', () => {
|
||||
if (navigator.share) {
|
||||
navigator.share(this._shareData).then(() => {
|
||||
navigator.share(this._shareData()).then(() => {
|
||||
console.log('Thanks for sharing!');
|
||||
})
|
||||
.catch(err => {
|
||||
|
|
|
@ -16,36 +16,6 @@ export class SlideShow extends BaseUIElement {
|
|||
const el = document.createElement("div")
|
||||
el.classList.add("slic-carousel")
|
||||
|
||||
el.onchange = () => {
|
||||
console.log("Parent is now ", el.parentElement)
|
||||
}
|
||||
|
||||
const mutationObserver = new MutationObserver(mutations => {
|
||||
console.log("Mutations are: ", mutations)
|
||||
|
||||
|
||||
mutationObserver.disconnect()
|
||||
require("slick-carousel")
|
||||
// @ts-ignore
|
||||
el.slick({
|
||||
autoplay: true,
|
||||
arrows: true,
|
||||
dots: true,
|
||||
lazyLoad: 'progressive',
|
||||
variableWidth: true,
|
||||
centerMode: true,
|
||||
centerPadding: "60px",
|
||||
adaptive: true
|
||||
});
|
||||
})
|
||||
|
||||
mutationObserver.observe(el, {
|
||||
childList: true,
|
||||
characterData: true,
|
||||
subtree: true
|
||||
})
|
||||
|
||||
|
||||
this.embeddedElements.addCallbackAndRun(elements => {
|
||||
for (const element of elements ?? []) {
|
||||
element.SetClass("slick-carousel-content")
|
||||
|
|
|
@ -19,6 +19,13 @@ export default class TagRenderingAnswer extends VariableUiElement {
|
|||
if(tags === undefined){
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if(configuration.condition){
|
||||
if(!configuration.condition.matchesProperties(tags)){
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
const trs = Utils.NoNull(configuration.GetRenderValues(tags));
|
||||
if(trs.length === 0){
|
||||
return undefined;
|
||||
|
|
|
@ -17,10 +17,10 @@ import OpeningHoursVisualization from "./OpeningHours/OhVisualization";
|
|||
import State from "../State";
|
||||
import {ImageSearcher} from "../Logic/Actors/ImageSearcher";
|
||||
import BaseUIElement from "./BaseUIElement";
|
||||
import LayerConfig from "../Customizations/JSON/LayerConfig";
|
||||
|
||||
export default class SpecialVisualizations {
|
||||
|
||||
|
||||
|
||||
|
||||
public static specialVisualizations: {
|
||||
funcName: string,
|
||||
|
@ -38,7 +38,7 @@ export default class SpecialVisualizations {
|
|||
return new VariableUiElement(tags.map(tags => {
|
||||
const parts = [];
|
||||
for (const key in tags) {
|
||||
if(!tags.hasOwnProperty(key)){
|
||||
if (!tags.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
parts.push(key + "=" + tags[key]);
|
||||
|
@ -160,22 +160,36 @@ export default class SpecialVisualizations {
|
|||
],
|
||||
constr: (state: State, tagSource: UIEventSource<any>, args) => {
|
||||
if (window.navigator.share) {
|
||||
const title = state?.layoutToUse?.data?.title?.txt ?? "MapComplete";
|
||||
let name = tagSource.data.name;
|
||||
if (name) {
|
||||
name = `${name} (${title})`
|
||||
} else {
|
||||
name = title;
|
||||
|
||||
const generateShareData = () => {
|
||||
|
||||
|
||||
const title = state?.layoutToUse?.data?.title?.txt ?? "MapComplete";
|
||||
|
||||
let matchingLayer: LayerConfig = undefined;
|
||||
for (const layer of (state?.layoutToUse?.data?.layers ?? [])) {
|
||||
if (layer.source.osmTags.matchesProperties(tagSource?.data)) {
|
||||
matchingLayer = layer
|
||||
}
|
||||
}
|
||||
let name = matchingLayer?.title?.GetRenderValue(tagSource.data)?.txt ?? tagSource.data?.name ?? "POI";
|
||||
if (name) {
|
||||
name = `${name} (${title})`
|
||||
} else {
|
||||
name = title;
|
||||
}
|
||||
let url = args[0] ?? ""
|
||||
if (url === "") {
|
||||
url = window.location.href
|
||||
}
|
||||
return {
|
||||
title: name,
|
||||
url: url,
|
||||
text: state?.layoutToUse?.data?.shortDescription?.txt ?? "MapComplete"
|
||||
}
|
||||
}
|
||||
let url = args[0] ?? ""
|
||||
if (url === "") {
|
||||
url = window.location.href
|
||||
}
|
||||
return new ShareButton(Svg.share_ui(), {
|
||||
title: name,
|
||||
url: url,
|
||||
text: state?.layoutToUse?.data?.shortDescription?.txt ?? "MapComplete"
|
||||
})
|
||||
|
||||
return new ShareButton(Svg.share_ui(), generateShareData)
|
||||
} else {
|
||||
return new FixedUiElement("")
|
||||
}
|
||||
|
|
|
@ -13,14 +13,14 @@ export class SubstitutedTranslation extends VariableUiElement {
|
|||
|
||||
public constructor(
|
||||
translation: Translation,
|
||||
tags: UIEventSource<any>) {
|
||||
tagsSource: UIEventSource<any>) {
|
||||
super(
|
||||
tags.map(tags => {
|
||||
tagsSource.map(tags => {
|
||||
const txt = Utils.SubstituteKeys(translation.txt, tags)
|
||||
if (txt === undefined) {
|
||||
return "no tags subs tr"
|
||||
return undefined
|
||||
}
|
||||
return new Combine(SubstitutedTranslation.EvaluateSpecialComponents(txt, tags))
|
||||
return new Combine(SubstitutedTranslation.EvaluateSpecialComponents(txt, tagsSource))
|
||||
}, [Locale.language])
|
||||
)
|
||||
|
||||
|
@ -59,6 +59,7 @@ export class SubstitutedTranslation extends VariableUiElement {
|
|||
try{
|
||||
element = knownSpecial.constr(State.state, tags, args);
|
||||
}catch(e){
|
||||
console.error("SPECIALRENDERING FAILED for", tags.data.id, e)
|
||||
element = new FixedUiElement(`Could not generate special renering for ${knownSpecial}(${args.join(", ")}) ${e}`).SetClass("alert")
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue