Remove target=_blank from username links

Mobile Safari ignores the click preventDefault and not show the Account popover. Removing target_blank fixes this ignorance

Kinda hacky fix for now
This commit is contained in:
Lim Chee Aun 2022-12-11 09:28:02 +08:00
parent ee074bec7f
commit 039d4661fb
3 changed files with 17 additions and 4 deletions

View file

@ -15,7 +15,7 @@ export default ({ account, showAvatar, showAcct, short, external }) => {
<a <a
class={`name-text ${short ? 'short' : ''}`} class={`name-text ${short ? 'short' : ''}`}
href={url} href={url}
target="_blank" // target="_blank"
title={`@${acct}`} title={`@${acct}`}
onClick={(e) => { onClick={(e) => {
if (external) return; if (external) return;

View file

@ -506,7 +506,7 @@ function Status({ statusID, status, withinContext, size = 'm', skeleton }) {
{size !== 's' && ( {size !== 's' && (
<a <a
href={url} href={url}
target="_blank" // target="_blank"
title={`@${acct}`} title={`@${acct}`}
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
@ -604,6 +604,14 @@ function Status({ statusID, status, withinContext, size = 'm', skeleton }) {
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: enhanceContent(content, { __html: enhanceContent(content, {
emojis, emojis,
postEnhanceDOM: (dom) => {
dom
.querySelectorAll('a.u-url[target="_blank"]')
.forEach((a) => {
// Remove target="_blank" from links
a.removeAttribute('target');
});
},
}), }),
}} }}
/> />

View file

@ -1,7 +1,7 @@
import emojifyText from './emojify-text'; import emojifyText from './emojify-text';
export default (content, opts = {}) => { export default (content, opts = {}) => {
const { emojis } = opts; const { emojis, postEnhanceDOM = () => {} } = opts;
let enhancedContent = content; let enhancedContent = content;
const dom = document.createElement('div'); const dom = document.createElement('div');
dom.innerHTML = enhancedContent; dom.innerHTML = enhancedContent;
@ -27,7 +27,7 @@ export default (content, opts = {}) => {
const pre = document.createElement('pre'); const pre = document.createElement('pre');
const code = document.createElement('code'); const code = document.createElement('code');
const breaks = block.querySelectorAll('br'); const breaks = block.querySelectorAll('br');
Array.from(breaks).forEach((br) => br.replaceWith('\n')); breaks.forEach((br) => br.replaceWith('\n'));
code.innerHTML = block.innerText code.innerHTML = block.innerText
.trim() .trim()
// .replace(/^```/g, '') // .replace(/^```/g, '')
@ -37,6 +37,11 @@ export default (content, opts = {}) => {
block.replaceWith(pre); block.replaceWith(pre);
}); });
if (postEnhanceDOM) {
postEnhanceDOM(dom); // mutate dom
}
enhancedContent = dom.innerHTML; enhancedContent = dom.innerHTML;
return enhancedContent; return enhancedContent;
}; };