diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts index b5a3164bd6..3411ba6023 100644 --- a/Logic/Osm/OsmConnection.ts +++ b/Logic/Osm/OsmConnection.ts @@ -32,10 +32,13 @@ export class OsmConnection { } catch (e) { console.warn("Detecting standalone mode failed", e, ". Assuming in browser and not worrying furhter") } + + const iframeMode = window !== window.top; - if (pwaStandAloneMode) { + if (pwaStandAloneMode || iframeMode) { // In standalone mode, we DON'T use single page login, as 'redirecting' opens a new window anyway... + // Same for an iframe... this.auth = new osmAuth({ oauth_consumer_key: 'hivV7ec2o49Two8g9h8Is1VIiVOgxQ1iYexCbvem', oauth_secret: 'wDBRTCem0vxD7txrg1y6p5r8nvmz8tAhET7zDASI', @@ -156,22 +159,6 @@ export class OsmConnection { }, 5 * 60 * 1000); } - /** - * All elements with class 'activate-osm-authentication' are loaded and get an 'onclick' to authenticate - */ - registerActivateOsmAUthenticationClass() { - - const self = this; - const authElements = document.getElementsByClassName("activate-osm-authentication"); - for (let i = 0; i < authElements.length; i++) { - let element = authElements.item(i); - // @ts-ignore - element.onclick = function () { - self.AttemptLogin(); - } - } - } - public preferences = new UIEventSource({}); public preferenceSources : any = {} diff --git a/UI/SimpleAddUI.ts b/UI/SimpleAddUI.ts index 7d4e19e7c3..daeb0df411 100644 --- a/UI/SimpleAddUI.ts +++ b/UI/SimpleAddUI.ts @@ -20,6 +20,8 @@ import {State} from "../State"; export class SimpleAddUI extends UIElement { private _addButtons: UIElement[]; + private _loginButton : UIElement; + private _confirmPreset: UIEventSource<{ description: string | UIElement, name: string | UIElement, @@ -37,13 +39,16 @@ export class SimpleAddUI extends UIElement { super(State.state.locationControl); this.ListenTo(Locale.language); this.ListenTo(State.state.osmConnection.userDetails); - this.ListenTo(State.state.layerUpdater.runningQuery); - - this._addButtons = []; this.ListenTo(this._confirmPreset); + + + this._loginButton = Translations.t.general.add.pleaseLogin.Clone().onClick(() => State.state.osmConnection.AttemptLogin()); + + this._addButtons = []; this.clss = "add-ui" + const self = this; for (const layer of State.state.filteredLayers.data) { for (const preset of layer.layerDef.presets) { @@ -134,7 +139,7 @@ export class SimpleAddUI extends UIElement { } if (!userDetails.data.loggedIn) { - return new Combine([header, Translations.t.general.add.pleaseLogin]).Render() + return new Combine([header, this._loginButton]).Render() } if (userDetails.data.unreadMessages > 0) { @@ -177,8 +182,5 @@ export class SimpleAddUI extends UIElement { return header.Render() + html; } - InnerUpdate(htmlElement: HTMLElement) { - State.state.osmConnection.registerActivateOsmAUthenticationClass(); - } } \ No newline at end of file diff --git a/UI/UserBadge.ts b/UI/UserBadge.ts index 64250118b4..757cc440a5 100644 --- a/UI/UserBadge.ts +++ b/UI/UserBadge.ts @@ -21,13 +21,14 @@ export class UserBadge extends UIElement { private _homeButton: UIElement; private _languagePicker: UIElement; + private _loginButton : UIElement; constructor() { super(State.state.osmConnection.userDetails); this._userDetails = State.state.osmConnection.userDetails; this._pendingChanges = new PendingChanges(); this._languagePicker = Utils.CreateLanguagePicker(); - + this._loginButton = Translations.t.general.loginWithOpenStreetMap.Clone().onClick(() => State.state.osmConnection.AttemptLogin()); this._logout = new FixedUiElement("logout") .onClick(() => { State.state.osmConnection.LogOut(); @@ -63,7 +64,7 @@ export class UserBadge extends UIElement { InnerRender(): string { const user = this._userDetails.data; if (!user.loggedIn) { - return "
" + Translations.t.general.loginWithOpenStreetMap.R()+ "
"; + return this._loginButton.Render(); } @@ -123,9 +124,5 @@ export class UserBadge extends UIElement { } - protected InnerUpdate(htmlElement: HTMLElement) { - State.state.osmConnection.registerActivateOsmAUthenticationClass(); - } - } \ No newline at end of file diff --git a/UI/WelcomeMessage.ts b/UI/WelcomeMessage.ts index ca5e487d2b..ca6e13fc7d 100644 --- a/UI/WelcomeMessage.ts +++ b/UI/WelcomeMessage.ts @@ -31,7 +31,7 @@ export class WelcomeMessage extends UIElement { } this.description = fromLayout((layout) => layout.welcomeMessage); - this.plzLogIn = fromLayout((layout) => layout.gettingStartedPlzLogin); + this.plzLogIn = fromLayout((layout) => layout.gettingStartedPlzLogin.onClick(()=> State.state.osmConnection.AttemptLogin())); this.welcomeBack = fromLayout((layout) => layout.welcomeBackMessage); this.tail = fromLayout((layout) => layout.welcomeTail); } @@ -54,8 +54,5 @@ export class WelcomeMessage extends UIElement { ""; } - protected InnerUpdate(htmlElement: HTMLElement) { - this.osmConnection?.registerActivateOsmAUthenticationClass() - } } \ No newline at end of file diff --git a/index.ts b/index.ts index 5bd1213fd3..2dd7a9da5d 100644 --- a/index.ts +++ b/index.ts @@ -171,6 +171,5 @@ if ((window != window.top && !State.state.featureSwitchWelcomeMessage) || State. new GeoLocationHandler().AttachTo("geolocate-button"); -State.state.osmConnection.registerActivateOsmAUthenticationClass(); State.state.locationControl.ping()