您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
透過按鈕就能快速地使用粗體、斜體、刪除線、超連結的標記!
// ==UserScript== // @name 噗浪輸入框格式化標記按鈕 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 透過按鈕就能快速地使用粗體、斜體、刪除線、超連結的標記! // @author 方格子 // @match https://www.plurk.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // 定義按鈕的標籤和功能 const buttons = [ { text: '粗體', tag: '**', title: '插入粗體標記' }, { text: '斜體', tag: '*', title: '插入斜體標記' }, { text: '刪除線', tag: '--', title: '插入刪除線標記' }, { text: '超連結', tag: '', title: '插入超連結' } // 新增超連結按鈕 ]; // 添加按鈕到指定的輸入框 function addButtons(inputBox) { const buttonContainer = document.createElement('div'); buttonContainer.style.marginTop = '2px'; buttonContainer.style.display = 'flex'; // 使用 flexbox 來排列按鈕 // 創建一個可展開的選單 const toggleButton = document.createElement('button'); toggleButton.innerText = '格式化選項'; toggleButton.style.fontSize = '12px'; toggleButton.style.backgroundColor = '#4c6391'; toggleButton.style.padding = '6px'; toggleButton.style.marginRight = '5px'; // 右邊留點空間 toggleButton.onclick = () => { buttonList.style.display = buttonList.style.display === 'none' ? 'flex' : 'none'; // 切換顯示狀態 }; buttonContainer.appendChild(toggleButton); const buttonList = document.createElement('div'); buttonList.style.display = 'none'; // 初始隱藏 buttonList.style.flexDirection = 'row'; // 水平排列按鈕 buttonList.style.alignItems = 'center'; // 垂直居中對齊 buttons.forEach(button => { const btn = document.createElement('button'); btn.innerText = button.text; btn.title = button.title; btn.style.backgroundColor = '#547bc7'; btn.style.padding = '6px'; btn.style.marginRight = '5px'; btn.onclick = () => { if (button.text === '超連結') { insertLink(inputBox); // 處理超連結的插入 } else { insertTag(inputBox, button.tag); } }; buttonList.appendChild(btn); }); buttonContainer.appendChild(buttonList); // 將按鈕容器添加到輸入框上方 inputBox.parentNode.insertBefore(buttonContainer, inputBox); } // 插入標記的功能 function insertTag(inputBox, tag) { const start = inputBox.selectionStart; const end = inputBox.selectionEnd; const text = inputBox.value; // 獲取選取的文字 const selectedText = text.slice(start, end); // 如果有選取文字,則在前後添加標記 if (selectedText) { inputBox.value = text.slice(0, start) + tag + selectedText + tag + text.slice(end); inputBox.selectionStart = start + tag.length; // 將光標移到標記後 inputBox.selectionEnd = start + tag.length + selectedText.length; // 選取的文字後 } else { // 如果沒有選取文字,則直接插入標記 inputBox.value = text.slice(0, start) + tag + tag + text.slice(end); inputBox.selectionStart = inputBox.selectionEnd = start + tag.length; // 將光標移到標記後 } inputBox.focus(); } // 插入超連結的功能 function insertLink(inputBox) { const url = prompt('請輸入超連結的 URL:'); const title = prompt('請輸入顯示的文字:'); if (url && title) { const linkText = `[${title}](${url})`; // Markdown 語法 const start = inputBox.selectionStart; const end = inputBox.selectionEnd; const text = inputBox.value; inputBox.value = text.slice(0, start) + linkText + text.slice(end); inputBox.selectionStart = inputBox.selectionEnd = start + linkText.length; // 將光標移到標記後 inputBox.focus(); } } // 監聽輸入框的變化 const observer = new MutationObserver(() => { const inputBig = document.getElementById('input_big'); const inputSmall = document.getElementById('input_small'); const cboxInput = document.getElementById('cbox_input'); if (inputBig && !inputBig.previousElementSibling) { addButtons(inputBig); } if (inputSmall && !inputSmall.previousElementSibling) { addButtons(inputSmall); } if (cboxInput && !cboxInput.previousElementSibling) { addButtons(cboxInput); } }); // 開始觀察 Plurk 的輸入框 observer.observe(document.body, { childList: true, subtree: true }); })();