Blogger HTML Editor Code Prettify 添加器

在 Blogger 背景HTML 编辑器中添加代码美化功能

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Blogger HTML Editor Code Prettify 添加器
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  在 Blogger 背景HTML 编辑器中添加代码美化功能
// @author       moran:http://blog.7998888.xyz/
// @match        https://www.blogger.com/blog/themes/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 创建一个按钮,用于插入代码
    const button = document.createElement('button');
    button.textContent = '插入 Code Prettify';
    button.style.position = 'fixed';
    button.style.top = '50px';  // 调整到顶部50px
    button.style.right = '10px';
    button.style.zIndex = '9999';
    button.style.padding = '8px 16px';
    button.style.backgroundColor = '#2196F3';  // 改为蓝色
    button.style.color = 'white';
    button.style.border = 'none';
    button.style.borderRadius = '4px';
    button.style.cursor = 'pointer';

    // 要插入的 HTML 代码
    const codeToInsert = `<!-- Code Prettify Resources -->
<script src='https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js'></script>
<link href='https://cdn.jsdelivr.net/gh/google/code-prettify@master/styles/sunburst.css' rel='stylesheet' />
<style type='text/css'>
.copy-code-button {
  background-color: #f1f1f1;
  border: 1px solid #ccc;
  border-radius: 4px;
  color: #333;
  cursor: pointer;
  font-size: 12px;
  margin: 5px 0 0;
  padding: 3px 8px;
  position: absolute;
  right: 10px;
  top: 10px;
}
.copy-code-button:hover {
  background-color: #ddd;
}
.prettyprint {
  position: relative;
  padding: 20px 10px 10px;
}</style>`;

    const scriptToInsert = `<script>
document.addEventListener('DOMContentLoaded', function() {
  var prettyPrintBlocks = document.querySelectorAll('.prettyprint');
  prettyPrintBlocks.forEach(function(block) {
    // 为每个代码块添加复制按钮
    var copyButton = document.createElement('button');
    copyButton.className = 'copy-code-button';
    copyButton.textContent = '复制代码';
    block.appendChild(copyButton);
  });

  var copyButtons = document.querySelectorAll('.prettyprint .copy-code-button');
  copyButtons.forEach(function(button) {
    button.addEventListener('click', function() {
      var codeBlock = this.parentNode.querySelector('code');
      var codeText = codeBlock.textContent;
      
      var textarea = document.createElement('textarea');
      textarea.value = codeText;
      textarea.setAttribute('readonly', '');
      textarea.style.position = 'absolute';
      textarea.style.left = '-9999px';
      document.body.appendChild(textarea);
      
      textarea.select();
      document.execCommand('copy');
      document.body.removeChild(textarea);
      
      var originalText = this.textContent;
      this.textContent = '已复制!';
      
      setTimeout(function() {
        button.textContent = originalText;
      }, 2000);
    });
  });
});</script>`;

    // 监听HTML编辑器的出现
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (document.querySelector('.CodeMirror')) {
                observer.disconnect();
                document.body.appendChild(button);
            }
        });
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // 按钮点击事件
    button.addEventListener('click', function() {
        const editor = document.querySelector('.CodeMirror').CodeMirror;
        if (editor) {
            const currentContent = editor.getValue();
            
            // 检查是否已经插入了代码
            if (currentContent.includes('code-prettify@master')) {
                alert('代码已经插入过了!');
                return;
            }

            // 找到合适的插入位置
            let headStart = currentContent.indexOf('<head>');
            let headEnd = currentContent.indexOf('</head>');
            
            if (headStart === -1 || headEnd === -1) {
                alert('未找到 head 标签,请检查 HTML 结构');
                return;
            }
            
            // 在head标签内的最后插入代码
            let newContent = currentContent.slice(0, headEnd) + 
                           '\n' + codeToInsert + '\n' +
                           currentContent.slice(headEnd);
            
            // 在</body>前插入复制功能脚本
            newContent = newContent.replace('</body>', scriptToInsert + '\n</body>');
            
            // 更新编辑器内容
            editor.setValue(newContent);
            
            // 提示成功
            alert('代码已成功插入!');
        } else {
            alert('未找到编辑器!请确保你在HTML编辑模式。');
        }
    });
})();