@@ -13,10 +13,10 @@ async function tryOnEditContent(e: DOMEvent<MouseEvent>) {
1313 if ( ! clickTarget ) return ;
1414
1515 e . preventDefault ( ) ;
16- const segment = clickTarget . closest ( '.comment-header' ) . nextElementSibling ;
17- const editContentZone = segment . querySelector ( '.edit-content-zone' ) ;
18- const renderContent = segment . querySelector ( '.render-content' ) ;
19- const rawContent = segment . querySelector ( '.raw-content' ) ;
16+ const commentContent = clickTarget . closest ( '.comment-header' ) . nextElementSibling ;
17+ const editContentZone = commentContent . querySelector ( '.edit-content-zone' ) ;
18+ let renderContent = commentContent . querySelector ( '.render-content' ) ;
19+ const rawContent = commentContent . querySelector ( '.raw-content' ) ;
2020
2121 let comboMarkdownEditor : ComboMarkdownEditor ;
2222
@@ -47,30 +47,32 @@ async function tryOnEditContent(e: DOMEvent<MouseEvent>) {
4747
4848 const response = await POST ( editContentZone . getAttribute ( 'data-update-url' ) , { data : params } ) ;
4949 const data = await response . json ( ) ;
50- if ( response . status === 400 ) {
51- showErrorToast ( data . errorMessage ) ;
50+ if ( ! response . ok ) {
51+ showErrorToast ( data ? .errorMessage ?? window . config . i18n . error_occurred ) ;
5252 return ;
5353 }
54+
5455 reinitializeAreYouSure ( editContentZone . querySelector ( 'form' ) ) ; // the form is no longer dirty
5556 editContentZone . setAttribute ( 'data-content-version' , data . contentVersion ) ;
56- if ( ! data . content ) {
57- renderContent . innerHTML = document . querySelector ( '#no-content' ) . innerHTML ;
58- rawContent . textContent = '' ;
59- } else {
60- renderContent . innerHTML = data . content ;
61- rawContent . textContent = comboMarkdownEditor . value ( ) ;
62- const refIssues = renderContent . querySelectorAll < HTMLElement > ( 'p .ref-issue' ) ;
63- attachRefIssueContextPopup ( refIssues ) ;
64- }
65- const content = segment ;
66- if ( ! content . querySelector ( '.dropzone-attachments' ) ) {
57+
58+ // replace the render content with new one, to trigger re-initialization of all features
59+ const newRenderContent = renderContent . cloneNode ( false ) as HTMLElement ;
60+ newRenderContent . innerHTML = data . content ;
61+ renderContent . replaceWith ( newRenderContent ) ;
62+ renderContent = newRenderContent ;
63+
64+ rawContent . textContent = comboMarkdownEditor . value ( ) ;
65+ const refIssues = renderContent . querySelectorAll < HTMLElement > ( 'p .ref-issue' ) ;
66+ attachRefIssueContextPopup ( refIssues ) ;
67+
68+ if ( ! commentContent . querySelector ( '.dropzone-attachments' ) ) {
6769 if ( data . attachments !== '' ) {
68- content . insertAdjacentHTML ( 'beforeend' , data . attachments ) ;
70+ commentContent . insertAdjacentHTML ( 'beforeend' , data . attachments ) ;
6971 }
7072 } else if ( data . attachments === '' ) {
71- content . querySelector ( '.dropzone-attachments' ) . remove ( ) ;
73+ commentContent . querySelector ( '.dropzone-attachments' ) . remove ( ) ;
7274 } else {
73- content . querySelector ( '.dropzone-attachments' ) . outerHTML = data . attachments ;
75+ commentContent . querySelector ( '.dropzone-attachments' ) . outerHTML = data . attachments ;
7476 }
7577 comboMarkdownEditor . dropzoneSubmitReload ( ) ;
7678 } catch ( error ) {
0 commit comments