Blogger HTML Editor Code Prettify 添加器

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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编辑模式。');
        }
    });
})();