您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a global notepad feature with Markdown support and settings GUI
- // ==UserScript==
- // @name Global Notepad
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Adds a global notepad feature with Markdown support and settings GUI
- // @match *://*/*
- // @grant GM_setValue
- // @grant GM_getValue
- // @run-at document-end
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Create a button to toggle the notepad
- const button = document.createElement('button');
- button.textContent = '📝'; // Notepad icon
- button.style.position = 'fixed';
- button.style.bottom = '20px';
- button.style.right = '20px';
- button.style.zIndex = '1000';
- button.style.fontSize = '24px';
- button.style.border = 'none';
- button.style.backgroundColor = '#007BFF';
- button.style.color = '#fff';
- button.style.borderRadius = '50%';
- button.style.width = '50px';
- button.style.height = '50px';
- button.style.cursor = 'pointer';
- document.body.appendChild(button);
- // Create the notepad container
- const notepad = document.createElement('div');
- notepad.style.position = 'fixed';
- notepad.style.bottom = '80px';
- notepad.style.right = '20px';
- notepad.style.width = '300px';
- notepad.style.height = '300px';
- notepad.style.border = '1px solid #000';
- notepad.style.backgroundColor = '#fff';
- notepad.style.padding = '10px';
- notepad.style.zIndex = '1000';
- notepad.style.display = 'none';
- notepad.style.overflow = 'auto';
- notepad.style.fontFamily = 'Arial';
- notepad.style.fontSize = '12pt';
- document.body.appendChild(notepad);
- // Create a textarea for the notes
- const textarea = document.createElement('textarea');
- textarea.style.width = '100%';
- textarea.style.height = '90%';
- notepad.appendChild(textarea);
- // Create settings button
- const settingsButton = document.createElement('button');
- settingsButton.textContent = '⚙️'; // Settings icon
- settingsButton.style.position = 'absolute';
- settingsButton.style.bottom = '10px';
- settingsButton.style.right = '10px'; // Position it near the textarea
- settingsButton.style.zIndex = '1001';
- settingsButton.style.border = 'none';
- settingsButton.style.backgroundColor = '#ccc';
- settingsButton.style.cursor = 'pointer';
- settingsButton.style.display = 'none'; // Initially hidden
- notepad.appendChild(settingsButton);
- // Create settings GUI
- const settingsMenu = document.createElement('div');
- settingsMenu.style.display = 'none';
- settingsMenu.style.border = '1px solid #ccc';
- settingsMenu.style.backgroundColor = '#f9f9f9';
- settingsMenu.style.padding = '10px';
- settingsMenu.style.position = 'absolute';
- settingsMenu.style.bottom = '60px'; // Position it above the button
- settingsMenu.style.right = '5px';
- notepad.appendChild(settingsMenu);
- const fontSizeInput = document.createElement('input');
- fontSizeInput.type = 'number';
- fontSizeInput.value = 12;
- fontSizeInput.style.marginBottom = '10px';
- fontSizeInput.placeholder = 'Font Size (pt)';
- settingsMenu.appendChild(fontSizeInput);
- const applyButton = document.createElement('button');
- applyButton.textContent = 'Apply';
- settingsMenu.appendChild(applyButton);
- // Create save button
- const saveButton = document.createElement('button');
- saveButton.textContent = '💾'; // Save icon
- saveButton.style.position = 'fixed';
- saveButton.style.bottom = '75px'; // Position it under the notepad icon
- saveButton.style.right = '20px'; // Align it with the notepad icon
- saveButton.style.zIndex = '1001';
- saveButton.style.border = 'none';
- saveButton.style.backgroundColor = '#90EE90'; // Light green
- saveButton.style.color = '#fff';
- saveButton.style.borderRadius = '50%';
- saveButton.style.width = '50px';
- saveButton.style.height = '50px';
- saveButton.style.cursor = 'pointer';
- saveButton.style.transform = 'translateY(100%)'; // Start hidden with glide effect
- saveButton.style.transition = 'transform 0.3s ease'; // Glide animation
- saveButton.style.display = 'none'; // Initially hidden
- document.body.appendChild(saveButton);
- // Load saved notes
- const savedNotes = GM_getValue('globalNotepadNotes', '');
- textarea.value = savedNotes;
- // Save notes on change
- textarea.addEventListener('input', () => {
- GM_setValue('globalNotepadNotes', textarea.value);
- });
- // Toggle notepad visibility
- button.addEventListener('click', () => {
- notepad.style.display = notepad.style.display === 'none' ? 'block' : 'none';
- });
- // Collapse notepad when clicking outside
- document.addEventListener('click', (event) => {
- if (notepad.style.display === 'block' && !notepad.contains(event.target) && event.target !== button && event.target !== settingsButton && event.target !== saveButton) {
- notepad.style.display = 'none';
- }
- });
- // Show settings button on hover over notepad icon
- button.addEventListener('mouseover', () => {
- settingsButton.style.display = 'block';
- saveButton.style.display = 'block'; // Show save button
- saveButton.style.transform = 'translateY(0)'; // Glide into view
- });
- // Track mouse movements to keep buttons visible
- let mouseInSettingsArea = false;
- settingsButton.addEventListener('mouseenter', () => {
- mouseInSettingsArea = true;
- });
- settingsButton.addEventListener('mouseleave', () => {
- mouseInSettingsArea = false;
- setTimeout(() => {
- if (!mouseInSettingsArea) {
- settingsButton.style.display = 'none';
- }
- }, 300); // Delay before hiding
- });
- button.addEventListener('mouseleave', () => {
- setTimeout(() => {
- if (!mouseInSettingsArea) {
- settingsButton.style.display = 'none';
- saveButton.style.transform = 'translateY(100%)'; // Glide out of view
- saveButton.style.display = 'none'; // Hide save button
- }
- }, 500); // Increased delay before hiding
- });
- // Show settings menu on settings button click
- settingsButton.addEventListener('click', (event) => {
- event.stopPropagation(); // Prevent closing the notepad
- settingsMenu.style.display = settingsMenu.style.display === 'none' ? 'block' : 'none';
- });
- // Apply font size change
- applyButton.addEventListener('click', () => {
- const fontSize = fontSizeInput.value;
- notepad.style.fontSize = fontSize + 'pt';
- textarea.style.fontSize = fontSize + 'pt';
- settingsMenu.style.display = 'none'; // Hide settings menu after applying
- });
- // Save to hard drive function
- saveButton.addEventListener('click', () => {
- const blob = new Blob([textarea.value], { type: 'text/plain' });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = 'notepad_notes.txt'; // Default file name
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- URL.revokeObjectURL(url);
- // Animation effect
- saveButton.style.transform = 'scale(1.1)';
- setTimeout(() => {
- saveButton.style.transform = 'scale(1)';
- }, 200); // Reset scale after animation
- });
- })();