自动将粘贴的图片上传至MT图床并插入Markdown链接
// ==UserScript==
// @name NodeSeek自动上传图片到MT图床并插入md链接
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 自动将粘贴的图片上传至MT图床并插入Markdown链接
// @author kingis和GPT
// @match https://www.nodeseek.com/*
// @license MIT
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
document.addEventListener('paste', function(event) {
handlePaste(event);
});
function handlePaste(event) {
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
var imageFiles = [];
for (var i = 0; i < items.length; i++) {
if (items[i].kind === 'file' && items[i].type.indexOf('image/') !== -1) {
var blob = items[i].getAsFile();
imageFiles.push(blob);
}
}
if (imageFiles.length > 0) {
event.preventDefault();
for (var j = 0; j < imageFiles.length; j++) {
var formData = new FormData();
formData.append('media[]', imageFiles[j]); // 注意这里,mt图床需要使用数组形式
uploadToImageHost(formData);
}
}
}
function uploadToImageHost(formData) {
GM_xmlhttpRequest({
method: 'POST',
url: 'https://img.0du.top/upload_mtkf.php',
data: formData,
onload: function(response) {
var jsonResponse = JSON.parse(response.responseText);
if (response.status === 200 && jsonResponse && jsonResponse.urls && jsonResponse.urls.length > 0) {
insertToEditor('');
} else {
showErrorPopup('图片上传成功,但未获取到Markdown链接');
}
},
onerror: function(response) {
showErrorPopup('图片上传遇到错误,请检查网络或稍后重试。');
}
});
}
function insertToEditor(markdownLink) {
var codeMirrorElement = document.querySelector('.CodeMirror');
if (codeMirrorElement) {
var codeMirrorInstance = codeMirrorElement.CodeMirror;
if (codeMirrorInstance) {
var cursor = codeMirrorInstance.getCursor();
codeMirrorInstance.replaceRange(markdownLink + '\n', cursor);
}
}
}
function showErrorPopup(errorMessage) {
var popup = document.createElement('div');
popup.style.position = 'fixed';
popup.style.right = '20px';
popup.style.bottom = '20px';
popup.style.backgroundColor = 'red';
popup.style.color = 'white';
popup.style.padding = '10px';
popup.style.borderRadius = '5px';
popup.style.zIndex = '10000';
popup.textContent = errorMessage;
var closeButton = document.createElement('button');
closeButton.textContent = 'X';
closeButton.style.marginLeft = '10px';
closeButton.style.color = 'white';
closeButton.style.backgroundColor = 'transparent';
closeButton.style.border = 'none';
closeButton.onclick = function() {
popup.remove();
};
popup.appendChild(closeButton);
document.body.appendChild(popup);
setTimeout(function() {
if (popup) {
popup.remove();
}
}, 5000);
}
})();