| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // https://github.com/yuezhongxin/paste-upload-image.js
- (function ($) {
- var isImage, isImageForDrop, getFilename, getMimeType;
- isImage = function (data) {
- var i, item;
- i = 0;
- while (i < data.clipboardData.items.length) {
- item = data.clipboardData.items[i];
- if (item.type.indexOf("image") !== -1) {
- return item;
- }
- i++;
- }
- return false;
- };
- isImageForDrop = function (data) {
- var i, item;
- i = 0;
- while (i < data.dataTransfer.files.length) {
- item = data.dataTransfer.files[i];
- if (item.type.indexOf("image") !== -1) {
- return item;
- }
- i++;
- }
- return false;
- };
- getFilename = function (e) {
- var value;
- if (window.clipboardData && window.clipboardData.getData) {
- value = window.clipboardData.getData("Text");
- } else if (e.clipboardData && e.clipboardData.getData) {
- value = e.clipboardData.getData("text/plain");
- }
- value = value.split("\r");
- return value[0];
- };
- getMimeType = function (file, filename) {
- var mimeType = file.type;
- var extendName = filename.substring(filename.lastIndexOf('.') + 1);
- if (mimeType != 'image/' + extendName) {
- return 'image/' + extendName;
- }
- return mimeType;
- };
- $.fn.pasteUploadImage = function (options) {
- options = $.extend({}, $.fn.pasteUploadImage.defaults, options, {fileType: 'image'});
- return this.each(function () {
- var that = $(this);
- that.on('paste', function (event) {
- var filename, image, pasteEvent;
- pasteEvent = event.originalEvent;
- if (pasteEvent.clipboardData && pasteEvent.clipboardData.items) {
- image = isImage(pasteEvent);
- if (image) {
- event.preventDefault();
- filename = getFilename(pasteEvent) || options.defaultImageName;
- return that.uploadFile(image.getAsFile(), filename, options);
- }
- }
- });
- that.on('drop', function (event) {
- var filename, image, pasteEvent;
- pasteEvent = event.originalEvent;
- if (pasteEvent.dataTransfer && pasteEvent.dataTransfer.files) {
- image = isImageForDrop(pasteEvent);
- if (image) {
- event.preventDefault();
- filename = pasteEvent.dataTransfer.files[0].name || options.defaultImageName;
- return that.uploadFile(image, filename, options);
- }
- }
- });
- });
- };
- $.fn.insertToTextArea = function (filename, url) {
- var options = $(this).data("pu-options") || $.fn.pasteUploadImage.defaults;
- return $(this).val(function (index, val) {
- return val.replace("{{" + filename + "(" + options.uploadingText + ")}}", (options.fileType == 'image' ? '!' : '') + "[" + (filename.match(/^[a-zA-Z0-9_\u4e00-\u9fa5\.\-]+$/) ? filename : url.substring(url.lastIndexOf('/') + 1)) + "](" + url + ")" + "\n");
- });
- };
- $.fn.removeLoadingText = function (filename) {
- var options = $(this).data("pu-options") || $.fn.pasteUploadImage.defaults;
- return $(this).val(function (index, val) {
- return val.replace("{{" + filename + "(" + options.uploadingText + ")}}", "\n");
- });
- };
- $.fn.uploadFile = function (file, filename, options) {
- var that = $(this);
- var options = $.extend(true, {}, $.fn.pasteUploadImage.defaults, options || {});
- that.data("pu-options", options);
- var text = "{{" + filename + "(" + options.uploadingText + ")}}";
- that.pasteText(text);
- var formData = new FormData();
- formData.append(options.fileName, file);
- if (options.appendMimetype) {
- formData.append("mimeType", getMimeType(file, filename));
- }
- var ajaxOptions = {
- url: '',
- data: formData,
- type: 'post',
- processData: false,
- contentType: false,
- dataType: 'json',
- success: function (data) {
- if (typeof options.success == 'function') {
- if (false === options.success.apply(that, [data, filename, file])) {
- return;
- }
- }
- if (data.success) {
- return that.insertToTextArea(filename, data.message, options);
- }
- return that.removeLoadingText(filename);
- },
- error: function (xOptions, textStatus) {
- if (typeof options.error == 'function') {
- if (false === options.error.apply(that, [{}, filename, file])) {
- return;
- }
- }
- that.removeLoadingText("");
- }
- };
- if (typeof options.ajaxOptions === 'object') {
- ajaxOptions = $.extend(true, ajaxOptions, options.ajaxOptions);
- } else {
- ajaxOptions.url = options.ajaxOptions;
- }
- $.ajax(ajaxOptions);
- };
- $.fn.pasteText = function (text) {
- var that = $(this);
- var afterSelection, beforeSelection, caretEnd, caretStart, textEnd;
- caretStart = that[0].selectionStart;
- caretEnd = that[0].selectionEnd;
- textEnd = that.val().length;
- beforeSelection = that.val().substring(0, caretStart);
- afterSelection = that.val().substring(caretEnd, textEnd);
- that.val(beforeSelection + text + afterSelection);
- that.get(0).setSelectionRange(caretStart + text.length, caretEnd + text.length);
- return that.trigger("input");
- };
- $.fn.pasteUploadImage.defaults = {
- success: null,
- error: null,
- ajaxOptions: '',
- fileName: 'imageFile',
- appendMimetype: true,
- defaultImageName: 'image.png',
- uploadingText: 'uploading...',
- };
- })(jQuery);
|