Make reply UI work even when javascript is disabled

This commit is contained in:
Jaiwanth 2021-06-01 17:06:39 +05:30
parent 1382bd4fee
commit 9c38af0075
4 changed files with 33 additions and 18 deletions

View file

@ -374,7 +374,7 @@ export default class ReplyThread extends React.Component {
} else if (this.props.isExporting) { } else if (this.props.isExporting) {
const eventId = ReplyThread.getParentEventId(this.props.parentEv); const eventId = ReplyThread.getParentEventId(this.props.parentEv);
header = <p style={{ marginTop: -5, marginBottom: 5 }}> header = <p style={{ marginTop: -5, marginBottom: 5 }}>
In reply to <a className="mx_reply_anchor" scroll-to={`${eventId}`}>this message</a> In reply to <a className="mx_reply_anchor" href={`#${eventId}`} scroll-to={eventId}>this message</a>
</p>; </p>;
} else if (this.state.loading) { } else if (this.state.loading) {
const Spinner = sdk.getComponent("elements.Spinner"); const Spinner = sdk.getComponent("elements.Spinner");

View file

@ -216,7 +216,7 @@ export default class HTMLExporter extends Exporter {
const hasAvatar = this.hasAvatar(mxEv); const hasAvatar = this.hasAvatar(mxEv);
if (hasAvatar) this.saveAvatarIfNeeded(mxEv); if (hasAvatar) this.saveAvatarIfNeeded(mxEv);
return <li id={mxEv.getId()}> return <li className="mx_Export_EventWrapper" id={mxEv.getId()}>
<EventTile <EventTile
mxEvent={mxEv} mxEvent={mxEv}
continuation={continuation} continuation={continuation}

View file

@ -69,6 +69,26 @@ a.mx_reply_anchor:hover{
left: 9px; left: 9px;
} }
* {
scroll-behavior: smooth !important;
}
li.mx_Export_EventWrapper:target {
background: white;
animation: mx_event_highlight_animation 2s linear;
}
@keyframes mx_event_highlight_animation {
0%,100% {
background: white;
}
50% {
background: #e3e2df;
}
}
.mx_RedactedBody img.mx_export_trash_icon { .mx_RedactedBody img.mx_export_trash_icon {
height: 14px; height: 14px;
width: 14px; width: 14px;

View file

@ -1,16 +1,10 @@
export default ` export default `
function scrollToElement(replyId){ function showToastIfNeeded(replyId){
let el = document.getElementById(replyId); let el = document.getElementById(replyId);
if(!el) { if(!el) {
showToast("The message you're looking for wasn't exported"); showToast("The message you're looking for wasn't exported");
return; return;
}; };
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
el.style.backgroundColor = '#f6f7f8';
el.style.transition = 'background-color 1s ease'
setTimeout(() => {
el.style.backgroundColor = "white"
}, 2000);
} }
function showToast(text) { function showToast(text) {
@ -25,8 +19,9 @@ function showToast(text) {
window.onload = () => { window.onload = () => {
document.querySelectorAll('.mx_reply_anchor').forEach(element => { document.querySelectorAll('.mx_reply_anchor').forEach(element => {
element.addEventListener('click', event => { element.addEventListener('click', event => {
scrollToElement(event.target.getAttribute("scroll-to")); showToastIfNeeded(event.target.getAttribute("scroll-to"));
}) })
}) })
} }
` `