Make reply UI work even when javascript is disabled
This commit is contained in:
parent
1382bd4fee
commit
9c38af0075
4 changed files with 33 additions and 18 deletions
|
@ -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");
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
@ -23,10 +17,11 @@ 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"));
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue