diff options
author | erbunao <earle.bunao@gmail.com> | 2014-06-04 23:56:02 +0800 |
---|---|---|
committer | erbunao <earle.bunao@gmail.com> | 2014-06-05 21:26:00 +0800 |
commit | 23626780c4636b6c6f46b259a827ceb9c289c101 (patch) | |
tree | d184aae8594ad96a537b320e1927e3dfc7f78ecc | |
parent | 7e41eca38ae4598e083372777c20ff6aa2b491ad (diff) | |
download | gitlab-ce-23626780c4636b6c6f46b259a827ceb9c289c101.tar.gz |
Fix for copy paste formatted text
-rw-r--r-- | app/assets/javascripts/markdown_area.js.coffee | 102 |
1 files changed, 101 insertions, 1 deletions
diff --git a/app/assets/javascripts/markdown_area.js.coffee b/app/assets/javascripts/markdown_area.js.coffee index def5d12a820..e71fd1fbf3b 100644 --- a/app/assets/javascripts/markdown_area.js.coffee +++ b/app/assets/javascripts/markdown_area.js.coffee @@ -21,7 +21,6 @@ $(document).ready -> $(".div-dropzone").append divSpinner $(".div-dropzone-spinner").append iconSpinner - dropzone = $(".div-dropzone").dropzone( url: project_image_path_upload dictDefaultMessage: "" @@ -77,6 +76,107 @@ $(document).ready -> return ) + child = $(dropzone[0]).children("textarea") + + formatLink = (str) -> + "![" + str.alt + "](" + str.url + ")" + + handlePaste = (e) -> + e.preventDefault() + my_event = e.originalEvent + + if my_event.clipboardData and my_event.clipboardData.items + processItem(my_event) + + processItem = (e) -> + image = isImage(e) + if image + filename = getFilename(e) or "image.png" + text = "{{" + filename + "}}" + pasteText(text) + uploadFile image.getAsFile(), filename + + else + text = e.clipboardData.getData("text/plain") + pasteText(text) + + isImage = (data) -> + i = 0 + while i < data.clipboardData.items.length + item = data.clipboardData.items[i] + if item.type.indexOf("image") isnt -1 + return item + i++ + return false + + pasteText = (text) -> + caretStart = $(child)[0].selectionStart + caretEnd = $(child)[0].selectionEnd + textEnd = $(child).val().length + + beforeSelection = $(child).val().substring 0, caretStart + afterSelection = $(child).val().substring caretEnd, textEnd + $(child).val beforeSelection + text + afterSelection + $(".markdown-area").trigger "input" + + getFilename = (e) -> + if window.clipboardData and window.clipboardData.getData + value = window.clipboardData.getData("Text") + else if e.clipboardData and e.clipboardData.getData + value = e.clipboardData.getData("text/plain") + + value = value.split("\r") + value.first() + + uploadFile = (item, filename) -> + formData = new FormData() + formData.append "markdown_img", item, filename + $.ajax + url: project_image_path_upload + type: "POST" + data: formData + dataType: "json" + processData: false + contentType: false + headers: + "X-CSRF-Token": $("meta[name=\"csrf-token\"]").attr("content") + + beforeSend: -> + showSpinner() + closeAlertMessage() + + success: (e, textStatus, response) -> + insertToTextArea(filename, formatLink(response.responseJSON.link)) + + error: (response) -> + showError(response.responseJSON.message) + + complete: -> + closeSpinner() + + insertToTextArea = (filename, url) -> + $(child).val (index, val) -> + val.replace("{{" + filename + "}}", url + "\n") + + appendToTextArea = (url) -> + $(child).val (index, val) -> + val + url + "\n" + + showSpinner = (e) -> + $(".div-dropzone-spinner").css "opacity", 0.7 + + closeSpinner = -> + $(".div-dropzone-spinner").css "opacity", 0 + + showError = (message) -> + checkIfMsgExists = $(".error-alert").children().length + if checkIfMsgExists is 0 + $(".error-alert").append divAlert + $(".div-dropzone-alert").append btnAlert + message + + closeAlertMessage = -> + $(".div-dropzone-alert").alert "close" + $(".markdown-selector").click (e) -> e.preventDefault() $(".div-dropzone").click() |