Задать вопрос
@Mafizo

Почему на работает скрипт на tampermonkey?

Если честно, я готова сойти с ума от безумия. Однажды сделала быстренько скрипт на tampermonkey чтобы при вставке текста на сайт, автоматически вставлялись пробелы между абзацами, но сегодня он почему-то тупо перестал работать. В редактор то все вставляется с пробелами, но стоит опубликовать пост, как все пробелы слетают. Умоляю, помогите, подскажите или исправьте! Пожалуйста, очень прошу (этот сайт бусти).

(function() {
'use strict';

const STATE = {
isProcessing: false,
initialized: false
};

const AlignmentDetector = {
patterns: {
center: /center|middle/i,
right: /right/i,
left: /left/i
},

fromElement(element) {
if (element.style?.textAlign) {
return element.style.textAlign;
}

if (element.hasAttribute('align')) {
return element.getAttribute('align');
}

for (const [alignment, pattern] of Object.entries(this.patterns)) {
if ([...element.classList].some(cls => pattern.test(cls))) {
return alignment;
}
}

let parent = element.parentElement;
while (parent) {
if (parent.tagName.toLowerCase() === 'center') {
return 'center';
}
if (parent.style?.textAlign) {
return parent.style.textAlign;
}
if (parent.hasAttribute('align')) {
return parent.getAttribute('align');
}
parent = parent.parentElement;
}

return '';
}
};

const HTMLProcessor = {
createEmptyLine() {
const line = document.createElement('p');
line.innerHTML = '
';
return line;
},

processHTML(html) {
const container = document.createElement('div');
container.innerHTML = html.replace(/<(meta|link|style|script)[^>]>[\s\S]?<\/\1>|<(meta|link)\s[^>]*\/>/g, '');

const blocks = container.querySelectorAll('p, div, h1, h2, h3, h4, h5, h6, blockquote, center');
const result = document.createElement('div');

blocks.forEach((block, index) => {
const content = block.innerHTML.trim();
if (!content || ['
', ' '].includes(content)) return;

const paragraph = document.createElement('p');
paragraph.innerHTML = content;

const alignment = AlignmentDetector.fromElement(block);
if (alignment) {
paragraph.style.textAlign = alignment;
paragraph.setAttribute('data-alignment', alignment);
}

result.appendChild(paragraph);

if (index < blocks.length - 1) {
result.appendChild(this.createEmptyLine());
result.appendChild(this.createEmptyLine());
}
});

return result.innerHTML;
},

processPlainText(text) {
return text
.split('\n')
.filter(line => line.trim())
.map(line => `${line}`)
.join('

');
}
};

function handlePaste(e) {
if (STATE.isProcessing) return;

try {
STATE.isProcessing = true;
e.preventDefault();
e.stopPropagation();

const clipboardData = e.clipboardData || window.clipboardData;
const pastedHTML = clipboardData.getData('text/html');
const content = pastedHTML
? HTMLProcessor.processHTML(pastedHTML)
: HTMLProcessor.processPlainText(clipboardData.getData('text'));

document.execCommand('insertHTML', false, content);

setTimeout(() => {
const editor = document.querySelector('[contenteditable="true"]');
if (editor && !editor.innerHTML.includes('

')) {
editor.innerHTML = HTMLProcessor.processHTML(editor.innerHTML);
}
}, 100);
} catch (error) {
console.error('Ошибка форматирования:', error);
} finally {
requestAnimationFrame(() => {
STATE.isProcessing = false;
});
}
}

function initializeFormatter() {
const editor = document.querySelector('[contenteditable="true"]');
if (editor && !STATE.initialized) {
editor.addEventListener('paste', handlePaste, { capture: true });
STATE.initialized = true;
console.log('Форматтер текста инициализирован');
}
}

const observer = new MutationObserver(() => {
if (!STATE.initialized) {
initializeFormatter();
}
});

window.addEventListener('load', () => {
setTimeout(initializeFormatter, 1500);
observer.observe(document.body, {
childList: true,
subtree: true
});
});
})();
  • Вопрос задан
  • 13 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы