@ribajs/bs4
Version:
Bootstrap 4 module for Riba.js
259 lines • 20 kB
JavaScript
import { Component } from "@ribajs/core";
import { getUrl } from "@ribajs/utils";
import labelTemplate from "./bs4-share.label.html?raw";
import { DropdownService } from "@ribajs/bs4";
import { hasChildNodesTrim } from "@ribajs/utils/src/dom.js";
export class Bs4ShareComponent extends Component {
static tagName = "bs4-share";
_debug = false;
static get observedAttributes() {
return [
"type",
"title",
"text",
"url",
"media-url",
"label",
"dropdown-direction",
];
}
dropdown;
static count = 0;
scope;
constructor() {
super();
this.scope = this.getScopeDefaults();
this.debug("constructor", this.scope);
Bs4ShareComponent.count++;
this.onExternalOpenEvent = this.onExternalOpenEvent.bind(this);
this.onExternalCloseEvent = this.onExternalCloseEvent.bind(this);
}
getDefaultShareServices() {
const newLine = "%0A";
const shareItems = [
{
id: "facebook",
label: "Facebook",
urlTemplate: "https://www.facebook.com/sharer/sharer.php?u={{url}}",
mediaUrlTemplate: "https://www.facebook.com/sharer/sharer.php?u={{media_url}}",
type: "popup",
url: "",
availableFor: ["page", "image", "video"],
},
{
id: "twitter",
label: "Twitter",
urlTemplate: "https://twitter.com/intent/tweet?text={{text}}&url={{url}}",
mediaUrlTemplate: `https://twitter.com/intent/tweet?text={{text}}&url={{media_url}}${newLine}({{url}})`,
url: "",
availableFor: ["page", "image", "video"],
},
{
id: "pinterest",
label: "Pinterest",
urlTemplate: "http://www.pinterest.com/pin/create/button/" +
"?url={{url}}&media={{media_url}}&description={{text}}",
type: "popup",
url: "",
availableFor: ["image", "video"],
},
{
id: "whatsapp",
label: "WhatsApp",
urlTemplate: `https://api.whatsapp.com/send?text={{text}}${newLine}${newLine}{{url}}`,
mediaUrlTemplate: `https://api.whatsapp.com/send?text={{text}}${newLine}${newLine}{{media_url}}${newLine}({{url}})`,
type: "popup",
url: "",
availableFor: ["page", "image", "video"],
},
{
id: "telegram",
label: "Telegram",
urlTemplate: `https://telegram.me/share/url?url={{media_url}}&text={{text}}`,
mediaUrlTemplate: `https://telegram.me/share/url?url={{media_url}}&text={{text}}${newLine}({{url}})`,
type: "popup",
url: "",
availableFor: ["page", "image", "video"],
},
{
id: "email",
label: "Email",
urlTemplate: `mailto:?subject={{title}}&body={{text}}${newLine}${newLine}{{url}}`,
mediaUrlTemplate: `mailto:?subject={{title}}&body={{text}}${newLine}${newLine}{{media_url}}${newLine}({{url}})`,
type: "href",
url: "",
availableFor: ["page", "image", "video"],
},
{
id: "download",
label: "Download image",
urlTemplate: "{{raw_media_url}}",
type: "download",
url: "",
availableFor: ["image", "video"],
},
];
return shareItems;
}
isIos() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i) !== null;
}
isAndroid() {
return navigator.userAgent.match(/Android/i) !== null;
}
browserSupportsNativeShare() {
return typeof navigator.share === "function";
}
getScopeDefaults() {
const scope = {
type: "page",
title: document.title,
text: "Look at this! 👀🤩",
url: window.location.href,
label: "Share",
labelTemplate,
isAndroid: this.isAndroid(),
isIos: this.isIos(),
isDesktop: false,
isNative: this.browserSupportsNativeShare(),
dropdownId: "dropdownShare" + Bs4ShareComponent.count,
shareItems: this.getDefaultShareServices(),
dropdownDirection: "down",
share: this.share,
shareOnService: this.shareOnService,
};
scope.isDesktop = !scope.isIos && !scope.isAndroid;
return scope;
}
onExternalOpenEvent() {
this.dropdown?.show();
}
onExternalCloseEvent() {
this.dropdown?.close();
}
connectedCallback() {
super.connectedCallback();
this.init(Bs4ShareComponent.observedAttributes);
this.addEventListeners();
}
disconnectedCallback() {
super.disconnectedCallback();
this.removeEventListeners();
}
addEventListeners() {
this.addEventListener("open", this.onExternalOpenEvent);
this.addEventListener("close", this.onExternalCloseEvent);
}
removeEventListeners() {
this.removeEventListener("open", this.onExternalOpenEvent);
this.removeEventListener("close", this.onExternalOpenEvent);
}
getURLForShare() {
if (this.scope.type === "page" && this.scope.url) {
return getUrl(this.scope.url);
}
return window.location.href;
}
getMediaUrlForShare() {
if (this.scope.type !== "page" && this.scope.url) {
return getUrl(this.scope.url);
}
return "";
}
getTextForShare() {
return this.scope.text;
}
getTitleForShare() {
return this.scope.title;
}
updateShareURLs() {
for (const shareItem of this.scope.shareItems) {
const url = this.getURLForShare();
const mediaUrl = this.getMediaUrlForShare();
const shareText = this.getTextForShare();
const shareTitle = this.getTitleForShare();
let urlTemplate = shareItem.urlTemplate;
if (this.scope.type !== "page" && shareItem.mediaUrlTemplate) {
urlTemplate = shareItem.mediaUrlTemplate;
}
const shareURL = urlTemplate
.replace("{{url}}", encodeURIComponent(url))
.replace("{{url}}", encodeURIComponent(url))
.replace("{{media_url}}", encodeURIComponent(mediaUrl))
.replace("{{raw_media_url}}", mediaUrl)
.replace("{{text}}", encodeURIComponent(shareText))
.replace("{{title}}", encodeURIComponent(shareTitle));
shareItem.available = shareItem.availableFor.includes(this.scope.type);
shareItem.url = shareURL;
}
}
initDropdown() {
const dropDownButtonElement = this.querySelector(".dropdown-toggle-share");
if (!dropDownButtonElement) {
console.warn('Element with selector ".dropdown-toggle-share" not found!', this);
return;
}
this.dropdown = new DropdownService(dropDownButtonElement);
}
shareOnService(event, controller, el) {
this.debug("Open popup");
this.dropdown?.close();
if (!el || !el.href) {
console.error("No href attribute found");
return false;
}
if ((el.hasAttribute("type") && el.getAttribute("type") === "download") ||
el.getAttribute("type") === "href") {
return true;
}
event.preventDefault();
event.stopPropagation();
window.open(el.href, "Share", "scrollbars=yes,resizable=yes,toolbar=no," +
"location=yes,width=550,height=420,top=100,left=" +
(window.screen ? Math.round(screen.width / 2 - 275) : 100));
return false;
}
async share(event) {
this.debug("share", this.scope);
event.preventDefault();
event.stopPropagation();
if (this.scope.isNative && !this.scope.isDesktop) {
return navigator
.share({
title: this.scope.title,
text: `${this.scope.text}\r\n\r\n`,
url: this.scope.url || window.location.href,
})
.catch((error) => {
if (error.name === "AbortError") {
return;
}
console.error(`Error ${error.name}: ${error.message}`, error);
});
}
else {
this.updateShareURLs();
return this.dropdown?.toggle();
}
}
async beforeBind() {
await super.beforeBind();
}
async afterBind() {
this.initDropdown();
await super.afterBind();
}
requiredAttributes() {
return ["url"];
}
async template() {
this.debug("template", this, hasChildNodesTrim(this));
if (this && hasChildNodesTrim(this)) {
this.scope.labelTemplate = this.innerHTML;
this.debug("Custom label template: ", this.scope.labelTemplate);
}
const { default: template } = await import("./bs4-share.component.html?raw");
return template;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnM0LXNoYXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2JzNC1zaGFyZS9iczQtc2hhcmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBd0Q3RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsU0FBUztJQUN2QyxNQUFNLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztJQUU3QixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRXRCLE1BQU0sS0FBSyxrQkFBa0I7UUFDM0IsT0FBTztZQUNMLE1BQU07WUFDTixPQUFPO1lBQ1AsTUFBTTtZQUNOLEtBQUs7WUFDTCxXQUFXO1lBQ1gsT0FBTztZQUNQLG9CQUFvQjtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVTLFFBQVEsQ0FBbUI7SUFHckMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFVixLQUFLLENBQVE7SUFFcEI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElB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