@@ -14,6 +14,7 @@ let csrf;
14
14
let suburl ;
15
15
let previewFileModes ;
16
16
let simpleMDEditor ;
17
+ const commentMDEditors = { } ;
17
18
let codeMirrorEditor ;
18
19
19
20
// Disable Dropzone auto-discover because it's manually initialized
@@ -304,11 +305,27 @@ function initImagePaste(target) {
304
305
} ) ;
305
306
}
306
307
308
+ function initSimpleMDEImagePaste ( simplemde , files ) {
309
+ simplemde . codemirror . on ( 'paste' , ( _ , event ) => {
310
+ retrieveImageFromClipboardAsBlob ( event , ( img ) => {
311
+ const name = img . name . substr ( 0 , img . name . lastIndexOf ( '.' ) ) ;
312
+ uploadFile ( img , ( res ) => {
313
+ const data = JSON . parse ( res ) ;
314
+ const pos = simplemde . codemirror . getCursor ( ) ;
315
+ simplemde . codemirror . replaceRange ( `` , pos ) ;
316
+ const input = $ ( `<input id="${ data . uuid } " name="files" type="hidden">` ) . val ( data . uuid ) ;
317
+ files . append ( input ) ;
318
+ } ) ;
319
+ } ) ;
320
+ } ) ;
321
+ }
322
+
307
323
function initCommentForm ( ) {
308
324
if ( $ ( '.comment.form' ) . length === 0 ) {
309
325
return ;
310
326
}
311
327
328
+ setCommentSimpleMDE ( $ ( '.comment.form textarea' ) ) ;
312
329
initBranchSelector ( ) ;
313
330
initCommentPreviewTab ( $ ( '.comment.form' ) ) ;
314
331
initImagePaste ( $ ( '.comment.form textarea' ) ) ;
@@ -836,6 +853,7 @@ function initRepository() {
836
853
const $renderContent = $segment . find ( '.render-content' ) ;
837
854
const $rawContent = $segment . find ( '.raw-content' ) ;
838
855
let $textarea ;
856
+ let $simplemde ;
839
857
840
858
// Setup new form
841
859
if ( $editContentZone . html ( ) . length === 0 ) {
@@ -920,8 +938,10 @@ function initRepository() {
920
938
$tabMenu . find ( '.preview.item' ) . attr ( 'data-tab' , $editContentZone . data ( 'preview' ) ) ;
921
939
$editContentForm . find ( '.write.segment' ) . attr ( 'data-tab' , $editContentZone . data ( 'write' ) ) ;
922
940
$editContentForm . find ( '.preview.segment' ) . attr ( 'data-tab' , $editContentZone . data ( 'preview' ) ) ;
923
-
941
+ $simplemde = setCommentSimpleMDE ( $textarea ) ;
942
+ commentMDEditors [ $editContentZone . data ( 'write' ) ] = $simplemde ;
924
943
initCommentPreviewTab ( $editContentForm ) ;
944
+ initSimpleMDEImagePaste ( $simplemde , $files ) ;
925
945
926
946
$editContentZone . find ( '.cancel.button' ) . click ( ( ) => {
927
947
$renderContent . show ( ) ;
@@ -968,15 +988,18 @@ function initRepository() {
968
988
} ) ;
969
989
} else {
970
990
$textarea = $segment . find ( 'textarea' ) ;
991
+ $simplemde = commentMDEditors [ $editContentZone . data ( 'write' ) ] ;
971
992
}
972
993
973
994
// Show write/preview tab and copy raw content as needed
974
995
$editContentZone . show ( ) ;
975
996
$renderContent . hide ( ) ;
976
997
if ( $textarea . val ( ) . length === 0 ) {
977
998
$textarea . val ( $rawContent . text ( ) ) ;
999
+ $simplemde . value ( $rawContent . text ( ) ) ;
978
1000
}
979
1001
$textarea . focus ( ) ;
1002
+ $simplemde . codemirror . focus ( ) ;
980
1003
event . preventDefault ( ) ;
981
1004
} ) ;
982
1005
@@ -1442,6 +1465,40 @@ function setSimpleMDE($editArea) {
1442
1465
return true ;
1443
1466
}
1444
1467
1468
+ function setCommentSimpleMDE ( $editArea ) {
1469
+ const simplemde = new SimpleMDE ( {
1470
+ autoDownloadFontAwesome : false ,
1471
+ element : $editArea [ 0 ] ,
1472
+ forceSync : true ,
1473
+ renderingConfig : {
1474
+ singleLineBreaks : false
1475
+ } ,
1476
+ indentWithTabs : false ,
1477
+ tabSize : 4 ,
1478
+ spellChecker : false ,
1479
+ toolbar : [ 'bold' , 'italic' , 'strikethrough' , '|' ,
1480
+ 'heading-1' , 'heading-2' , 'heading-3' , 'heading-bigger' , 'heading-smaller' , '|' ,
1481
+ 'code' , 'quote' , '|' ,
1482
+ 'unordered-list' , 'ordered-list' , '|' ,
1483
+ 'link' , 'image' , 'table' , 'horizontal-rule' , '|' ,
1484
+ 'clean-block' ]
1485
+ } ) ;
1486
+ simplemde . codemirror . setOption ( 'extraKeys' , {
1487
+ Enter : ( ) => {
1488
+ if ( ! ( issuesTribute . isActive || emojiTribute . isActive ) ) {
1489
+ return CodeMirror . Pass ;
1490
+ }
1491
+ } ,
1492
+ Backspace : ( cm ) => {
1493
+ cm . getInputField ( ) . trigger ( 'input' ) ;
1494
+ cm . execCommand ( 'delCharBefore' ) ;
1495
+ }
1496
+ } ) ;
1497
+ issuesTribute . attach ( simplemde . codemirror . getInputField ( ) ) ;
1498
+ emojiTribute . attach ( simplemde . codemirror . getInputField ( ) ) ;
1499
+ return simplemde ;
1500
+ }
1501
+
1445
1502
function setCodeMirror ( $editArea ) {
1446
1503
if ( simpleMDEditor ) {
1447
1504
simpleMDEditor . toTextArea ( ) ;
0 commit comments