您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The "Mythos Webpage Editor" script adds a Greek mythology-themed floating toolbar to webpages, enabling text editing with undo/redo options and customizable button positions. It also reveals font family details on copy, ideal for website designers and branding professionals seeking a unique, efficient editing tool.
当前为
- // ==UserScript==
- // @name Mythos Webpage Editor
- // @namespace https://aveusaid.wordpress.com
- // @version 1.x
- // @description The "Mythos Webpage Editor" script adds a Greek mythology-themed floating toolbar to webpages, enabling text editing with undo/redo options and customizable button positions. It also reveals font family details on copy, ideal for website designers and branding professionals seeking a unique, efficient editing tool.
- // @author Usaid bin Khalid Khan
- // @match *://*/*
- // @grant none
- // @license CC BY-NC-ND 4.0 - https://creativecommons.org/licenses/by-nc-nd/4.0/
- // ==/UserScript==
- (function() {
- 'use strict';
- const websiteUrl = 'https://aveusaid.wordpress.com';
- let isEditingEnabled = false;
- let editButton;
- let toolbar;
- // Enable editing mode
- const enableEditing = () => {
- document.querySelectorAll('*').forEach(elem => elem.setAttribute('contenteditable', 'true'));
- document.addEventListener('copy', handleCopy); // Add copy event listener
- isEditingEnabled = true;
- editButton.textContent = 'Deactivate Mythos';
- editButton.style.backgroundColor = '#ff6347'; // Hades' Flame
- showToolbar(); // Show toolbar when enabling editing
- };
- // Disable editing mode
- const disableEditing = () => {
- document.querySelectorAll('*').forEach(elem => elem.setAttribute('contenteditable', 'false'));
- document.removeEventListener('copy', handleCopy); // Remove copy event listener
- isEditingEnabled = false;
- editButton.textContent = 'Activate Mythos';
- editButton.style.backgroundColor = '#1e90ff'; // Athena's Wisdom
- hideToolbar(); // Hide toolbar when disabling editing
- };
- // Toggle between enabling and disabling editing
- const toggleEditing = () => {
- if (isEditingEnabled) {
- disableEditing();
- } else {
- enableEditing();
- }
- };
- // Handle copy event to include font family in clipboard
- const handleCopy = (event) => {
- const selection = window.getSelection();
- const selectedText = selection.toString();
- if (selectedText) {
- const range = selection.getRangeAt(0);
- const fontFamily = getComputedStyle(range.startContainer.parentElement).fontFamily;
- const textWithFont = `${selectedText}\n\nFont Family: ${fontFamily}`;
- // Modify clipboard data to include font family
- event.clipboardData.setData('text/plain', textWithFont);
- event.preventDefault();
- }
- };
- // Create and style the edit button
- const createEditButton = () => {
- editButton = document.createElement('button');
- editButton.textContent = 'Activate Mythos'; // Reference to Mythology
- editButton.id = 'edit-text-button';
- editButton.style.position = 'fixed';
- editButton.style.zIndex = '10000';
- editButton.style.backgroundColor = '#1e90ff'; // Athena's Wisdom
- editButton.style.color = 'white';
- editButton.style.border = 'none';
- editButton.style.padding = '10px 15px';
- editButton.style.borderRadius = '8px';
- editButton.style.fontSize = '16px';
- editButton.style.cursor = 'pointer';
- editButton.style.boxShadow = '0 4px 8px rgba(0,0,0,0.3)';
- editButton.style.transition = 'background-color 0.3s';
- // Position the button based on user preference
- const position = localStorage.getItem('editButtonPosition') || 'top-right';
- setButtonPosition(position);
- editButton.onclick = function() {
- toggleEditing(); // Toggle editing mode
- };
- document.body.appendChild(editButton);
- };
- // Set the button position
- const setButtonPosition = (position) => {
- switch (position) {
- case 'top-left':
- editButton.style.top = '10px';
- editButton.style.left = '10px';
- editButton.style.right = '';
- editButton.style.bottom = '';
- break;
- case 'bottom-right':
- editButton.style.bottom = '10px';
- editButton.style.right = '10px';
- editButton.style.top = '';
- editButton.style.left = '';
- break;
- case 'bottom-left':
- editButton.style.bottom = '10px';
- editButton.style.left = '10px';
- editButton.style.top = '';
- editButton.style.right = '';
- break;
- default: // top-right
- editButton.style.top = '10px';
- editButton.style.right = '10px';
- editButton.style.bottom = '';
- editButton.style.left = '';
- break;
- }
- };
- // Create and style the floating toolbar
- const createToolbar = () => {
- toolbar = document.createElement('div');
- toolbar.id = 'edit-toolbar';
- toolbar.style.position = 'fixed';
- toolbar.style.zIndex = '10001';
- toolbar.style.backgroundColor = '#333'; // Underworld's Darkness
- toolbar.style.color = 'white';
- toolbar.style.borderRadius = '8px';
- toolbar.style.padding = '10px';
- toolbar.style.boxShadow = '0 4px 8px rgba(0,0,0,0.3)';
- toolbar.style.display = 'none'; // Initially hidden
- toolbar.style.top = '50px'; // Adjust position as needed
- toolbar.style.right = '10px'; // Adjust position as needed
- const undoButton = createToolbarButton('↻ Undo - Mnemosyne', undoAction); // Mnemosyne, goddess of memory
- const redoButton = createToolbarButton('↺ Redo - Clio', redoAction); // Clio, muse of history
- const visitButton = createToolbarButton('🌟 Visit Delphi', visitWebsite); // Delphi, the oracle
- const positionSelect = createPositionSelect();
- toolbar.appendChild(undoButton);
- toolbar.appendChild(redoButton);
- toolbar.appendChild(visitButton);
- toolbar.appendChild(positionSelect);
- document.body.appendChild(toolbar);
- };
- // Create a button for the toolbar with Greek-themed icons
- const createToolbarButton = (text, action) => {
- const button = document.createElement('button');
- button.innerHTML = text; // Using innerHTML to include Unicode symbols
- button.style.backgroundColor = '#555'; // Hermes' Shade
- button.style.color = 'white';
- button.style.border = 'none';
- button.style.padding = '5px 10px';
- button.style.borderRadius = '5px';
- button.style.margin = '2px';
- button.style.cursor = 'pointer';
- button.style.fontSize = '14px';
- button.onclick = action;
- return button;
- };
- // Create a select element for choosing button position
- const createPositionSelect = () => {
- const select = document.createElement('select');
- select.style.backgroundColor = '#555'; // Hermes' Shade
- select.style.color = 'white';
- select.style.border = 'none';
- select.style.padding = '5px';
- select.style.borderRadius = '5px';
- select.style.margin = '2px';
- select.style.fontSize = '14px';
- const positions = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];
- positions.forEach(pos => {
- const option = document.createElement('option');
- option.value = pos;
- option.textContent = `Position: ${pos.replace('-', ' ')}`;
- select.appendChild(option);
- });
- select.value = localStorage.getItem('editButtonPosition') || 'top-right';
- select.onchange = (event) => {
- const newPosition = event.target.value;
- localStorage.setItem('editButtonPosition', newPosition);
- setButtonPosition(newPosition);
- };
- return select;
- };
- // Show the toolbar
- const showToolbar = () => {
- if (!toolbar) createToolbar();
- toolbar.style.display = 'block';
- };
- // Hide the toolbar
- const hideToolbar = () => {
- if (toolbar) toolbar.style.display = 'none';
- };
- // Undo action
- const undoAction = () => {
- document.execCommand('undo');
- };
- // Redo action
- const redoAction = () => {
- document.execCommand('redo');
- };
- // Open author's website
- const visitWebsite = () => {
- window.open(websiteUrl, '_blank');
- };
- // Initialize the button and toolbar
- const initializeScript = () => {
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', () => {
- createEditButton();
- createToolbar();
- });
- } else {
- createEditButton();
- createToolbar();
- }
- };
- // Run initialization function
- initializeScript();
- // Prevent toolbar from being editable
- document.addEventListener('keydown', (event) => {
- if (isEditingEnabled) {
- if (event.target === toolbar) {
- event.preventDefault();
- }
- }
- });
- })();