Greasy Fork is available in English.
给你的在线文档添加一个智能伙伴
// ==UserScript==
// @name feifei clippy 文档小帮手
// @namespace http://tampermonkey.net/
// @version 2024-04-01 2
// @description 给你的在线文档添加一个智能伙伴
// @author haru
// @match https://bytedance.larkoffice.com/*
// @match https://*/docx/*
// @match https://*.feishu.cn/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=larkoffice.com
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 创建 draggable div
var draggable = document.createElement('div');
draggable.style.width = '170px';
draggable.style.height = '320px';
draggable.style.position = 'fixed';
draggable.style.right = '10%';
draggable.style.bottom = '10%';
draggable.style.userSelect = 'none';
// 创建 iframe
var iframe = document.createElement('iframe');
iframe.src = 'https://antonoko.github.io/feishu-clippy';
iframe.style.width = '100%';
iframe.style.height = '100%';
iframe.style.position = 'absolute';
iframe.style.border = 'none';
// 创建用于拖动的handle
var handle = document.createElement('div');
handle.style.width = '100%';
handle.style.height = '30%';
handle.style.position = 'absolute';
handle.style.cursor = 'move';
handle.style.bottom = '0';
draggable.appendChild(iframe);
draggable.appendChild(handle);
document.body.appendChild(draggable);
let dragging = false;
handle.addEventListener('mousedown', function(e) {
var coords = getCoords(draggable);
var shiftX = e.pageX - coords.left;
var shiftY = e.pageY - coords.top;
draggable.style.position = 'absolute';
moveAt(e);
draggable.style.zIndex = 1000; // over other elements
function moveAt(e) {
var newLeft = e.pageX - shiftX,
newTop = e.pageY - shiftY,
draggableWidth = draggable.offsetWidth,
draggableHeight = draggable.offsetHeight;
// Prevent the draggable div from moving outside the document's top boundary
if (newTop < 0) newTop = 0;
// Prevent the draggable div from moving outside the document's left boundary
if (newLeft < 0) newLeft = 0;
// Prevent the draggable div from moving outside the document's bottom boundary
if (newTop + draggableHeight > window.innerHeight) {
newTop = window.innerHeight - draggableHeight;
}
// Prevent the draggable div from moving outside the document's right boundary
if (newLeft + draggableWidth > document.body.clientWidth) {
newLeft = document.body.clientWidth - draggableWidth;
}
draggable.style.left = newLeft + 'px';
draggable.style.top = newTop + 'px';
}
document.addEventListener('mousemove', onMouseMove);
function onMouseMove(e) {
moveAt(e);
}
function clearMouseMove() {
document.removeEventListener('mousemove', onMouseMove);
draggable.onmouseup = null;
document.removeEventListener('mouseup', clearMouseMove);
};
document.addEventListener('mouseup', clearMouseMove);
});
function getCoords(elem) { // crossbrowser version
var box = elem.getBoundingClientRect();
return {
top: box.top + pageYOffset,
left: box.left + pageXOffset
};
}
})();