巴哈姆特 文章範本儲存器 (本地)

儲存文章範本到本地儲存並供檢索

目前為 2024-10-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name         巴哈姆特 文章範本儲存器 (本地)
// @name:zh-TW   巴哈姆特 文章範本儲存器 (本地)
// @name:zh-CN   巴哈姆特 文章模版存储器 (本地)
// @name:ja      バハムート 文章テンプレートストレージ(ローカル)
// @name:en      Bahamut Article Template Repository (Local)

// @version      1.0
// @author       Scott

// @description         儲存文章範本到本地儲存並供檢索
// @description:zh-TW   儲存文章範本到本地儲存並供檢索
// @description:zh-CN   存储文章模版到本地存储并供检索
// @description:ja      記事のテンプレートをローカルに保存して検索に使用します
// @description:en      Save article template to local storage for retrieval.

// @namespace    https://www.youtube.com/c/ScottDoha

// @match        *://forum.gamer.com.tw/post1.php?bsn=*
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT


// ==/UserScript==

 
(function() {
    'use strict';
 
    // 找到要插入 <br> 的元素
    var targetElement = document.querySelector('div.c-post__body');
 
    // 檢查目標元素是否存在
    if (targetElement) {
        // 創建兩個 <br> 標簽並插入到目標元素上方
        for (var i = 0; i < 2; i++) {
            var br = document.createElement('br');
            targetElement.insertAdjacentElement('beforebegin', br);
        }
    }
 
    // 初始範本
    var defaultTemplates = {
        "範本 1": "這是範本1的內容。",
        "範本 2": "這是範本2的內容。",
        "範本 3": "這是範本3的內容。",
        "範本 4": "這是範本4的內容。",
        "範本 5": "這是範本5的內容。"
    };
 
    // 加載已保存的範本或使用初始範本
    var savedTemplates = GM_getValue('savedTemplates', defaultTemplates);
 
    // 創建範本下拉選單
    var selectTemplate = document.createElement('select');
    selectTemplate.className = 'dropdown-group dropdown-group-primary';
    selectTemplate.style.marginRight = '10px';
    selectTemplate.style.display = 'inline-block';
    selectTemplate.style.width = '100px';
 
    // 添加範本選項
    for (var templateName in savedTemplates) {
        var option = document.createElement('option');
        option.value = templateName;
        option.textContent = templateName;
        selectTemplate.appendChild(option);
    }
 
    // 範本下拉選單改變事件處理函數
    function templateChangeHandler() {
        var selectedTemplateName = selectTemplate.value;
        var iframe = document.querySelector('iframe#editor');
        if (iframe) {
            var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
            var bodyElement = iframeDocument.querySelector('body.editstyle > div');
            if (bodyElement) {
                bodyElement.innerHTML = savedTemplates[selectedTemplateName];
            } else {
                alert('未找到具體的編輯器區域元素');
            }
        } else {
            alert('未找到 iframe 元素');
        }
    }
 
    // 綁定範本下拉選單的改變事件
    selectTemplate.addEventListener('change', templateChangeHandler);
 
    // 創建“保存範本”按鈕
    var saveButton = document.createElement('button');
    saveButton.textContent = '保存範本';
    saveButton.style.marginRight = '5px';
    saveButton.addEventListener('click', function(event) {
        event.preventDefault();
        event.stopPropagation();
        var templateName = inputTemplateName.value.trim();
        if (templateName === '') {
            alert('請輸入範本名稱!');
            return;
        }
        
        var iframe = document.querySelector('iframe#editor');
        if (iframe) {
            var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
            var bodyElement = iframeDocument.querySelector('body.editstyle > div');
            if (bodyElement) {
                savedTemplates[templateName] = bodyElement.innerHTML;
                GM_setValue('savedTemplates', savedTemplates);
 
                // 更新下拉選單中的選項
                selectTemplate.innerHTML = '';
                for (var name in savedTemplates) {
                    var option = document.createElement('option');
                    option.value = name;
                    option.textContent = name;
                    selectTemplate.appendChild(option);
                }
                alert('範本已保存!');
            } else {
                alert('未找到具體的編輯器區域元素');
            }
        } else {
            alert('未找到 iframe 元素');
        }
    });
 
    // 作者信息
    var authorInfo = document.createElement('div');
    authorInfo.textContent = 'by Scottdoha';
    authorInfo.style.display = 'inline-block'; // 設置為 inline-block,使其和下拉選單處於同一行
    authorInfo.style.marginRight = '10px'; // 添加右邊距
 
    // 創建“刪除範本”按鈕
    var deleteButton = document.createElement('button');
    deleteButton.textContent = '刪除範本';
    deleteButton.addEventListener('click', function(event) {
        event.preventDefault();
        event.stopPropagation();
        var selectedTemplateName = selectTemplate.value;
        if (confirm('確定要刪除選中的範本嗎?')) {
            delete savedTemplates[selectedTemplateName];
            GM_setValue('savedTemplates', savedTemplates);
 
            // 更新下拉選單中的選項
            selectTemplate.innerHTML = '';
            for (var name in savedTemplates) {
                var option = document.createElement('option');
                option.value = name;
                option.textContent = name;
                selectTemplate.appendChild(option);
            }
            alert('範本已刪除!');
        }
    });
 
    // 創建輸入框和按鈕容器
    var inputContainer = document.createElement('div');
    inputContainer.style.marginTop = '0px';
    inputContainer.style.float = 'right';
 
    // 創建輸入框
    var inputTemplateName = document.createElement('input');
    inputTemplateName.type = 'text';
    inputTemplateName.placeholder = '範本名稱';
    inputTemplateName.style.marginRight = '5px';
 
    // 添加元素到容器中
    inputContainer.appendChild(authorInfo);  // 添加作者信息
    inputContainer.appendChild(selectTemplate);
    inputContainer.appendChild(inputTemplateName);
    inputContainer.appendChild(saveButton);
    inputContainer.appendChild(deleteButton);
 
    // 將容器添加到頁面中
    document.querySelector('.c-post__header h3').insertAdjacentElement('afterend', inputContainer);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址