Greasy Fork

Greasy Fork is available in English.

Hostloc自动上传到屋舍图床并插入BB链接

在hostloc.com的论坛中自动上传图片到图床并插入BB链接

目前为 2024-02-19 提交的版本。查看 最新版本

// ==UserScript==
// @name         Hostloc自动上传到屋舍图床并插入BB链接
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  在hostloc.com的论坛中自动上传图片到图床并插入BB链接
// @author       WiseScripts
// @match        *://*.hostloc.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==
(function() {
  'use strict';
  document.addEventListener('paste', (event) => handlePaste(event));
  async function handlePaste(event) {
    const items = (event.clipboardData || event.originalEvent.clipboardData).items;
    let imageFiles = [];
    for (let item of items) {
      if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
        let blob = item.getAsFile();
        imageFiles.push(blob);
      }
    }
    if (imageFiles.length > 0) {
      event.preventDefault();
      for (let file of imageFiles) {
        let formData = new FormData();
        formData.append('file', file);
        await uploadToImageHost(formData);
      }
    }
  }

  function uploadToImageHost(formData) {
    return new Promise((resolve, reject) => {
      GM_xmlhttpRequest({
        method: 'POST',
        url: 'https://uhsea.com/Frontend/upload',
        data: formData,
        onload: (response) => {
          let jsonResponse = JSON.parse(response.responseText);
          if (response.status === 200 && jsonResponse && jsonResponse.data) {
            insertToEditor(jsonResponse.data);
          } else {
            showErrorPopup('图片上传成功,但未获取到图片链接');
          }
          resolve();
        },
        onerror: (error) => {
          showErrorPopup('图片上传遇到错误,请检查网络或稍后重试。');
          reject(error);
        }
      });
    });
  }

  function insertToEditor(Link) {
    let e = document.querySelector("#e_textarea")
    if (!e) {
      e = document.querySelector("#fastpostmessage")
    }
    if (e) {
      let bbLink = '[img]' + Link + '[/img]';
      e.setRangeText('\n' + bbLink + '\n');
    }

  }

  function showErrorPopup(errorMessage) {
    const 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;
    const 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 = () => popup.remove();
    popup.appendChild(closeButton);
    document.body.appendChild(popup);
    setTimeout(() => {
      if (popup) {
        popup.remove();
      }
    }, 5000);
  }
})();