UNPKG

@panoramax/web-viewer

Version:

Panoramax web viewer for geolocated pictures

101 lines (91 loc) 2.82 kB
import { LitElement, css, html } from "lit"; import { fa, onceParentAvailable } from "../../utils/widgets"; import { faSvg, textarea, titles, input } from "../styles"; import { faMap } from "@fortawesome/free-solid-svg-icons/faMap"; import { faCircleInfo } from "@fortawesome/free-solid-svg-icons/faCircleInfo"; import { faShareAlt } from "@fortawesome/free-solid-svg-icons/faShareAlt"; import { faLink } from "@fortawesome/free-solid-svg-icons/faLink"; /** * Share Menu displays links for quick picture sharing. * @class Panoramax.components.menus.ShareMenu * @element pnx-share-menu * @extends [lit.LitElement](https://lit.dev/docs/api/LitElement/) * @example * ```html * <pnx-share-menu ._parent=${viewer} /> * ``` */ export default class ShareMenu extends LitElement { /** @private */ static styles = [ faSvg, input, textarea, titles, css` div[slot="content"] { margin-top: 10px; } .links { display: flex; gap: 5px; } .embed { display: flex; gap: 5px; align-items: center; flex-direction: column; } ` ]; /** @private */ static properties = { _url: {state: true}, }; constructor() { super(); this._onUrlChange(); } /** @private */ connectedCallback() { super.connectedCallback(); onceParentAvailable(this).then(() => this._parent.onceReady()).then(() => { this._onUrlChange(); this._parent.urlHandler.addEventListener("url-changed", this._onUrlChange.bind(this)); }); } /** @private */ _onUrlChange() { const baseUrl = window.location.href.replace(/\/$/, ""); this._url = this._parent?.urlHandler?.nextShortLink(baseUrl) || baseUrl; } /** @private */ render() { const iframe = `<iframe src="${this._url}" style="border: none; width: 500px; height: 300px"></iframe>`; return html` <h4>${fa(faShareAlt)} ${this._parent?._t.pnx.share}</h4> <pnx-tabs> <h4 slot="title">${fa(faLink)} ${this._parent?._t.pnx.share_page}</h4> <div slot="content"> <div class="links"> <input type="text" readonly value=${this._url} style="flex: 2" /> <pnx-copy-button ._t=${this._parent?._t} text=${this._url}></pnx-copy-button> </div> </div> <h4 slot="title">${fa(faMap)} ${this._parent?._t.pnx.share_embed}</h4> <div slot="content"> <div class="embed"> <pnx-link-button href="https://docs.panoramax.fr/web-viewer/03_URL_settings/" target="_blank" kind="superinline" size="sm" > ${fa(faCircleInfo)} ${this._parent?._t.pnx.share_embed_docs} </pnx-link-button> <textarea readonly .value=${iframe}></textarea> <pnx-copy-button ._t=${this._parent?._t} text=${iframe} style="width: 100%" ></pnx-copy-button> </div> </div> </pnx-tabs>`; } } customElements.define("pnx-share-menu", ShareMenu);