11import  '@github/markdown-toolbar-element' ; 
22import  '@github/text-expander-element' ; 
33import  { attachTribute }  from  '../tribute.ts' ; 
4- import  { hideElem ,  showElem ,  autosize ,  isElemVisible }  from  '../../utils/dom.ts' ; 
4+ import  { hideElem ,  showElem ,  autosize ,  isElemVisible ,   generateElemId }  from  '../../utils/dom.ts' ; 
55import  { 
66  EventUploadStateChanged , 
77  initEasyMDEPaste , 
@@ -25,8 +25,6 @@ import {createTippy} from '../../modules/tippy.ts';
2525import  { fomanticQuery }  from  '../../modules/fomantic/base.ts' ; 
2626import  type  EasyMDE  from  'easymde' ; 
2727
28- let  elementIdCounter  =  0 ; 
29- 
3028/** 
3129 * validate if the given textarea is non-empty. 
3230 * @param  {HTMLTextAreaElement } textarea - The textarea element to be validated. 
@@ -125,7 +123,7 @@ export class ComboMarkdownEditor {
125123  setupTextarea ( )  { 
126124    this . textarea  =  this . container . querySelector ( '.markdown-text-editor' ) ; 
127125    this . textarea . _giteaComboMarkdownEditor  =  this ; 
128-     this . textarea . id  =  `_combo_markdown_editor_${ String ( elementIdCounter ++ ) } `  ; 
126+     this . textarea . id  =  generateElemId ( `_combo_markdown_editor_`  ) ; 
129127    this . textarea . addEventListener ( 'input' ,  ( )  =>  triggerEditorContentChanged ( this . container ) ) ; 
130128    this . applyEditorHeights ( this . textarea ,  this . options . editorHeights ) ; 
131129
@@ -213,16 +211,16 @@ export class ComboMarkdownEditor {
213211
214212    // Fomantic Tab requires the "data-tab" to be globally unique. 
215213    // So here it uses our defined "data-tab-for" and "data-tab-panel" to generate the "data-tab" attribute for Fomantic. 
214+     const  tabIdSuffix  =  generateElemId ( ) ; 
216215    this . tabEditor  =  Array . from ( tabs ) . find ( ( tab )  =>  tab . getAttribute ( 'data-tab-for' )  ===  'markdown-writer' ) ; 
217216    this . tabPreviewer  =  Array . from ( tabs ) . find ( ( tab )  =>  tab . getAttribute ( 'data-tab-for' )  ===  'markdown-previewer' ) ; 
218-     this . tabEditor . setAttribute ( 'data-tab' ,  `markdown-writer-${ elementIdCounter }  ) ; 
219-     this . tabPreviewer . setAttribute ( 'data-tab' ,  `markdown-previewer-${ elementIdCounter }  ) ; 
217+     this . tabEditor . setAttribute ( 'data-tab' ,  `markdown-writer-${ tabIdSuffix }  ) ; 
218+     this . tabPreviewer . setAttribute ( 'data-tab' ,  `markdown-previewer-${ tabIdSuffix }  ) ; 
220219
221220    const  panelEditor  =  this . container . querySelector ( '.ui.tab[data-tab-panel="markdown-writer"]' ) ; 
222221    const  panelPreviewer  =  this . container . querySelector ( '.ui.tab[data-tab-panel="markdown-previewer"]' ) ; 
223-     panelEditor . setAttribute ( 'data-tab' ,  `markdown-writer-${ elementIdCounter }  ) ; 
224-     panelPreviewer . setAttribute ( 'data-tab' ,  `markdown-previewer-${ elementIdCounter }  ) ; 
225-     elementIdCounter ++ ; 
222+     panelEditor . setAttribute ( 'data-tab' ,  `markdown-writer-${ tabIdSuffix }  ) ; 
223+     panelPreviewer . setAttribute ( 'data-tab' ,  `markdown-previewer-${ tabIdSuffix }  ) ; 
226224
227225    this . tabEditor . addEventListener ( 'click' ,  ( )  =>  { 
228226      requestAnimationFrame ( ( )  =>  { 
0 commit comments