Если честно, я готова сойти с ума от безумия. Однажды сделала быстренько скрипт на 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
});
});
})();
Вопрос задан
4 часа назад
14 просмотров