@ -1,50 +1,51 @@
import $ from 'jquery' ;
import { initMarkupContent } from '../markup/content.js' ;
import { initMarkupContent } from '../markup/content.js' ;
import { validateTextareaNonEmpty , initComboMarkdownEditor } from './comp/ComboMarkdownEditor.js' ;
import { validateTextareaNonEmpty , initComboMarkdownEditor } from './comp/ComboMarkdownEditor.js' ;
import { fomanticMobileScreen } from '../modules/fomantic.js' ;
import { fomanticMobileScreen } from '../modules/fomantic.js' ;
import { POST } from '../modules/fetch.js' ;
const { csrfToken } = window . config ;
async function initRepoWikiFormEditor ( ) {
async function initRepoWikiFormEditor ( ) {
const $editArea = $ ( '.repository.wiki .combo-markdown-editor textarea' ) ;
const editArea = document . querySelector ( '.repository.wiki .combo-markdown-editor textarea' ) ;
if ( ! $ editArea. length ) return ;
if ( ! editArea) return ;
const $form = $ ( '.repository.wiki.new .ui.form' ) ;
const form = document . querySelector ( '.repository.wiki.new .ui.form' ) ;
const $editorContainer = $form . find ( '.combo-markdown-editor' ) ;
const editorContainer = form . querySelector ( '.combo-markdown-editor' ) ;
let editor ;
let editor ;
let renderRequesting = false ;
let renderRequesting = false ;
let lastContent ;
let lastContent ;
const renderEasyMDEPreview = function ( ) {
const renderEasyMDEPreview = async function ( ) {
if ( renderRequesting ) return ;
if ( renderRequesting ) return ;
const $previewFull = $editorContainer . find ( '.EasyMDEContainer .editor-preview-active' ) ;
const previewFull = editorContainer . querySelector ( '.EasyMDEContainer .editor-preview-active' ) ;
const $previewSide = $editorContainer . find ( '.EasyMDEContainer .editor-preview-active-side' ) ;
const previewSide = editorContainer . querySelector ( '.EasyMDEContainer .editor-preview-active-side' ) ;
const $previewTarget = $previewSide . length ? $previewSide : $ previewFull;
const previewTarget = previewSide || previewFull;
const newContent = $editArea. val ( ) ;
const newContent = editArea. value ;
if ( editor && $ previewTarget. length && lastContent !== newContent ) {
if ( editor && previewTarget && lastContent !== newContent ) {
renderRequesting = true ;
renderRequesting = true ;
$ . post ( editor . previewUrl , {
const formData = new FormData ( ) ;
_csrf : csrfToken ,
formData . append ( 'mode' , editor . previewMode ) ;
mode : editor . previewMode ,
formData . append ( 'context' , editor . previewContext ) ;
context : editor . previewContext ,
formData . append ( 'text' , newContent ) ;
text : newContent ,
formData . append ( 'wiki' , editor . previewWiki ) ;
wiki : editor . previewWiki ,
try {
} ) . done ( ( data ) => {
const response = await POST ( editor . previewUrl , { data : formData } ) ;
const data = await response . text ( ) ;
lastContent = newContent ;
lastContent = newContent ;
$previewTarget. html ( ` <div class="markup ui segment"> ${ data } </div> ` ) ;
previewTarget. innerHTML = ` <div class="markup ui segment"> ${ data } </div> ` ;
initMarkupContent ( ) ;
initMarkupContent ( ) ;
} ) . always ( ( ) => {
} catch ( error ) {
console . error ( 'Error rendering preview:' , error ) ;
} finally {
renderRequesting = false ;
renderRequesting = false ;
setTimeout ( renderEasyMDEPreview , 1000 ) ;
setTimeout ( renderEasyMDEPreview , 1000 ) ;
} ) ;
}
} else {
} else {
setTimeout ( renderEasyMDEPreview , 1000 ) ;
setTimeout ( renderEasyMDEPreview , 1000 ) ;
}
}
} ;
} ;
renderEasyMDEPreview ( ) ;
renderEasyMDEPreview ( ) ;
editor = await initComboMarkdownEditor ( $ editorContainer, {
editor = await initComboMarkdownEditor ( editorContainer, {
useScene : 'wiki' ,
useScene : 'wiki' ,
// EasyMDE has some problems of height definition, it has inline style height 300px by default, so we also use inline styles to override it.
// EasyMDE has some problems of height definition, it has inline style height 300px by default, so we also use inline styles to override it.
// And another benefit is that we only need to write the style once for both editors.
// And another benefit is that we only need to write the style once for both editors.
@ -64,9 +65,10 @@ async function initRepoWikiFormEditor() {
} ,
} ,
} ) ;
} ) ;
$form . on ( 'submit' , ( ) => {
form . addEventListener ( 'submit' , ( e ) => {
if ( ! validateTextareaNonEmpty ( $editArea ) ) {
if ( ! validateTextareaNonEmpty ( editArea ) ) {
return false ;
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
}
}
} ) ;
} ) ;
}
}