{"version":3,"file":"hslayers-ng-components-share.mjs","sources":["../../../projects/hslayers/components/share/share.service.ts","../../../projects/hslayers/components/share/share.component.ts","../../../projects/hslayers/components/share/share.component.html","../../../projects/hslayers/components/share/share.module.ts","../../../projects/hslayers/components/share/hslayers-ng-components-share.ts"],"sourcesContent":["import 'share-api-polyfill';\n\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\nimport {lastValueFrom} from 'rxjs';\n\nimport {CompoData, MapComposition} from 'hslayers-ng/types';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsSaveMapService} from 'hslayers-ng/services/save-map';\nimport {\n  HsShareThumbnailService,\n  HsShareUrlService,\n} from 'hslayers-ng/services/share';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {debounce} from 'hslayers-ng/services/utils';\nimport {getShowInLayerManager} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsShareService {\n  hsConfig = inject(HsConfig);\n  hsShareUrlService = inject(HsShareUrlService);\n  hsMapService = inject(HsMapService);\n  hsLayoutService = inject(HsLayoutService);\n  hsSaveMapService = inject(HsSaveMapService);\n  hsEventBusService = inject(HsEventBusService);\n  hsLanguageService = inject(HsLanguageService);\n  hsToastService = inject(HsToastService);\n  hsLogService = inject(HsLogService);\n  private httpClient = inject(HttpClient);\n  hsShareThumbnailService = inject(HsShareThumbnailService);\n\n  pureMapUrl = '';\n  permalinkUrl = '';\n  shareLink = 'permalink';\n  embedCode = '';\n  shareUrlValid = false;\n  title = '';\n  abstract = '';\n  shareUrl = '';\n  thumbnail: string;\n\n  constructor() {\n    this.hsEventBusService.compositionLoads.subscribe((data) => {\n      if (data.data) {\n        data = data.data;\n\n        this.title = data.title;\n        if (this.hsConfig.social_hashtag) {\n          this.title += ' ' + this.hsConfig.social_hashtag;\n        }\n        this.abstract = data.abstract;\n      }\n    });\n\n    this.hsLayoutService.mainpanel$.subscribe(async (which) => {\n      if (this.hsLayoutService.mainpanel == 'share') {\n        this.generateThumbnail(\n          this.hsLayoutService.contentWrapper.querySelector(\n            '.hs-permalink-thumbnail',\n          ),\n          false,\n        );\n\n        this.hsShareUrlService.statusSaving = true;\n        const layers = this.hsMapService\n          .getLayersArray()\n          .filter(\n            (l) =>\n              getShowInLayerManager(l) == undefined || getShowInLayerManager(l),\n          )\n          .sort((a, b) => {\n            return a.getZIndex() - b.getZIndex();\n          });\n        try {\n          const bbox = this.hsMapService.describeExtent();\n          const data = this.hsSaveMapService.map2json(\n            this.hsMapService.getMap(),\n            {layers, bbox},\n            {},\n          );\n          await this.hsShareUrlService.updatePermalinkComposition(data);\n        } catch (ex) {\n          this.hsShareUrlService.statusSaving = false;\n          this.hsLogService.error('Error saving permalink layers.', ex);\n          throw ex;\n        }\n      }\n    });\n\n    this.hsShareUrlService.browserUrlUpdated.subscribe(async (url) => {\n      if (\n        this.hsLayoutService.mainpanel == 'share' ||\n        this.hsLayoutService.mainpanel == 'shareMap'\n      ) {\n        this.shareUrlValid = false;\n        try {\n          this.pureMapUrl = await this.hsShareUrlService.shortUrl(\n            this.hsShareUrlService.getPureMapUrl(),\n          );\n          this.permalinkUrl = await this.hsShareUrlService.shortUrl(\n            this.hsShareUrlService.getPermalinkUrl(),\n          );\n          this.getEmbedCode();\n        } catch (ex) {\n          this.hsLogService.log('Error creating short URL', ex);\n          this.pureMapUrl = this.hsShareUrlService.getPureMapUrl();\n          this.permalinkUrl = url;\n        }\n      }\n    });\n\n    this.hsEventBusService.olMapLoads.subscribe((map) => {\n      map.on(\n        'postcompose',\n        debounce(\n          () => {\n            if (this.hsLayoutService.mainpanel == 'share') {\n              this.generateThumbnail(\n                this.hsLayoutService.contentWrapper.querySelector(\n                  '.hs-permalink-thumbnail',\n                ),\n                false,\n              );\n            }\n          },\n          300,\n          false,\n          this,\n        ),\n      );\n    });\n  }\n\n  /**\n   * Get correct Embed code with correct share link type\n   * @returns embeddable iframe HTML code\n   */\n  getEmbedCode(): string {\n    this.embedCode =\n      '<iframe src=\"' +\n      this.getShareUrl() +\n      '\" width=\"1000\" height=\"700\"></iframe>';\n    return this.embedCode;\n  }\n\n  /**\n   * @returns Share URL\n   */\n  getShareUrl(): string {\n    let tmp;\n    if (this.shareLink == 'permalink') {\n      tmp = this.permalinkUrl;\n    } else if (this.shareLink == 'puremap') {\n      tmp = this.pureMapUrl;\n    }\n    return tmp;\n  }\n\n  /**\n   * @returns Encoded share URL\n   */\n  getShareUrlEncoded(): string {\n    return encodeURIComponent(this.getShareUrl());\n  }\n\n  /**\n   * Make current share url invalid for social sharing\n   */\n  invalidateShareUrl(): void {\n    this.shareUrlValid = false;\n  }\n\n  /**\n   * Share map on social network\n   * @param provider - Social share provider (twitter/facebook)\n   * @param newShare - If new share record on server should be created\n   */\n  async shareOnSocial(newShare: boolean): Promise<void> {\n    if (!this.shareUrlValid) {\n      if (this.hsShareUrlService.shareId === null || newShare) {\n        this.hsShareUrlService.shareId = crypto.randomUUID();\n      }\n      try {\n        const endpointUrl = this.hsShareUrlService.endpointUrl();\n        const headers = new HttpHeaders().set(\n          'Content-Type',\n          'text/plain; charset=utf-8',\n        );\n        await lastValueFrom(\n          this.httpClient.post(\n            endpointUrl,\n            JSON.stringify({\n              request: 'socialShare',\n              id: this.hsShareUrlService.shareId,\n              url: encodeURIComponent(this.getShareUrl()),\n              title: this.title,\n              description: this.abstract,\n              image: this.thumbnail,\n            }),\n            {headers, responseType: 'text'},\n          ),\n        );\n\n        const shortUrl = await this.hsShareUrlService.shortUrl(\n          `${endpointUrl}?request=socialshare&id=${this.hsShareUrlService.shareId}`,\n        );\n        const shareUrl = shortUrl;\n        this.openInShareApi(this.title, this.abstract, shareUrl);\n        this.shareUrlValid = true;\n      } catch (ex) {\n        this.hsLogService.log('Error creating short URL', ex);\n      }\n    } else {\n      this.openInShareApi(this.title, this.abstract, this.getShareUrl());\n    }\n  }\n\n  openInShareApi(title, abstract, url): void {\n    (<any>navigator)\n      .share({\n        title,\n        text: abstract || title,\n        url,\n      })\n      .then((response) => {\n        console.log(response);\n      })\n      .catch((error) => {\n        this.hsToastService.createToastPopupMessage(\n          this.hsLanguageService.getTranslation(\n            'COMPOSITIONS.errorWhileSharingOnSocialNetwork',\n            undefined,\n          ),\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'ERRORMESSAGES',\n            error,\n            undefined,\n          ),\n          {disableLocalization: true, serviceCalledFrom: 'HsShareService'},\n        );\n      });\n  }\n\n  /**\n   * Generate thumbnail of current map and save it to variable and selected element\n   * @param $element - DOM img element where to place the thumbnail\n   * @param newRender - Force synchronous rendering again or use last canvas state\n   */\n  generateThumbnail($element, newRender: boolean): void {\n    this.rendered($element, newRender);\n\n    if ($element === null) {\n      return;\n    }\n    $element.setAttribute('crossOrigin', 'Anonymous');\n    const map = this.hsMapService.getMap();\n    if (newRender) {\n      map.once('postcompose', () => this.rendered($element, newRender));\n      map.renderSync();\n    } else {\n      this.rendered($element, newRender);\n    }\n  }\n\n  rendered($element, newRender?): void {\n    this.thumbnail = this.hsShareThumbnailService.rendered($element, newRender);\n  }\n\n  private isCanvasTainted(canvas: HTMLCanvasElement): boolean {\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const pixel = canvas.getContext('2d').getImageData(0, 0, 1, 1);\n      return false;\n    } catch (err) {\n      return err.code === 18;\n    }\n  }\n\n  /**\n   * Save composition to Status manager's service\n   * @param compositionJson - Json with composition's definition\n   * @param endpoint - Endpoint's description\n   * @param compoData - Additional data for composition\n   * @param saveAsNew - Save as new composition\n   * @returns Promise result of POST\n   */\n  save(\n    compositionJson: MapComposition,\n    compoData: CompoData,\n    saveAsNew: boolean,\n  ): Promise<any> {\n    if (saveAsNew || compoData.id == '') {\n      compoData.id = crypto.randomUUID();\n    }\n    return new Promise(async (resolve, reject) => {\n      try {\n        const response = await lastValueFrom(\n          this.httpClient.post(this.hsShareUrlService.endpointUrl(), {\n            data: compositionJson,\n            permanent: true,\n            id: compoData.id,\n            project: this.hsConfig.project_name,\n            thumbnail: compoData.thumbnail,\n            request: 'save',\n          }),\n        );\n        resolve(response);\n      } catch (err) {\n        reject();\n      }\n    });\n  }\n}\n","import {Component, OnInit, inject} from '@angular/core';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsShareService} from './share.service';\nimport {HsShareUrlService} from 'hslayers-ng/services/share';\nimport {HslayersService} from 'hslayers-ng/core';\n\n@Component({\n  selector: 'hs-share',\n  templateUrl: './share.component.html',\n  standalone: false,\n})\nexport class HsShareComponent extends HsPanelBaseComponent implements OnInit {\n  hsShareService = inject(HsShareService);\n  hsShareUrlService = inject(HsShareUrlService);\n  hsCore = inject(HslayersService);\n  hsLanguageService = inject(HsLanguageService);\n  private hsConfig = inject(HsConfig);\n\n  new_share = false;\n  name = 'share';\n  app: string;\n\n  /**\n   * Create Iframe tag for embedded map\n   * @returns Iframe tag with src attribute on embed Url and default width and height (1000x700px)\n   */\n  updateEmbedCode(): string {\n    return this.hsShareService.getEmbedCode();\n  }\n\n  /**\n   * Select right share Url based on shareLink property (either Permalink Url or PureMap url)\n   * @returns Right share Url\n   */\n  getShareUrl(): string {\n    return this.hsShareService.getShareUrl();\n  }\n\n  /**\n   * Set share Url state invalid\n   */\n  invalidateShareUrl(): void {\n    this.hsShareService.invalidateShareUrl();\n  }\n\n  /**\n   * Create share post on selected social network\n   */\n  shareOnSocial(): void {\n    this.hsShareService.shareOnSocial(this.new_share);\n  }\n\n  ngOnInit() {\n    this.app = this.hsConfig.id;\n    super.ngOnInit();\n  }\n}\n","@if (isVisible$ | async) {\n  <div class=\"card panel-default hs-main-panel\" [ngClass]=\"panelWidthClass\">\n    <hs-panel-header name=\"share\" [panelTabs]=\"'PERMALINK'\">\n    </hs-panel-header>\n    <div class=\"card-body\">\n      <div class=\"card-body\">\n        <div class=\"form-group\">\n          <label for=\"pure-map-link\" class=\"control-label me-1\">{{'PERMALINK.sharePureMap' | translate}}</label>\n          <a [href]=\"hsShareService.pureMapUrl\" target=\"_blank\"\n          id=\"pure-map-link\">{{hsShareService.pureMapUrl}}</a>\n          <p><sub class=\"text-danger\">{{'PERMALINK.sharesOnlyMap' | translate }}</sub></p>\n        </div>\n        <br>\n          <div class=\"form-group\">\n            <label for=\"permalink-link\" class=\"control-label me-1\">{{'PERMALINK.permalink' |\n            translate}}</label><br />\n            <a [href]=\"hsShareService.permalinkUrl\" target=\"_blank\" style=\"overflow-x: hidden;\"\n            id=\"permalink-link\">{{hsShareService.permalinkUrl}}</a>\n            <p><sub class=\"text-danger\">{{'PERMALINK.sharesMapWith' | translate }}</sub></p>\n          </div>\n          <hr>\n            <fieldset class=\"form-group\">\n              <label class=\"mb-2\" style=\"font-size: 1.5em;\" [for]=\"'share-link-' + app\">{{'PERMALINK.linkFor' |\n                translate }}&nbsp;<span [hidden]=\"!hsCore.embeddedEnabled\">{{'PERMALINK.embed' |\n              translate }}/</span>{{'PERMALINK.socialShare' | translate}}\n            </label>\n            <div class=\"form-check\">\n              <label class=\"form-check-label\">\n                <input type=\"radio\" class=\"form-check-input\" [name]=\"'share-link-' + app\" value=\"puremap\"\n                  [(ngModel)]=\"hsShareService.shareLink\" (click)=\"updateEmbedCode()\">\n                {{'PERMALINK.pureMap' | translate }}\n              </label>\n            </div>\n            <div class=\"form-check\">\n              <label class=\"form-check-label\">\n                <input type=\"radio\" class=\"form-check-input\" [name]=\"'share-link-' + app\" value=\"permalink\"\n                  [(ngModel)]=\"hsShareService.shareLink\" (click)=\"updateEmbedCode()\">\n                {{'PERMALINK.permalink' | translate }}\n              </label>\n            </div>\n          </fieldset>\n          <div class=\"form-floating mb-3\" [hidden]=\"!hsCore.embeddedEnabled\">\n            <textarea class=\"form-control\" style=\"height: 80px\" id=\"permalink-embed\"\n              [placeholder]=\"'PERMALINK.embedCode' | translate\" [(ngModel)]=\"hsShareService.embedCode\"\n            [ngModelOptions]=\"{standalone: true}\"></textarea>\n            <label for=\"permalink-embed\" class=\"control-label\">{{'PERMALINK.embedCode' | translate}}</label>\n            <br>\n            </div>\n            <hr>\n              <fieldset>\n                <h4>{{'PERMALINK.shareOnSocialNetwork' | translate }}</h4>\n                <div class=\"form-floating mb-3\" [title]=\"'COMMON.fillInName' | translate\">\n                  <input type=\"text\" class=\"form-control\" id=\"hs-prmlnk-title\"\n                    [placeholder]=\"'COMMON.name' | translate\" (change)=\"invalidateShareUrl()\"\n                    [(ngModel)]=\"hsShareService.title\" [ngModelOptions]=\"{standalone: true}\">\n                  <label for=\"hs-prmlnk-title\" class=\"control-label\">{{'COMMON.name' | translate\n                  }}</label>\n                </div>\n                <div class=\"form-floating mb-3\" [title]=\"'COMMON.fillInDescriptive' | translate\">\n                  <textarea class=\"form-control\" id=\"hs-prmlnk-abstract\"\n                    [placeholder]=\"'COMMON.abstract' | translate\" (change)=\"invalidateShareUrl()\"\n                    [(ngModel)]=\"hsShareService.abstract\"\n                  [ngModelOptions]=\"{standalone: true}\">                    </textarea>\n                  <label for=\"hs-prmlnk-abstract\" class=\"control-label\">{{'COMMON.abstract' | translate}}</label>\n                </div>\n                <div class=\"form-group\">\n                  <div class=\"form-group\">\n                    <label class=\"control-label\"><input type=\"checkbox\" class=\"me-2\" [(ngModel)]=\"new_share\"\n                      [ngModelOptions]=\"{standalone: true}\" /><span class=\"ng-scope\">{{'PERMALINK.newShare' |\n                    translate }}</span></label>\n                  </div>\n                  <div class=\"btn-group\" role=\"group\">\n                    <button class=\"btn btn-secondary\" (click)=\"shareOnSocial()\">\n                      <i class=\"fa-solid fa-share-nodes\"></i> {{'COMMON.share' | translate }}\n                    </button>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label class=\"control-label\">{{'COMMON.thumbnail' | translate }}</label>\n                  <img class=\"img-thumbnail hs-permalink-thumbnail\" [alt]=\"'COMMON.thumbnail' | translate\"\n                    width=\"256\" height=\"256\">\n                </div>\n              </fieldset>\n            </div>\n          </div>\n        </div>\n      }\n","import {\n  APP_BASE_HREF,\n  CommonModule,\n  LocationStrategy,\n  PathLocationStrategy,\n} from '@angular/common';\nimport {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsShareComponent} from './share.component';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [HsShareComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    HsPanelHelpersModule,\n    TranslatePipe,\n    HsPanelHeaderComponent,\n  ],\n  exports: [HsShareComponent],\n  providers: [\n    {provide: LocationStrategy, useClass: PathLocationStrategy},\n    {provide: APP_BASE_HREF, useValue: '/'},\n  ],\n})\nexport class HsShareModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}