This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/app/components/share-panel.js
2020-12-01 15:31:26 -03:00

70 lines
2.0 KiB
JavaScript

import Component from "@ember/component";
import I18n from "I18n";
import Sharing from "discourse/lib/sharing";
import { alias } from "@ember/object/computed";
import discourseComputed from "discourse-common/utils/decorators";
import { escapeExpression } from "discourse/lib/utilities";
import { isEmpty } from "@ember/utils";
import { later } from "@ember/runloop";
export default Component.extend({
tagName: null,
type: alias("panel.model.type"),
topic: alias("panel.model.topic"),
privateCategory: alias("panel.model.topic.category.read_restricted"),
@discourseComputed("topic.{isPrivateMessage,invisible,category}")
sources(topic) {
const privateContext =
this.siteSettings.login_required ||
(topic && topic.isPrivateMessage) ||
(topic && topic.invisible) ||
this.privateCategory;
return Sharing.activeSources(this.siteSettings.share_links, privateContext);
},
@discourseComputed("type", "topic.title")
shareTitle(type, topicTitle) {
topicTitle = escapeExpression(topicTitle);
return I18n.t("share.topic_html", { topicTitle });
},
@discourseComputed("panel.model.shareUrl", "topic.shareUrl")
shareUrl(forcedShareUrl, shareUrl) {
shareUrl = forcedShareUrl || shareUrl;
if (isEmpty(shareUrl)) {
return;
}
// Relative urls
if (shareUrl.indexOf("/") === 0) {
const location = window.location;
shareUrl = `${location.protocol}//${location.host}${shareUrl}`;
}
return encodeURI(shareUrl);
},
didInsertElement() {
this._super(...arguments);
later(() => {
if (this.element) {
const textArea = this.element.querySelector(".topic-share-url");
textArea.style.height = textArea.scrollHeight + "px";
textArea.focus();
textArea.setSelectionRange(0, this.shareUrl.length);
}
}, 200);
},
actions: {
share(source) {
Sharing.shareSource(source, {
url: this.shareUrl,
title: this.get("topic.title"),
});
},
},
});