Merge pull request #1396 from Retrospring/bugfix/inbox-sharing
This commit is contained in:
commit
6ff7b08f15
|
@ -3,9 +3,7 @@
|
|||
require "cgi"
|
||||
|
||||
class Ajax::AnswerController < AjaxController
|
||||
include SocialHelper::TwitterMethods
|
||||
include SocialHelper::TumblrMethods
|
||||
include SocialHelper::TelegramMethods
|
||||
include SocialHelper
|
||||
|
||||
def create
|
||||
params.require :id
|
||||
|
@ -73,6 +71,8 @@ class Ajax::AnswerController < AjaxController
|
|||
private
|
||||
|
||||
def sharing_hash(answer) = {
|
||||
url: answer_share_url(answer),
|
||||
text: prepare_tweet(answer, nil, true),
|
||||
twitter: twitter_share_url(answer),
|
||||
tumblr: tumblr_share_url(answer),
|
||||
telegram: telegram_share_url(answer),
|
||||
|
|
|
@ -5,17 +5,20 @@ require "cgi"
|
|||
module SocialHelper::TwitterMethods
|
||||
include MarkdownHelper
|
||||
|
||||
def prepare_tweet(answer, post_tag = nil)
|
||||
def prepare_tweet(answer, post_tag = nil, omit_url = false)
|
||||
question_content = twitter_markdown answer.question.content.gsub(/@(\w+)/, '\1')
|
||||
original_question_length = question_content.length
|
||||
answer_content = twitter_markdown answer.content
|
||||
original_answer_length = answer_content.length
|
||||
|
||||
unless omit_url
|
||||
answer_url = answer_url(
|
||||
id: answer.id,
|
||||
username: answer.user.screen_name,
|
||||
host: APP_CONFIG["hostname"],
|
||||
protocol: (APP_CONFIG["https"] ? :https : :http),
|
||||
)
|
||||
end
|
||||
|
||||
parsed_tweet = { valid: false }
|
||||
tweet_text = ""
|
||||
|
|
|
@ -23,7 +23,7 @@ export default class extends Controller {
|
|||
this.twitterTarget.addEventListener('click', () => this.close());
|
||||
this.tumblrTarget.addEventListener('click', () => this.close());
|
||||
this.telegramTarget.addEventListener('click', () => this.close());
|
||||
this.otherTarget.addEventListener('click', () => this.close());
|
||||
this.otherTarget.addEventListener('click', () => this.closeAfterShare());
|
||||
|
||||
if (this.hasCustomTarget) {
|
||||
this.customTarget.addEventListener('click', () => this.close());
|
||||
|
@ -50,4 +50,8 @@ export default class extends Controller {
|
|||
close(): void {
|
||||
(this.element.closest(".inbox-entry")).remove();
|
||||
}
|
||||
|
||||
closeAfterShare(): void {
|
||||
this.otherTarget.addEventListener('retrospring:shared', () => this.close());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { Controller } from '@hotwired/stimulus';
|
||||
import noop from 'utilities/noop';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
|
@ -35,8 +36,10 @@ export default class extends Controller {
|
|||
};
|
||||
}
|
||||
|
||||
navigator.share(shareConfiguration).then(() => {
|
||||
navigator.share(shareConfiguration)
|
||||
.then(() => {
|
||||
this.element.dispatchEvent(new CustomEvent('retrospring:shared'));
|
||||
});
|
||||
})
|
||||
.catch(noop);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,8 @@ export function answerEntryHandler(event: Event): void {
|
|||
|
||||
const shareButton = inboxEntry.querySelector<HTMLButtonElement>('[data-controller="share"]');
|
||||
if (shareButton != null) {
|
||||
shareButton.dataset.shareTextValue = decodeURIComponent(data.sharing.custom).replaceAll('+', ' ');
|
||||
shareButton.dataset.shareUrlValue = data.sharing.url;
|
||||
shareButton.dataset.shareTextValue = data.sharing.text;
|
||||
}
|
||||
|
||||
const sharing = inboxEntry.querySelector<HTMLElement>('.inbox-entry__sharing');
|
||||
|
|
|
@ -91,6 +91,8 @@ describe Ajax::AnswerController, :ajax_controller, type: :controller do
|
|||
let(:expected_response) do
|
||||
super().merge(
|
||||
"sharing" => {
|
||||
"url" => a_string_matching("https://#{APP_CONFIG['hostname']}/"),
|
||||
"text" => a_string_matching("Werfen Sie nicht länger das Fenster zum Geld hinaus!"),
|
||||
"twitter" => a_string_matching("https://twitter.com/"),
|
||||
"tumblr" => a_string_matching("https://www.tumblr.com/"),
|
||||
"telegram" => a_string_matching("https://t.me/"),
|
||||
|
@ -170,6 +172,8 @@ describe Ajax::AnswerController, :ajax_controller, type: :controller do
|
|||
let(:expected_response) do
|
||||
super().merge(
|
||||
"sharing" => {
|
||||
"url" => a_string_matching("https://#{APP_CONFIG['hostname']}/"),
|
||||
"text" => a_string_matching("Werfen Sie nicht länger das Fenster zum Geld hinaus!"),
|
||||
"twitter" => a_string_matching("https://twitter.com/"),
|
||||
"tumblr" => a_string_matching("https://www.tumblr.com/"),
|
||||
"telegram" => a_string_matching("https://t.me/"),
|
||||
|
|
|
@ -40,6 +40,17 @@ describe SocialHelper::TwitterMethods, type: :helper do
|
|||
end
|
||||
end
|
||||
|
||||
context "when the url should be omitted" do
|
||||
let(:question_content) { "question" }
|
||||
let(:answer_content) { "answer" }
|
||||
|
||||
subject { prepare_tweet(answer, nil, true) }
|
||||
|
||||
it "should include the suffix after the link" do
|
||||
expect(subject).to eq("question — answer")
|
||||
end
|
||||
end
|
||||
|
||||
context "when a suffix has been passed and the tweet needs to be shortened" do
|
||||
subject { prepare_tweet(answer, "#askracc") }
|
||||
|
||||
|
|
Loading…
Reference in New Issue