您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Useful programmer tool
当前为
// ==UserScript== // @name Task // @namespace http://tampermonkey.net/ // @version 0.1 // @description Useful programmer tool // @author You // @match *://*/* // @icon https://i.ibb.co/pvv9522/Icon.png // @grant none // ==/UserScript== //(function() { // 'use strict'; function newElement(type, propertys, parent) { let id = null; let className = null; let type1 = null; if (type.indexOf("#") !== -1 && type.indexOf(".") !== -1) { if (type.indexOf("#") < type.indexOf(".")) { type1 = type.slice(0, type.indexOf("#")); id = type.slice(type.indexOf("#") + 1, type.indexOf(".")); className = type.slice(type.indexOf(".") + 1); } else { type1 = type.slice(0, type.indexOf(".")); className = type.slice(type.indexOf(".") + 1, type.indexOf("#")); id = type.slice(type.indexOf("#") + 1); } } else if (type.indexOf("#") !== -1 && type.indexOf(".") == -1) { type1 = type.slice(0, type.indexOf("#")); id = type.slice(type.indexOf("#") + 1); } else if (type.indexOf("#") == -1 && type.indexOf(".") !== -1) { type1 = type.slice(0, type.indexOf(".")); className = type.slice(type.indexOf(".") + 1); }; let result = null; if (type1 !== null) result = document.createElement(type1); else result = document.createElement(type); for (let name in propertys) { result[name] = propertys[name]; } if (id !== null) result.id = id; if (className !== null) result.className = className; parent.appendChild(result); return result; } function cpush(varName, value) { return value; } function newWindow(width, height, callback, appname, property) { function returnIf(condition, iftrue, iffalse) { if (condition) return iftrue; else return iffalse; } let tab = cpush('tab', document.createElement("div")); tab.style = "box-sizing: border-box; box-shadow: white 0 0 0 1px; position: absolute; width: 0px; height: 0px; min-height: fit-content;"; if (property.maxSize == undefined) { let randomX = Math.floor(Math.random() * (window.innerWidth - width)); let randomY = Math.floor(Math.random() * (window.innerHeight - (height + 35)) + 35); tab.style.left = randomX + "px"; tab.style.top = randomY + "px"; } else { width = window.innerWidth; height = window.innerHeight; }; if (property.transition == false) tab.style.width = width + "px"; if (height == "fit-content") tab.style.height = "fit-content"; if (width == "fit-content") tab.style.width = "fit-content"; document.body.appendChild(tab); let tabBar = document.createElement("div"); tabBar.style = "height: 35px; background-color: black; width: 100%; color: white; font-family: monospace; font-size: 19px; display: flex; justify-content: space-between; align-items: center; padding-left: 40px; box-sizing: border-box;"; tabBar.innerHTML = appname.constructor.name == "String" ? appname : appname[1]; tab.appendChild(tabBar); let tabBody = document.createElement("div"); tabBody.style = "overflow-y: auto; height: " + (returnIf((property.maxSize == undefined), height, window.innerHeight) - 35) + "px; background-color: rgba(20, 20, 20); width: 100%; padding: 16px; box-sizing: border-box;"; tab.appendChild(tabBody); let tabClose = document.createElement("div"); tabClose.style = "user-select: none; font-family: 'Source Code Pro', monospace; cursor: pointer; color: white; height: 35px; background-color: black; width: 50px; float: right; align-items: center; display: flex; justify-content: center;"; tabClose.innerText = "x"; tabClose.onclick = function () { document.body.removeChild(tab); } tabClose.onmouseover = function () { this.style.backgroundColor = "red"; } tabClose.onmouseout = function () { this.style.backgroundColor = "black"; } tabBar.appendChild(tabClose); let isDragging = false; let offsetX = 0; let offsetY = 0; tabBar.addEventListener("mousedown", function (event) { if (property.drag == undefined) { isDragging = true; offsetX = event.clientX - tab.offsetLeft; offsetY = event.clientY - tab.offsetTop; } }); let newPosX; let newPosY; let maxX; let maxY; document.addEventListener("mousemove", function (event) { if (isDragging) { event.preventDefault(); newPosX = event.clientX - offsetX; newPosY = event.clientY - offsetY; maxX = (window.innerWidth - tab.offsetWidth) + (width - 50); maxY = (window.innerHeight - tab.offsetHeight) + (height - 35); tab.style.left = newPosX + "px"; tab.style.top = newPosY + "px"; } }); document.addEventListener("mouseup", function (event) { isDragging = false; }); let duration = cpush('duration', 500); let startTime = cpush('startTime', null); let startWidth = cpush('startWidth', 0); let startHeight = cpush('startHeight', 0); function animate(timestamp) { if (!startTime) { startTime = timestamp; startWidth = 0; startHeight = 0; } let progress = timestamp - startTime; if (progress > duration) { progress = duration; } let ratio = progress / duration; let newWidth = startWidth + (returnIf((property.maxSize == undefined), width, window.innerWidth) - startWidth) * ratio; let newHeight = startHeight + (height - startHeight) * ratio; tab.style.width = newWidth + "px"; tab.style.height = newHeight + "px"; if (progress < duration) { window.requestAnimationFrame(animate); } } if (property.transition !== false) window.requestAnimationFrame(animate); callback(tab, tabBar, tabBody, tabClose); window.addEventListener("resize", () => { if (property.maxSize !== undefined) { tab.style.width = window.innerWidth + "px"; } }) } window.task = (callback, taskCount) => { newWindow(400, "fit-content", (tab, tabBar, tabBody, tabClose) => { tab.style.position = "absolute"; tab.style.zIndex = "100000"; tab.style.left = "10px"; tab.style.top = "10px"; let progress = 0; let count = 0; let progressInfos = newElement("p", { "style": "word-wrap: break-word; color: white; font-family: monospace; margin-top: 0px;" }, tabBody); var parent = document.createElement("div"); parent.style = "border: 1px solid white;"; tabBody.appendChild(parent); let progressBarDiv = newElement("div", { "style": "width: 100%; height: 25px; border: 1px white solid; box-sizing: border-box;" }, tabBody) let progressBar = newElement("div", { "style": `width: ${progress}%; height: 100%; background: linear-gradient(to right, #004800, rgb(0, 167, 0));` }, progressBarDiv) let lastTime = Date.now(); let delay = 1000; let minDelay = delay; let maxDelay = 0; let data = []; let graphic = document.createElement('canvas'); graphic.width = parent.offsetWidth; graphic.height = 80; let context = graphic.getContext('2d'); function refreshGraphic() { let columnHeight = data[data.length - 1] * 1.5; let columnWidth = (parent.offsetWidth / taskCount); context.fillStyle = "rgb(0, 167, 0)"; context.fillRect((data.length - 1) * columnWidth, graphic.height, columnWidth, 0 - columnHeight); } parent.appendChild(graphic); // ajout du graphique au parent let backup1 = tabClose.onclick; tabClose.onclick = () => { backup1(); count = taskCount - 1; }; let start = Date.now(); function getTime(ms) { let hours = Math.floor(ms / 3600000); let minutes = Math.floor((ms % 3600000) / 60000); let seconds = Math.floor(((ms % 3600000) % 60000) / 1000); let milliseconds = Math.floor(((ms % 3600000) % 60000) % 1000); let hourText = hours.toString().padStart(2, '0'); let minuteText = minutes.toString().padStart(2, '0'); let secondText = seconds.toString().padStart(2, '0'); let millisecondText = milliseconds.toString().padStart(3, '0'); return hourText + ':' + minuteText + ':' + secondText + ':' + millisecondText; } let timeLeftEstimed = 0; let loop = () => { setTimeout(() => { delay = Date.now() - lastTime; data.push(delay); refreshGraphic(); if (delay < minDelay) minDelay = delay; if (delay > maxDelay) maxDelay = delay; let info = ""; let send = (message) => { info = message; }; callback(); count++; progress = (count / taskCount) * 100; progressBar.style.width = `${progress}%`; timeLeftEstimed = 0; data.forEach(localDelay => { timeLeftEstimed += localDelay; }); timeLeftEstimed /= data.length; timeLeftEstimed *= (taskCount - count); progressInfos.innerHTML = `Tasks running in progress : ${Math.round(progress * 100) / 100}%<br>Delay : ${delay}ms.<br>Max delay : ${maxDelay}, min delay : ${minDelay}.<br>Time passed : ${getTime(Date.now() - start)}.<br><br>Time left estimed : ${getTime(timeLeftEstimed)}.<br><br>Tasks left : ${taskCount - count}.<br><br>${info}`; if (count == taskCount) { progressInfos.innerHTML = `Tasks completed !<br><br>` + progressInfos.innerHTML; } else { loop(); } lastTime = Date.now(); }, 20); }; loop(); }, "TASK", { "transition": false }) }; //})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址