Implement pasting image from clipboard for browsers that supports that (#5317)
This commit is contained in:
		
							parent
							
								
									e110943562
								
							
						
					
					
						commit
						7278372388
					
				
					 1 changed files with 82 additions and 0 deletions
				
			
		|  | @ -171,6 +171,87 @@ function initReactionSelector(parent) { | |||
|     }); | ||||
| } | ||||
| 
 | ||||
| function insertAtCursor(field, value) { | ||||
|     if (field.selectionStart || field.selectionStart === 0) { | ||||
|         var startPos = field.selectionStart; | ||||
|         var endPos = field.selectionEnd; | ||||
|         field.value = field.value.substring(0, startPos) | ||||
|             + value | ||||
|             + field.value.substring(endPos, field.value.length); | ||||
|         field.selectionStart = startPos + value.length; | ||||
|         field.selectionEnd = startPos + value.length; | ||||
|     } else { | ||||
|         field.value += value; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function replaceAndKeepCursor(field, oldval, newval) { | ||||
|     if (field.selectionStart || field.selectionStart === 0) { | ||||
|         var startPos = field.selectionStart; | ||||
|         var endPos = field.selectionEnd; | ||||
|         field.value = field.value.replace(oldval, newval); | ||||
|         field.selectionStart = startPos + newval.length - oldval.length; | ||||
|         field.selectionEnd = endPos + newval.length - oldval.length; | ||||
|     } else { | ||||
|         field.value = field.value.replace(oldval, newval); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function retrieveImageFromClipboardAsBlob(pasteEvent, callback){ | ||||
|     if (!pasteEvent.clipboardData) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     var items = pasteEvent.clipboardData.items; | ||||
|     if (typeof(items) === "undefined") { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     for (var i = 0; i < items.length; i++) { | ||||
|         if (items[i].type.indexOf("image") === -1) continue; | ||||
|         var blob = items[i].getAsFile(); | ||||
| 
 | ||||
|         if (typeof(callback) === "function") { | ||||
|             pasteEvent.preventDefault(); | ||||
|             pasteEvent.stopPropagation(); | ||||
|             callback(blob); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function uploadFile(file, callback) { | ||||
|     var xhr = new XMLHttpRequest(); | ||||
| 
 | ||||
|     xhr.onload = function() { | ||||
|         if (xhr.status == 200) { | ||||
|             callback(xhr.responseText); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     xhr.open("post", suburl + "/attachments", true); | ||||
|     xhr.setRequestHeader("X-Csrf-Token", csrf); | ||||
|     var formData = new FormData(); | ||||
|     formData.append('file', file, file.name); | ||||
|     xhr.send(formData); | ||||
| } | ||||
| 
 | ||||
| function initImagePaste(target) { | ||||
|     target.each(function(i, field) { | ||||
|         field.addEventListener('paste', function(event){ | ||||
|             retrieveImageFromClipboardAsBlob(event, function(img) { | ||||
|                 var name = img.name.substr(0, img.name.lastIndexOf('.')); | ||||
|                 insertAtCursor(field, '![' + name + ']()'); | ||||
|                 uploadFile(img, function(res) { | ||||
|                     var data = JSON.parse(res); | ||||
|                     replaceAndKeepCursor(field, '![' + name + ']()', ''); | ||||
|                     var input = $('<input id="' + data.uuid + '" name="files" type="hidden">').val(data.uuid); | ||||
|                     $('.files').append(input); | ||||
|                 }); | ||||
|             }); | ||||
|         }, false); | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| function initCommentForm() { | ||||
|     if ($('.comment.form').length == 0) { | ||||
|         return | ||||
|  | @ -178,6 +259,7 @@ function initCommentForm() { | |||
| 
 | ||||
|     initBranchSelector(); | ||||
|     initCommentPreviewTab($('.comment.form')); | ||||
|     initImagePaste($('.comment.form textarea')); | ||||
| 
 | ||||
|     // Listsubmit
 | ||||
|     function initListSubmits(selector, outerSelector) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue