ngx-sharebuttons
Version:
<p align="center"> <img height="200px" width="200px" style="text-align: center;" src="https://rawcdn.githack.com/MurhafSousli/ngx-sharebuttons/13279ed77c47fe9dd7b61e4dad3ded6d02488c2f/projects/ngx-sharebuttons-demo/src/assets/img/logo.svg"> <h1 alig
1 lines • 44.3 kB
Source Map (JSON)
{"version":3,"file":"ngx-sharebuttons.mjs","sources":["../../../projects/ngx-sharebuttons/src/lib/utils.ts","../../../projects/ngx-sharebuttons/src/lib/share.models.ts","../../../projects/ngx-sharebuttons/src/lib/share.defaults.ts","../../../projects/ngx-sharebuttons/src/lib/share.service.ts","../../../projects/ngx-sharebuttons/src/lib/custom-share-button-provider.ts","../../../projects/ngx-sharebuttons/src/lib/share-button.directive.ts","../../../projects/ngx-sharebuttons/src/ngx-sharebuttons.ts"],"sourcesContent":["import { ShareButtonFuncArgs } from './share.models';\r\n\r\n/** Returns a valid URL or falls back to current URL */\r\nexport function getValidUrl(url: string): string {\r\n const isValidUrl: boolean = /^(http|https):\\/\\//.test(url);\r\n if (isValidUrl) {\r\n return url;\r\n }\r\n console.warn(`[ShareButtons]: Sharing link '${ url }' is invalid!`);\r\n return null;\r\n}\r\n\r\nexport function printPage(): void {\r\n return document.defaultView.print();\r\n}\r\n\r\nexport function copyToClipboard({\r\n params,\r\n data,\r\n clipboard,\r\n uiState\r\n }: ShareButtonFuncArgs<CopyToClipboardDataArgs>): void {\r\n clipboard.copy(params.url);\r\n // Disable copy button\r\n uiState.set({ icon: data.successIcon, text: data.successText, disabled: true });\r\n setTimeout(() => {\r\n uiState.set({ icon: data.icon, text: data.text, disabled: false })\r\n }, data.delay);\r\n}\r\n\r\ninterface CopyToClipboardDataArgs {\r\n delay: number;\r\n text: string;\r\n icon: any;\r\n successText: string;\r\n successIcon: any;\r\n}\r\n","import { InjectionToken, WritableSignal, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { Clipboard } from '@angular/cdk/clipboard';\r\nimport { defaultOptions, ShareButtonProp } from './share.defaults';\r\n\r\nexport const SHARE_BUTTONS_CONFIG: InjectionToken<ShareButtonsConfig> = new InjectionToken<ShareButtonsConfig>('SHARE_BUTTONS_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => defaultOptions\r\n});\r\n\r\nexport const SHARE_ICONS: InjectionToken<unknown> = new InjectionToken('SHARE_ICONS');\r\n\r\nexport function provideShareButtonsOptions(...providers: EnvironmentProviders[]): EnvironmentProviders {\r\n return makeEnvironmentProviders(providers);\r\n}\r\n\r\nexport function withConfig(options: ShareButtonsConfig): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: SHARE_BUTTONS_CONFIG,\r\n useValue: { ...defaultOptions, ...options }\r\n }\r\n ])\r\n}\r\n\r\n/**\r\n * Share buttons config\r\n */\r\nexport interface ShareButtonsConfig {\r\n sharerMethod?: SharerMethod;\r\n sharerTarget?: string;\r\n windowObj?: any;\r\n windowFuncName?: string;\r\n theme?: string;\r\n include?: ShareButtonProp[];\r\n exclude?: ShareButtonProp[];\r\n messengerAppId?: string;\r\n xAccount?: string;\r\n windowWidth?: number;\r\n windowHeight?: number;\r\n moreButtonIcon?: any;\r\n lessButtonIcon?: any;\r\n moreButtonAriaLabel?: string;\r\n lessButtonAriaLabel?: string;\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * Share buttons collection\r\n */\r\nexport interface IShareButtons {\r\n facebook?: IShareButton;\r\n x?: IShareButton;\r\n linkedin?: IShareButton;\r\n google?: IShareButton;\r\n tumblr?: IShareButton;\r\n mix?: IShareButton;\r\n pinterest?: IShareButton;\r\n reddit?: IShareButton;\r\n viber?: IShareButton;\r\n vk?: IShareButton;\r\n telegram?: IShareButton;\r\n messenger?: IShareButton;\r\n whatsapp?: IShareButton;\r\n xing?: IShareButton;\r\n line?: IShareButton;\r\n sms?: IShareButton;\r\n email?: IShareButton;\r\n print?: IShareButton;\r\n copy?: IShareButton;\r\n}\r\n\r\nexport class IShareButton {\r\n /** Share button type */\r\n type?: string;\r\n /** Share button text */\r\n text?: string;\r\n /** Share button aria label attribute */\r\n ariaLabel?: string;\r\n /** Share button icon (FontAwesome) */\r\n icon?: string | string[] | any;\r\n /** Share button color */\r\n color?: string;\r\n /** Sharer base URL */\r\n share?: {\r\n desktop?: string;\r\n android?: string;\r\n ios?: string;\r\n };\r\n /** Sharer URL params */\r\n params?: ShareParams;\r\n requiredParams?: ShareParams<boolean>;\r\n /**\r\n * Params function: A function that resolves the param value (Advanced use)\r\n * Use case: To define a custom template for share buttons like Email, whatsapp, telegram, sms ...etc\r\n */\r\n paramsFunc?: ShareParams<ShareParamsFunc>;\r\n /**\r\n * Object used to attach additional data in a custom template for 'paramsFunc'\r\n */\r\n data?: any;\r\n /**\r\n * Some button do not open a share window, instead they execute a function like Print and Copy buttons.\r\n */\r\n func?: (args: ShareButtonFuncArgs<any>) => void;\r\n}\r\n\r\n/**\r\n * Share params\r\n */\r\nexport interface ShareParams<T = string> {\r\n url?: T;\r\n title?: T;\r\n description?: T;\r\n image?: T;\r\n tags?: T;\r\n via?: T;\r\n appId?: T;\r\n redirectUrl?: T;\r\n}\r\n\r\n/**\r\n * Share param function (Used to define message body template)\r\n */\r\nexport type ShareParamsFunc = (p: ShareParams) => string;\r\n\r\n/**\r\n * Share button function arguments (used in copyToClipboard as function arguments)\r\n */\r\nexport interface ShareButtonFuncArgs<T> {\r\n clipboard?: Clipboard;\r\n params?: ShareParams;\r\n data?: T;\r\n uiState?: WritableSignal<ShareDirectiveUpdater>;\r\n}\r\n\r\n/**\r\n * Share directive updater arguments (used in copyToClipboard to update button text and icon)\r\n */\r\nexport interface ShareDirectiveUpdater {\r\n icon?: any;\r\n text?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport enum SharerMethods {\r\n Anchor = 'anchor',\r\n Window = 'window'\r\n}\r\n\r\nexport type SharerMethod = SharerMethods | string;\r\n\r\n","import {\r\n IShareButton,\r\n IShareButtons,\r\n ShareButtonsConfig,\r\n ShareParams,\r\n ShareParamsFunc,\r\n SharerMethods\r\n} from './share.models';\r\nimport { copyToClipboard, printPage } from './utils';\r\n\r\n\r\nexport const defaultOptions: ShareButtonsConfig = {\r\n sharerMethod: SharerMethods.Anchor,\r\n theme: 'default',\r\n windowWidth: 800,\r\n windowHeight: 500,\r\n moreButtonIcon: ['fas', 'ellipsis-h'],\r\n lessButtonIcon: ['fas', 'minus'],\r\n moreButtonAriaLabel: 'Show more share buttons',\r\n lessButtonAriaLabel: 'Show less share buttons'\r\n};\r\n\r\n// Create message body that includes the sharing link used for Email, SMS and WhatsApp buttons\r\nconst linkInDescription: ShareParams<ShareParamsFunc> = {\r\n description: (p: ShareParams) => {\r\n return p.description ? `${ p.description }\\r\\n${ p.url }` : p.url;\r\n }\r\n};\r\n\r\nexport const facebookParams: IShareButton = {\r\n type: 'facebook',\r\n text: 'Facebook',\r\n ariaLabel: 'Share on Facebook',\r\n icon: ['fab', 'facebook-f'],\r\n color: '#4267B2',\r\n share: {\r\n desktop: 'https://facebook.com/sharer/sharer.php'\r\n },\r\n params: {\r\n url: 'u'\r\n }\r\n};\r\n\r\nexport const xParams: IShareButton = {\r\n type: 'x',\r\n text: 'X',\r\n ariaLabel: 'Post on X',\r\n icon: ['fab', 'x-twitter'],\r\n color: '#000',\r\n share: {\r\n desktop: 'https://x.com/intent/post'\r\n },\r\n params: {\r\n url: 'url',\r\n description: 'text',\r\n tags: 'hashtags',\r\n via: 'via'\r\n }\r\n};\r\n\r\nexport const linkedInParams: IShareButton = {\r\n type: 'linkedin',\r\n text: 'LinkedIn',\r\n ariaLabel: 'Share on LinkedIn',\r\n icon: ['fab', 'linkedin-in'],\r\n color: '#0a66c2',\r\n share: {\r\n desktop: 'https://www.linkedin.com/sharing/share-offsite'\r\n },\r\n params: {\r\n url: 'url'\r\n }\r\n};\r\n\r\nexport const pinterestParams: IShareButton = {\r\n type: 'pinterest',\r\n text: 'Pinterest',\r\n ariaLabel: 'Share on Pinterest',\r\n icon: ['fab', 'pinterest-p'],\r\n color: '#e60023',\r\n share: {\r\n desktop: 'https://pinterest.com/pin/create/button/'\r\n },\r\n params: {\r\n url: 'url',\r\n description: 'description',\r\n image: 'media'\r\n }\r\n};\r\n\r\nexport const redditParams: IShareButton = {\r\n type: 'reddit',\r\n text: 'Reddit',\r\n ariaLabel: 'Share on Reddit',\r\n icon: ['fab', 'reddit-alien'],\r\n color: '#FF4006',\r\n share: {\r\n desktop: 'https://www.reddit.com/submit'\r\n },\r\n params: {\r\n url: 'url',\r\n title: 'title'\r\n }\r\n};\r\n\r\nexport const tumblrParams: IShareButton = {\r\n type: 'tumblr',\r\n text: 'Tumblr',\r\n ariaLabel: 'Share on Tumblr',\r\n icon: ['fab', 'tumblr'],\r\n color: '#36465D',\r\n share: {\r\n desktop: 'https://tumblr.com/widgets/share/tool'\r\n },\r\n params: {\r\n url: 'canonicalUrl',\r\n description: 'caption',\r\n tags: 'tags'\r\n }\r\n};\r\n\r\nexport const mixParams: IShareButton = {\r\n type: 'mix',\r\n text: 'Mix',\r\n ariaLabel: 'Share on Mix',\r\n icon: ['fab', 'mix'],\r\n color: '#eb4924',\r\n share: {\r\n desktop: 'https://mix.com/add'\r\n },\r\n params: {\r\n url: 'url'\r\n }\r\n};\r\n\r\nexport const viberParams: IShareButton = {\r\n type: 'viber',\r\n text: 'Viber',\r\n ariaLabel: 'Share on Viber',\r\n icon: ['fab', 'viber'],\r\n color: '#665ca7',\r\n share: {\r\n android: 'viber://forward',\r\n ios: 'viber://forward'\r\n },\r\n params: {\r\n description: 'text'\r\n },\r\n paramsFunc: linkInDescription,\r\n requiredParams: {\r\n description: true\r\n }\r\n};\r\n\r\nexport const vkParams: IShareButton = {\r\n type: 'vk',\r\n text: 'VKontakte',\r\n ariaLabel: 'Share on VKontakte',\r\n icon: ['fab', 'vk'],\r\n color: '#4C75A3',\r\n share: {\r\n desktop: 'https://vk.com/share.php'\r\n },\r\n params: {\r\n url: 'url'\r\n }\r\n};\r\n\r\nexport const telegramParams: IShareButton = {\r\n type: 'telegram',\r\n text: 'Telegram',\r\n ariaLabel: 'Share on Telegram',\r\n icon: ['fab', 'telegram-plane'],\r\n color: '#0088cc',\r\n share: {\r\n desktop: 'https://t.me/share/url'\r\n },\r\n params: {\r\n url: 'url',\r\n description: 'text'\r\n }\r\n};\r\n\r\nexport const messengerParams: IShareButton = {\r\n type: 'messenger',\r\n text: 'Messenger',\r\n ariaLabel: 'Share on Messenger',\r\n icon: ['fab', 'facebook-messenger'],\r\n color: '#168AFF',\r\n share: {\r\n desktop: 'https://www.facebook.com/dialog/send',\r\n android: 'fb-messenger://share/',\r\n ios: 'fb-messenger://share/'\r\n },\r\n params: {\r\n url: 'link',\r\n appId: 'app_id',\r\n redirectUrl: 'redirect_uri'\r\n }\r\n};\r\n\r\nexport const whatsappParams: IShareButton = {\r\n type: 'whatsapp',\r\n text: 'WhatsApp',\r\n ariaLabel: 'Share on WhatsApp',\r\n icon: ['fab', 'whatsapp'],\r\n color: '#25D366',\r\n share: {\r\n desktop: 'https://api.whatsapp.com/send',\r\n android: 'whatsapp://send',\r\n ios: 'https://api.whatsapp.com/send'\r\n },\r\n params: {\r\n url: 'link',\r\n description: 'text'\r\n },\r\n requiredParams: {\r\n description: true\r\n },\r\n paramsFunc: linkInDescription\r\n};\r\n\r\nexport const xingParams: IShareButton = {\r\n type: 'xing',\r\n text: 'Xing',\r\n ariaLabel: 'Share on Xing',\r\n icon: ['fab', 'xing'],\r\n color: '#006567',\r\n share: {\r\n desktop: 'https://www.xing.com/spi/shares/new'\r\n },\r\n params: {\r\n url: 'url'\r\n }\r\n};\r\n\r\nexport const lineParams: IShareButton = {\r\n type: 'line',\r\n text: 'Line',\r\n ariaLabel: 'Share on Line',\r\n icon: ['fab', 'line'],\r\n color: '#00b900',\r\n share: {\r\n desktop: 'https://social-plugins.line.me/lineit/share'\r\n },\r\n params: {\r\n url: 'url'\r\n }\r\n};\r\n\r\nexport const smsParams: IShareButton = {\r\n type: 'sms',\r\n text: 'SMS',\r\n ariaLabel: 'Share link via SMS',\r\n icon: ['fas', 'sms'],\r\n color: '#20c16c',\r\n share: {\r\n desktop: 'sms:',\r\n ios: 'sms:&'\r\n },\r\n params: {\r\n description: 'body'\r\n },\r\n paramsFunc: linkInDescription,\r\n requiredParams: {\r\n description: true\r\n }\r\n};\r\n\r\nexport const emailParams: IShareButton = {\r\n type: 'email',\r\n text: 'Email',\r\n ariaLabel: 'Share link via email',\r\n icon: ['fas', 'envelope'],\r\n color: '#FF961C',\r\n share: {\r\n desktop: 'mailto:'\r\n },\r\n params: {\r\n title: 'subject',\r\n description: 'body'\r\n },\r\n paramsFunc: linkInDescription,\r\n requiredParams: {\r\n description: true\r\n }\r\n};\r\n\r\nexport const printerParams: IShareButton = {\r\n type: 'print',\r\n text: 'Print',\r\n ariaLabel: 'Print page',\r\n icon: ['fas', 'print'],\r\n color: '#765AA2',\r\n func: printPage\r\n};\r\n\r\nexport const copyParams: IShareButton = {\r\n type: 'copy',\r\n text: 'Copy link',\r\n ariaLabel: 'Copy link',\r\n icon: ['fas', 'link'],\r\n color: '#607D8B',\r\n data: {\r\n text: 'Copy link',\r\n icon: ['fas', 'link'],\r\n successText: 'Copied',\r\n successIcon: ['fas', 'check'],\r\n delay: 2000\r\n },\r\n func: copyToClipboard\r\n}\r\n\r\nexport const SHARE_BUTTONS: IShareButtons = {\r\n facebook: facebookParams,\r\n x: xParams,\r\n linkedin: linkedInParams,\r\n pinterest: pinterestParams,\r\n reddit: redditParams,\r\n tumblr: tumblrParams,\r\n mix: mixParams,\r\n viber: viberParams,\r\n vk: vkParams,\r\n telegram: telegramParams,\r\n messenger: messengerParams,\r\n whatsapp: whatsappParams,\r\n xing: xingParams,\r\n line: lineParams,\r\n sms: smsParams,\r\n email: emailParams,\r\n print: printerParams,\r\n copy: copyParams\r\n};\r\n\r\nexport type ShareButtonProp =\r\n string\r\n | 'facebook'\r\n | 'x'\r\n | 'pinterest'\r\n | 'linkedin'\r\n | 'email'\r\n | 'print'\r\n | 'reddit'\r\n | 'copy'\r\n | 'xing'\r\n | 'line'\r\n | 'sms'\r\n | 'tumblr'\r\n | 'whatsapp'\r\n | 'messenger'\r\n | 'telegram'\r\n | 'vk'\r\n | 'viber'\r\n | 'mix';\r\n","import { inject, Injectable, WritableSignal } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { Meta } from '@angular/platform-browser';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { Clipboard } from '@angular/cdk/clipboard';\r\nimport { getValidUrl } from './utils';\r\nimport { SHARE_BUTTONS } from './share.defaults';\r\nimport { SHARE_ICONS, IShareButton, ShareParams, ShareParamsFunc, SharerMethod, SharerMethods } from './share.models';\r\n\r\ninterface ShareLinkParams {\r\n url: string;\r\n params: Record<string, string>;\r\n target?: string;\r\n}\r\n\r\ninterface WindowOptions {\r\n windowObj?: Window;\r\n openFunc?: string;\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\ninterface CreateShareButtonOptions {\r\n name: string;\r\n params: ShareParams;\r\n props?: IShareButton;\r\n method?: SharerMethod;\r\n target?: string;\r\n windowOptions?: WindowOptions;\r\n uiState?: WritableSignal<any>;\r\n debug?: boolean;\r\n}\r\n\r\ninterface ShareOptions {\r\n params: ShareParams;\r\n props?: IShareButton;\r\n method?: SharerMethod;\r\n target?: string;\r\n windowOptions?: WindowOptions;\r\n uiState?: WritableSignal<any>;\r\n debug?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ShareService {\r\n\r\n private readonly document: Document = inject(DOCUMENT);\r\n\r\n // This declaration just to allow SHARE_ICONS to load the icons\r\n private readonly icons: unknown = inject(SHARE_ICONS, { optional: true });\r\n\r\n private readonly meta: Meta = inject(Meta);\r\n\r\n private readonly platform: Platform = inject(Platform);\r\n\r\n private readonly clipboard: Clipboard = inject(Clipboard);\r\n\r\n /**\r\n * Get meta tag content\r\n */\r\n _getMetaTagContent(key: string): string {\r\n const metaUsingProperty: HTMLMetaElement = this.meta.getTag(`property=\"${ key }\"`);\r\n const metaUsingName: HTMLMetaElement = this.meta.getTag(`name=\"${ key }\"`);\r\n\r\n return (metaUsingProperty || metaUsingName)?.getAttribute('content') ?? null;\r\n }\r\n\r\n _getComputedUrl(url: string): string {\r\n return getValidUrl(url || this._getMetaTagContent('og:url') || this.document.location.href);\r\n }\r\n\r\n _getComputedParams(params: ShareParams): ShareParams {\r\n // If user provided a URL, then we cannot use the meta tag of the current page for the sharing parameters\r\n if (params.url) {\r\n return {\r\n title: params.title,\r\n description: params.description,\r\n image: params.image,\r\n tags: params.tags,\r\n via: params.via,\r\n url: this._getComputedUrl(params.url),\r\n appId: params.appId || this._getMetaTagContent('fb:app_id'),\r\n redirectUrl: params.redirectUrl || this.document.location.href\r\n }\r\n }\r\n return {\r\n title: params.title || this._getMetaTagContent('og:title'),\r\n description: params.description || this._getMetaTagContent('og:description'),\r\n image: params.image || this._getMetaTagContent('og:image'),\r\n tags: params.tags,\r\n via: params.via,\r\n url: this._getComputedUrl(params.url),\r\n appId: params.appId || this._getMetaTagContent('fb:app_id'),\r\n redirectUrl: params.redirectUrl || this.document.location.href\r\n }\r\n }\r\n\r\n _getComputedUrlParams(shareButton: IShareButton, params: ShareParams): Record<string, string> {\r\n const computedParams: ShareParams = this._getComputedParams(params);\r\n\r\n return Object.entries(shareButton.params).reduce((params: Record<string, string>, [key, realKey]: [string, string]) => {\r\n // Check if param has a value\r\n if ((shareButton.requiredParams && shareButton.requiredParams[key]) || computedParams[key]) {\r\n // Check if param has a resolver function\r\n const resolver: ShareParamsFunc = shareButton.paramsFunc?.[key];\r\n params[realKey] = resolver ? resolver(computedParams) : computedParams[key];\r\n }\r\n return params;\r\n }, {});\r\n }\r\n\r\n _getShareButtonInstance(name: string, props: IShareButton): IShareButton {\r\n /** Combine injected option with default options */\r\n const button: IShareButton = props ? { ...SHARE_BUTTONS[name], ...props } : SHARE_BUTTONS[name];\r\n\r\n if (button) {\r\n return button;\r\n }\r\n throw new Error(`[ShareButtons]: The share button '${ button }' does not exist!`);\r\n }\r\n\r\n private share(shareButton: IShareButton, options: ShareOptions): void {\r\n let sharerLink: string;\r\n if (this.platform.IOS && shareButton.share.ios) {\r\n sharerLink = shareButton.share.ios;\r\n } else if (this.platform.ANDROID && shareButton.share.android) {\r\n sharerLink = shareButton.share.android;\r\n } else {\r\n sharerLink = shareButton.share.desktop;\r\n }\r\n\r\n const params: Record<string, string> = this._getComputedUrlParams(shareButton, options.params);\r\n\r\n if (sharerLink) {\r\n switch (options.method) {\r\n case SharerMethods.Anchor:\r\n this.openViaAnchor({\r\n params,\r\n url: sharerLink,\r\n target: options.target\r\n }, options.debug);\r\n break;\r\n\r\n case SharerMethods.Window:\r\n this.openViaWindow({\r\n params,\r\n url: sharerLink,\r\n target: options.target\r\n }, options.windowOptions, options.debug);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n open(options: CreateShareButtonOptions): void {\r\n const button: IShareButton = this._getShareButtonInstance(options.name, options.props);\r\n this.openInstance(options, button);\r\n }\r\n\r\n openInstance(options: ShareOptions, button: IShareButton): void {\r\n if (button.share) {\r\n this.share(button, options);\r\n } else {\r\n button.func({\r\n params: this._getComputedParams(options.params),\r\n data: button.data,\r\n clipboard: this.clipboard,\r\n uiState: options.uiState\r\n });\r\n }\r\n }\r\n\r\n private openViaWindow(args: ShareLinkParams, windowOptions?: WindowOptions, debug?: boolean): void {\r\n const finalUrl: string = `${ args.url }?${ new HttpParams({ fromObject: args.params }).toString() }`;\r\n\r\n if (debug) {\r\n console.log('[SHARE BUTTONS]: open link via window', finalUrl);\r\n }\r\n\r\n const windowRef: Window = windowOptions?.windowObj || this.document.defaultView;\r\n // Open link using Window object\r\n const openWindow = windowRef?.[windowOptions?.openFunc] || this.document.defaultView.open;\r\n\r\n openWindow(finalUrl, args.target ?? '_blank', `width=${ windowOptions?.width || 800 }, height=${ windowOptions?.height || 500 }`);\r\n\r\n // Prevent security vulnerability https://medium.com/@jitbit/target-blank-the-most-underestimated-vulnerability-ever-96e328301f4c\r\n windowRef.opener ??= null;\r\n }\r\n\r\n private openViaAnchor(args: ShareLinkParams, debug?: boolean): void {\r\n const finalUrl: string = `${ args.url }?${ new HttpParams({ fromObject: args.params }).toString() }`;\r\n\r\n if (debug) {\r\n console.log('[SHARE BUTTONS]: open link via anchor', finalUrl);\r\n }\r\n\r\n const linkElement: HTMLAnchorElement = this.document.createElement('a');\r\n // Make it open in a new tab/window (depends on user's browser configuration)\r\n linkElement.setAttribute('target', args.target ?? '_blank');\r\n\r\n // Prevent security vulnerability https://medium.com/@jitbit/target-blank-the-most-underestimated-vulnerability-ever-96e328301f4c\r\n linkElement.setAttribute('rel', 'noopener noreferrer');\r\n linkElement.href = finalUrl;\r\n linkElement.click();\r\n linkElement.remove();\r\n }\r\n}\r\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\r\nimport { IShareButton, IShareButtons } from './share.models';\r\nimport { SHARE_BUTTONS } from './share.defaults';\r\n\r\nexport const SHARE_BUTTONS_PROP: InjectionToken<IShareButtons> = new InjectionToken<IShareButtons>('SHARE_BUTTONS_PROP', {\r\n providedIn: 'root',\r\n factory: () => SHARE_BUTTONS\r\n});\r\n\r\nexport function customShareButton(key: string, button: IShareButton): EnvironmentProviders {\r\n SHARE_BUTTONS[key] = {\r\n ...SHARE_BUTTONS[key],\r\n ...button\r\n };\r\n return makeEnvironmentProviders([\r\n {\r\n provide: SHARE_BUTTONS_PROP,\r\n useValue: SHARE_BUTTONS\r\n }\r\n ]);\r\n}\r\n","import {\r\n Directive,\r\n inject,\r\n signal,\r\n effect,\r\n output,\r\n computed,\r\n untracked,\r\n input,\r\n Signal,\r\n ElementRef,\r\n InputSignal,\r\n WritableSignal,\r\n OutputEmitterRef,\r\n} from '@angular/core';\r\n\r\nimport { ShareService } from './share.service';\r\nimport {\r\n IShareButton,\r\n IShareButtons,\r\n ShareButtonsConfig,\r\n ShareDirectiveUpdater,\r\n SHARE_BUTTONS_CONFIG,\r\n} from './share.models';\r\nimport { ShareButtonProp } from './share.defaults';\r\nimport { SHARE_BUTTONS_PROP } from './custom-share-button-provider';\r\n\r\n@Directive({\r\n selector: '[shareButton]',\r\n exportAs: 'shareButton',\r\n host: {\r\n '[style.--button-color]': 'color()',\r\n '[attr.aria-label]': 'shareButtonInstance().ariaLabel',\r\n '(click)': 'share()'\r\n }\r\n})\r\nexport class ShareButtonDirective {\r\n\r\n private readonly shareButtonsProps: IShareButtons = inject(SHARE_BUTTONS_PROP);\r\n\r\n /** Injected options */\r\n private readonly options: ShareButtonsConfig = inject(SHARE_BUTTONS_CONFIG);\r\n\r\n /** Share directive element ref */\r\n private readonly shareService: ShareService = inject(ShareService);\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement;\r\n\r\n /** Share button UI state */\r\n uiState: WritableSignal<ShareDirectiveUpdater> = signal({});\r\n\r\n /** Share button color */\r\n color: Signal<string> = computed(() => this.shareButtonInstance().color);\r\n\r\n /** Share button text */\r\n text: Signal<string> = computed(() => this.uiState().text);\r\n\r\n /** Share button icon */\r\n icon: Signal<any> = computed(() => this.uiState().icon);\r\n\r\n /** Share button disabled */\r\n disabled: Signal<boolean> = computed(() => this.uiState().disabled);\r\n\r\n /** Share button type */\r\n shareButton: InputSignal<ShareButtonProp> = input.required<ShareButtonProp>();\r\n\r\n shareButtonInstance: Signal<IShareButton> = computed<IShareButton>(() => {\r\n return this.shareButtonsProps[this.shareButton()];\r\n });\r\n\r\n /** Sets the title parameter */\r\n title: InputSignal<string> = input<string>();\r\n\r\n /** Sets the description parameter */\r\n description: InputSignal<string> = input<string>();\r\n\r\n /** Sets the image parameter for sharing on Pinterest */\r\n image: InputSignal<string> = input<string>();\r\n\r\n /** Sets the tags parameter for sharing on X and Tumblr */\r\n tags: InputSignal<string> = input<string>();\r\n\r\n /** Sets the fb messenger redirect url to enable sharing on Messenger desktop */\r\n redirectUrl: InputSignal<string> = input<string>();\r\n\r\n /** Sharing link */\r\n url: InputSignal<string> = input<string>();\r\n\r\n /** Stream that emits when share dialog is opened */\r\n opened: OutputEmitterRef<string> = output<string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const button: IShareButton = this.shareButtonInstance();\r\n\r\n if (!button) {\r\n throw new Error(`[ShareButtons]: The share button '${ this.shareButton() }' does not exist!`);\r\n }\r\n untracked(() => {\r\n // Set share button properties\r\n this.uiState.set({\r\n icon: button.icon,\r\n text: button.text,\r\n disabled: false\r\n });\r\n });\r\n });\r\n\r\n effect(() => {\r\n // Set disabled attribute only when disabled state is true, because disabled=\"false\" will also disable the button\r\n this.nativeElement.toggleAttribute('disabled', this.uiState().disabled);\r\n });\r\n }\r\n\r\n /**\r\n * Share the link\r\n */\r\n share(): void {\r\n this.shareService.openInstance({\r\n params: {\r\n url: this.url(),\r\n title: this.title(),\r\n description: this.description(),\r\n image: this.image(),\r\n tags: this.tags(),\r\n redirectUrl: this.redirectUrl()\r\n },\r\n target: this.options.sharerTarget,\r\n debug: this.options.debug,\r\n method: this.options.sharerMethod,\r\n uiState: this.uiState,\r\n }, this.shareButtonInstance());\r\n\r\n // Emit after share action is done\r\n this.opened.emit(this.shareButton());\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}