Fix bug where rich diff wasn't display by default

Instead, the original was displayed even when the edit was available.
This bug was introduced:

 * in 7c935ab for all edited posts, and
 * when rich diffs where first added, but only in cases where a perent
   comment was edited, and that parent was loaded by clicking `parent`
   from a top-level permalinked comment.
This commit is contained in:
Christopher Gurnee 2022-11-07 18:41:08 +00:00
parent 1b874bef66
commit 9134f3f569
3 changed files with 21 additions and 19 deletions

View file

@ -62,21 +62,22 @@ const Post = (props) => {
const innerHTML = Array(editedModes.length)
if (props.removed && isRemoved(props.selftext)) {
if (!hasOwnProperty.call(props, 'retrieved_utc') && !hasOwnProperty.call(props, 'retrieved_on') || !hasOwnProperty.call(props, 'created_utc')) {
innerHTML[editedModes.orig] = '<p>[removed too quickly to be archived]</p>'
innerHTML[editedModes.dfault] = '<p>[removed too quickly to be archived]</p>'
} else {
const retrieved = hasOwnProperty.call(props, 'retrieved_utc') ? props.retrieved_utc : props.retrieved_on;
innerHTML[editedModes.orig] = `<p>[removed within ${prettyTimeDiff(retrieved - props.created_utc)}]</p>`
innerHTML[editedModes.dfault] = `<p>[removed within ${prettyTimeDiff(retrieved - props.created_utc)}]</p>`
}
} else if (props.selftext && (props.is_self || !isDeleted(props.selftext))) {
innerHTML[editedModes.orig] = parse(props.selftext)
if (hasOwnProperty.call(props, 'edited_selftext')) {
innerHTML[editedModes.orig] = parse(props.selftext)
innerHTML[editedModes.edited] = parse(props.edited_selftext)
innerHTML[editedModes.rich] = Diff.execute(innerHTML[editedModes.orig], innerHTML[editedModes.edited])
}
innerHTML[editedModes.dfault] = Diff.execute(innerHTML[editedModes.orig], innerHTML[editedModes.edited])
} else
innerHTML[editedModes.dfault] = parse(props.selftext)
}
// eslint-disable-next-line react-hooks/rules-of-hooks
const [editedMode, setEditedMode] = useState(innerHTML[editedModes.rich] ? editedModes.rich : editedModes.orig)
const [editedMode, setEditedMode] = useState(editedModes.dfault)
const totalComments = <div className='total-comments'>
<Link to={props.permalink} replace={props.isLocFullPost}>{props.num_comments}&nbsp;comments</Link>&nbsp;

View file

@ -23,29 +23,30 @@ const Comment = (props) => {
const innerHTML = Array(editedModes.length)
if (props.removed && isRemoved(props.body)) {
if (!hasOwnProperty.call(props, 'retrieved_utc') && !hasOwnProperty.call(props, 'retrieved_on') || !hasOwnProperty.call(props, 'created_utc')) {
innerHTML[editedModes.orig] = '<p>[removed too quickly to be archived]</p>'
innerHTML[editedModes.dfault] = '<p>[removed too quickly to be archived]</p>'
} else if (props.created_utc < 1627776000) { // Aug 1 2021
const retrieved = hasOwnProperty.call(props, 'retrieved_utc') ? props.retrieved_utc : props.retrieved_on;
innerHTML[editedModes.orig] = `<p>[removed within ${prettyTimeDiff(retrieved - props.created_utc)}]</p>`
innerHTML[editedModes.dfault] = `<p>[removed within ${prettyTimeDiff(retrieved - props.created_utc)}]</p>`
}
// After around Aug 1 2021, Pushshift began updating comments from Reddit after around
// 24-48 hours, including removing(?) comments that were removed from Reddit. The presence
// of either retrieved_utc or retrieved_on can currently be used to test for this behaviour.
else if (hasOwnProperty.call(props, 'retrieved_utc')) {
innerHTML[editedModes.orig] = `<p>[removed within ${prettyTimeDiff(props.retrieved_utc - props.created_utc)}]</p>`
innerHTML[editedModes.dfault] = `<p>[removed within ${prettyTimeDiff(props.retrieved_utc - props.created_utc)}]</p>`
} else {
innerHTML[editedModes.orig] = `<p>[either removed too quickly, or <a href='https://www.reddit.com/r/pushshift/comments/pgzdav/the_api_now_appears_to_rewrite_nearly_all/'>removed(?) from archive</a> after ${prettyTimeDiff(props.retrieved_on - props.created_utc, true)}]</p>`
innerHTML[editedModes.dfault] = `<p>[either removed too quickly, or <a href='https://www.reddit.com/r/pushshift/comments/pgzdav/the_api_now_appears_to_rewrite_nearly_all/'>removed(?) from archive</a> after ${prettyTimeDiff(props.retrieved_on - props.created_utc, true)}]</p>`
}
} else {
innerHTML[editedModes.orig] = parse(props.body)
if (hasOwnProperty.call(props, 'edited_body')) {
innerHTML[editedModes.orig] = parse(props.body)
innerHTML[editedModes.edited] = parse(props.edited_body)
innerHTML[editedModes.rich] = Diff.execute(innerHTML[editedModes.orig], innerHTML[editedModes.edited])
}
innerHTML[editedModes.dfault] = Diff.execute(innerHTML[editedModes.orig], innerHTML[editedModes.edited])
} else
innerHTML[editedModes.dfault] = parse(props.body)
}
const [collapsed, setCollapsed] = useState(false)
const [editedMode, setEditedMode] = useState(innerHTML[editedModes.rich] ? editedModes.rich : editedModes.orig)
const [editedMode, setEditedMode] = useState(editedModes.dfault)
const permalink = `/r/${props.subreddit}/comments/${props.link_id}/_/${props.id}/`
const parentlink = props.parent_id == props.link_id ? undefined : (
props.depth == 0 ?

View file

@ -118,13 +118,13 @@ export const showRemovedAndDeleted = comment => comment.removed === true || comm
// Edited text display modes
export const editedModes = {
orig: 0,
edited: 1,
rich: 2,
dfault: 0, // diff mode if it's been edited, otherwise same as orig
orig: 1,
edited: 2,
length: 3
}
export const editedTitles = [
'Edits are highlighted; click to change',
'The first archived edit is shown; click to change',
'The most recent edit is shown; click to change',
'Edits are highlighted; click to change'
'The most recent edit is shown; click to change'
]