Участник:Vavilexxx/jsCodeFormatter.js

Материал из Википедии — свободной энциклопедии
// <nowiki>

// Подключение Prettier через CDN
const prettierScript = document.createElement('script');
prettierScript.src = 'https://cdn.jsdelivr.net/npm/[email protected]/standalone.js';
document.head.appendChild(prettierScript);

const prettierParserBabel = document.createElement('script');
prettierParserBabel.src = 'https://cdn.jsdelivr.net/npm/[email protected]/parser-babel.js';
document.head.appendChild(prettierParserBabel);

// Функция для форматирования кода с помощью Prettier
const formatCode = (code) => {
  try {
    // Используем Prettier для форматирования
    return prettier.format(code, {
      parser: 'babel', // Парсер для JavaScript
      singleQuote: true, // Используем одинарные кавычки
      trailingComma: 'es5', // Висячие запятые
      printWidth: 80, // Максимальная длина строки
      tabWidth: 2, // Размер отступа
    });
  } catch (error) {
    console.error('Ошибка при форматировании кода:', error);
    return code; // Возвращаем исходный код в случае ошибки
  }
};

// Функция для добавления ссылки "Форматировать код"
const addFormatLink = () => {
  // Проверяем, что страница имеет расширение .js
  if (mw.config.get('wgPageName').endsWith('.js')) {
    // Находим элемент портлета (меню страницы)
    const portlet = document.getElementById('p-views') || document.getElementById('p-cactions');
    if (!portlet) return;

    // Создаем ссылку "Форматировать код"
    const formatLink = document.createElement('li');
    formatLink.innerHTML = '<a id="format-js-link">Форматировать код</a>';

    // Добавляем обработчик события
    formatLink.addEventListener('click', () => {
      const content = document.getElementById('mw-content-text');
      if (content) {
        // Форматируем содержимое страницы
        const formattedCode = formatCode(content.textContent);
        content.textContent = formattedCode;
        alert('Код отформатирован!');
      }
    });

    // Добавляем ссылку в меню
    portlet.querySelector('.pBody ul').appendChild(formatLink);
  }
};

// Запускаем функцию после загрузки страницы
mw.hook('wikipage.content').add(addFormatLink);
// </nowiki>