@@ -131,23 +131,35 @@ function getFileBasedOptions(filename, lineWrapExts) {
131
131
} ;
132
132
}
133
133
134
+ function togglePreviewDisplay ( previewable ) {
135
+ const previewTab = document . querySelector ( 'a[data-tab=preview]' ) ;
136
+ if ( ! previewTab ) {
137
+ return ;
138
+ }
139
+ if ( previewable ) {
140
+ const newUrl = ( previewTab . getAttribute ( 'data-url' ) || '' ) . replace ( / ( .* ) \/ .* / i, `$1/markup` ) ;
141
+ previewTab . setAttribute ( 'data-url' , newUrl ) ;
142
+ previewTab . style . display = '' ;
143
+ } else {
144
+ previewTab . style . display = 'none' ;
145
+ // If the "preview" tab was active, user changes the filename to a non-previewable one,
146
+ // then the "preview" tab becomes inactive (hidden), so the "write" tab should become active
147
+ if ( previewTab . classList . contains ( 'active' ) ) {
148
+ const writeTab = document . querySelector ( 'a[data-tab=write]' ) ;
149
+ writeTab . click ( ) ;
150
+ }
151
+ }
152
+ }
153
+
134
154
export async function createCodeEditor ( textarea , filenameInput ) {
135
155
const filename = basename ( filenameInput . value ) ;
136
- const previewLink = document . querySelector ( 'a[data-tab=preview]' ) ;
137
156
const previewableExts = ( textarea . getAttribute ( 'data-previewable-extensions' ) || '' ) . split ( ',' ) ;
157
+ const previewableExtsSet = new Set ( previewableExts ) ;
138
158
const lineWrapExts = ( textarea . getAttribute ( 'data-line-wrap-extensions' ) || '' ) . split ( ',' ) ;
139
- const previewable = previewableExts . includes ( extname ( filename ) ) ;
159
+ const previewable = previewableExtsSet . has ( extname ( filename ) ) ;
140
160
const editorConfig = getEditorconfig ( filenameInput ) ;
141
161
142
- if ( previewLink ) {
143
- if ( previewable ) {
144
- const newUrl = ( previewLink . getAttribute ( 'data-url' ) || '' ) . replace ( / ( .* ) \/ .* / i, `$1/markup` ) ;
145
- previewLink . setAttribute ( 'data-url' , newUrl ) ;
146
- previewLink . style . display = '' ;
147
- } else {
148
- previewLink . style . display = 'none' ;
149
- }
150
- }
162
+ togglePreviewDisplay ( previewable ) ;
151
163
152
164
const { monaco, editor} = await createMonaco ( textarea , filename , {
153
165
...baseOptions ,
@@ -157,8 +169,8 @@ export async function createCodeEditor(textarea, filenameInput) {
157
169
158
170
const debounceInputHandler = debounce ( 500 , ( ) => {
159
171
const filename = filenameInput . value ;
160
- const isMarkdown = markdownExtsSet . has ( extname ( filename ) ) ;
161
- togglePreviewDisplay ( isMarkdown , hasMarkdown ) ;
172
+ const previewable = previewableExtsSet . has ( extname ( filename ) ) ;
173
+ togglePreviewDisplay ( previewable ) ;
162
174
updateEditor ( monaco , editor , filename , lineWrapExts ) ;
163
175
} ) ;
164
176
0 commit comments