|
|
@@ -14,6 +14,7 @@ let csrf; |
|
|
|
let suburl; |
|
|
|
let previewFileModes; |
|
|
|
let simpleMDEditor; |
|
|
|
const commentMDEditors = {}; |
|
|
|
let codeMirrorEditor; |
|
|
|
|
|
|
|
// Disable Dropzone auto-discover because it's manually initialized |
|
|
@@ -304,11 +305,27 @@ function initImagePaste(target) { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function initSimpleMDEImagePaste(simplemde, files) { |
|
|
|
simplemde.codemirror.on('paste', (_, event) => { |
|
|
|
retrieveImageFromClipboardAsBlob(event, (img) => { |
|
|
|
const name = img.name.substr(0, img.name.lastIndexOf('.')); |
|
|
|
uploadFile(img, (res) => { |
|
|
|
const data = JSON.parse(res); |
|
|
|
const pos = simplemde.codemirror.getCursor(); |
|
|
|
simplemde.codemirror.replaceRange(`![${name}](${suburl}/attachments/${data.uuid})`, pos); |
|
|
|
const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid); |
|
|
|
files.append(input); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function initCommentForm() { |
|
|
|
if ($('.comment.form').length === 0) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
setCommentSimpleMDE($('.comment.form textarea')); |
|
|
|
initBranchSelector(); |
|
|
|
initCommentPreviewTab($('.comment.form')); |
|
|
|
initImagePaste($('.comment.form textarea')); |
|
|
@@ -836,6 +853,7 @@ function initRepository() { |
|
|
|
const $renderContent = $segment.find('.render-content'); |
|
|
|
const $rawContent = $segment.find('.raw-content'); |
|
|
|
let $textarea; |
|
|
|
let $simplemde; |
|
|
|
|
|
|
|
// Setup new form |
|
|
|
if ($editContentZone.html().length === 0) { |
|
|
@@ -920,8 +938,10 @@ function initRepository() { |
|
|
|
$tabMenu.find('.preview.item').attr('data-tab', $editContentZone.data('preview')); |
|
|
|
$editContentForm.find('.write.segment').attr('data-tab', $editContentZone.data('write')); |
|
|
|
$editContentForm.find('.preview.segment').attr('data-tab', $editContentZone.data('preview')); |
|
|
|
|
|
|
|
$simplemde = setCommentSimpleMDE($textarea); |
|
|
|
commentMDEditors[$editContentZone.data('write')] = $simplemde; |
|
|
|
initCommentPreviewTab($editContentForm); |
|
|
|
initSimpleMDEImagePaste($simplemde, $files); |
|
|
|
|
|
|
|
$editContentZone.find('.cancel.button').click(() => { |
|
|
|
$renderContent.show(); |
|
|
@@ -968,6 +988,7 @@ function initRepository() { |
|
|
|
}); |
|
|
|
} else { |
|
|
|
$textarea = $segment.find('textarea'); |
|
|
|
$simplemde = commentMDEditors[$editContentZone.data('write')]; |
|
|
|
} |
|
|
|
|
|
|
|
// Show write/preview tab and copy raw content as needed |
|
|
@@ -975,8 +996,10 @@ function initRepository() { |
|
|
|
$renderContent.hide(); |
|
|
|
if ($textarea.val().length === 0) { |
|
|
|
$textarea.val($rawContent.text()); |
|
|
|
$simplemde.value($rawContent.text()); |
|
|
|
} |
|
|
|
$textarea.focus(); |
|
|
|
$simplemde.codemirror.focus(); |
|
|
|
event.preventDefault(); |
|
|
|
}); |
|
|
|
|
|
|
@@ -1442,6 +1465,40 @@ function setSimpleMDE($editArea) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
function setCommentSimpleMDE($editArea) { |
|
|
|
const simplemde = new SimpleMDE({ |
|
|
|
autoDownloadFontAwesome: false, |
|
|
|
element: $editArea[0], |
|
|
|
forceSync: true, |
|
|
|
renderingConfig: { |
|
|
|
singleLineBreaks: false |
|
|
|
}, |
|
|
|
indentWithTabs: false, |
|
|
|
tabSize: 4, |
|
|
|
spellChecker: false, |
|
|
|
toolbar: ['bold', 'italic', 'strikethrough', '|', |
|
|
|
'heading-1', 'heading-2', 'heading-3', 'heading-bigger', 'heading-smaller', '|', |
|
|
|
'code', 'quote', '|', |
|
|
|
'unordered-list', 'ordered-list', '|', |
|
|
|
'link', 'image', 'table', 'horizontal-rule', '|', |
|
|
|
'clean-block'] |
|
|
|
}); |
|
|
|
simplemde.codemirror.setOption('extraKeys', { |
|
|
|
Enter: () => { |
|
|
|
if (!(issuesTribute.isActive || emojiTribute.isActive)) { |
|
|
|
return CodeMirror.Pass; |
|
|
|
} |
|
|
|
}, |
|
|
|
Backspace: (cm) => { |
|
|
|
cm.getInputField().trigger('input'); |
|
|
|
cm.execCommand('delCharBefore'); |
|
|
|
} |
|
|
|
}); |
|
|
|
issuesTribute.attach(simplemde.codemirror.getInputField()); |
|
|
|
emojiTribute.attach(simplemde.codemirror.getInputField()); |
|
|
|
return simplemde; |
|
|
|
} |
|
|
|
|
|
|
|
function setCodeMirror($editArea) { |
|
|
|
if (simpleMDEditor) { |
|
|
|
simpleMDEditor.toTextArea(); |