@@ -5,6 +5,7 @@ import {initEasyMDEImagePaste, initTextareaImagePaste} from './ImagePaste.js';
55import $ from 'jquery' ;
66import { initMarkupContent } from '../../markup/content.js' ;
77import { handleGlobalEnterQuickSubmit } from './QuickSubmit.js' ;
8+ import { attachRefIssueContextPopup } from '../contextpopup.js' ;
89
910let elementIdCounter = 0 ;
1011
@@ -61,31 +62,46 @@ class ComboMarkdownEditor {
6162 initTextareaImagePaste ( this . textarea , this . dropzone ) ;
6263 }
6364
64- this . setupPreview ( ) ;
65+ this . setupTab ( ) ;
6566 this . prepareEasyMDEToolbarActions ( ) ;
6667 }
6768
68- setupPreview ( ) {
69- const $tabMenu = $ ( this . container ) . find ( '.tabular.menu' ) ;
69+ setupTab ( ) {
70+ const $container = $ ( this . container ) ;
71+ const $tabMenu = $container . find ( '.tabular.menu' ) ;
7072 const $tabs = $tabMenu . find ( '> .item' ) ;
71- const $tabPreview = $tabs . filter ( `.item[data-tab="markdown-previewer"]` ) ;
73+
74+ // Fomantic Tab requires the "data-tab" to be globally unique.
75+ // So here it uses our defined "data-tab-for" and "data-tab-panel" to generate the "data-tab" attribute for Fomantic.
76+ const $tabEditor = $tabs . filter ( `.item[data-tab-for="markdown-writer"]` ) ;
77+ const $tabPreviewer = $tabs . filter ( `.item[data-tab-for="markdown-previewer"]` ) ;
78+ $tabEditor . attr ( 'data-tab' , `markdown-writer-${ elementIdCounter } ` ) ;
79+ $tabPreviewer . attr ( 'data-tab' , `markdown-previewer-${ elementIdCounter } ` ) ;
80+ const $panelEditor = $container . find ( '.ui.tab[data-tab-panel="markdown-writer"]' ) ;
81+ const $panelPreviewer = $container . find ( '.ui.tab[data-tab-panel="markdown-previewer"]' ) ;
82+ $panelEditor . attr ( 'data-tab' , `markdown-writer-${ elementIdCounter } ` ) ;
83+ $panelPreviewer . attr ( 'data-tab' , `markdown-previewer-${ elementIdCounter } ` ) ;
84+ elementIdCounter ++ ;
85+
7286 $tabs . tab ( ) ;
7387
74- this . previewUrl = $tabPreview . attr ( 'data-preview-url' ) ;
75- this . previewContext = $tabPreview . attr ( 'data-preview-context' ) ;
88+ this . previewUrl = $tabPreviewer . attr ( 'data-preview-url' ) ;
89+ this . previewContext = $tabPreviewer . attr ( 'data-preview-context' ) ;
7690 this . previewMode = this . options . previewMode ?? 'comment' ;
7791 this . previewWiki = this . options . previewWiki ?? false ;
78- $tabPreview . on ( 'click' , ( ) => {
92+ $tabPreviewer . on ( 'click' , ( ) => {
7993 $ . post ( this . previewUrl , {
8094 _csrf : window . config . csrfToken ,
8195 mode : this . previewMode ,
8296 context : this . previewContext ,
8397 text : this . value ( ) ,
8498 wiki : this . previewWiki ,
8599 } , ( data ) => {
86- const previewPanel = this . container . querySelector ( `.tab[data-tab="markdown-previewer"]` ) ;
87- previewPanel . innerHTML = data ;
100+ $panelPreviewer . html ( data ) ;
88101 initMarkupContent ( ) ;
102+
103+ const refIssues = $panelPreviewer . find ( 'p .ref-issue' ) ;
104+ attachRefIssueContextPopup ( refIssues ) ;
89105 } ) ;
90106 } ) ;
91107 }
0 commit comments