Блоки кода: убрано время, чистый Telegram-пузырь без времени
- Убран timeStr и нижний блок с 20:31 ✓✓, теперь пузырь только с кодом и кнопкой 📋 Копировать справа вверху
- Фон #2e4d6a radius 14, внутренний rgba(0,0,0,0.22) radius 9, JetBrains Mono 13/1.5/tab 4, copybtn hover/active через <style> .copybtn:hover/active
- Сохранены редактор-фичи: авто-закрытие ()[]{}""''<>, тег </tag>, Tab 4 пробела, Enter сохраняет indent, Backspace удаляет 4, подсветка пары o ↔ m
This commit is contained in:
+14
-25
@@ -478,46 +478,35 @@ private:
|
|||||||
const char *info = cmark_node_get_fence_info(n);
|
const char *info = cmark_node_get_fence_info(n);
|
||||||
const QString lang = normalizeLang(QString::fromUtf8(info ? info : ""));
|
const QString lang = normalizeLang(QString::fromUtf8(info ? info : ""));
|
||||||
const QString code = QString::fromUtf8(cmark_node_get_literal(n));
|
const QString code = QString::fromUtf8(cmark_node_get_literal(n));
|
||||||
// Telegram-стиль как на скрине: тёмно-синий пузырь (#2e4d6a) с кодом, время и галочки внизу справа
|
|
||||||
// Сохраняем оригинал для копирования
|
// Сохраняем оригинал для копирования
|
||||||
QString codeId;
|
QString codeId;
|
||||||
if (m_impl) {
|
if (m_impl) {
|
||||||
codeId = QStringLiteral("code_%1").arg(m_impl->codeCounter++);
|
codeId = QStringLiteral("code_%1").arg(m_impl->codeCounter++);
|
||||||
m_impl->codeBlocks.insert(codeId, code);
|
m_impl->codeBlocks.insert(codeId, code);
|
||||||
}
|
}
|
||||||
// Форсируем тёмную тему подсветки для контраста на синем фоне Telegram-пузыря
|
// Подсветка — тёмная тема для контраста на синем фоне (как в Telegram)
|
||||||
CodeHighlighter hl(m_repo);
|
CodeHighlighter hl(m_repo);
|
||||||
const QString highlighted = hl.highlight(code, lang, true);
|
const QString highlighted = hl.highlight(code, lang, true);
|
||||||
// Переопределяем lang после highlight (highlight уже сделал)
|
|
||||||
const QString langDisplay = lang.isEmpty() ? "text" : esc(lang);
|
|
||||||
const QString cls = lang.isEmpty() ? QString() : QStringLiteral(" class=\"language-%1\"").arg(esc(lang));
|
const QString cls = lang.isEmpty() ? QString() : QStringLiteral(" class=\"language-%1\"").arg(esc(lang));
|
||||||
|
|
||||||
// Время как в Telegram — текущее время рендера (можно заменить на lastModified)
|
// Telegram-пузырь как на скрине: #2e4d6a / #3b5a7a, скругления 12-16, без времени
|
||||||
const QString timeStr = QTime::currentTime().toString("hh:mm");
|
const QString bubbleBg = "#2e4d6a";
|
||||||
// Telegram bubble: #3a5068 или #2e4d6a, скругления 12, тень, max-width 85%
|
// Кнопка копирования — строго справа вверху, hover/active через CSS
|
||||||
const QString bubbleBg = "#3b5a7a"; // тёмно-синий как на скрине #2e4d6a → #3b5a7a чуть светлее
|
|
||||||
const QString codeColor = "#ffffff";
|
|
||||||
// Кнопка копирования — в правом верхнем углу пузыря, как в ТГ при наведении
|
|
||||||
// Делаем её заметной: полупрозрачная, скруглённая, с hover/active через CSS
|
|
||||||
const QString copyLink = codeId.isEmpty() ? QString()
|
const QString copyLink = codeId.isEmpty() ? QString()
|
||||||
: QStringLiteral("<a href=\"flora://copycode/%1\" style=\"display:inline-block;background:rgba(255,255,255,0.15);color:#ffffff;text-decoration:none;font-size:12px;padding:3px 8px;border-radius:12px;border:1px solid rgba(255,255,255,0.2);font-family:-apple-system,sans-serif;\" title=\"Копировать\">📋</a>").arg(codeId);
|
: QStringLiteral("<a href=\"flora://copycode/%1\" class=\"copybtn\" style=\"display:inline-block;background:rgba(255,255,255,0.12);color:#e0e0e0;text-decoration:none;font-size:12px;padding:4px 10px;border-radius:14px;border:1px solid rgba(255,255,255,0.18);font-family:-apple-system,sans-serif;\" title=\"Копировать\">📋 Копировать</a>").arg(codeId);
|
||||||
|
|
||||||
// Пузырь Telegram: используем таблицу для совместимости с QTextDocument (не поддерживает position:absolute)
|
// Чистый пузырь без времени, только код + кнопка
|
||||||
// Верхняя строка — язык слева и кнопка справа, средняя — код, нижняя — время и галочки справа
|
|
||||||
return QStringLiteral(
|
return QStringLiteral(
|
||||||
"<div style=\"background:%1;border-radius:12px;padding:10px 14px 6px 14px;margin:12px 0;max-width:88%%;box-shadow:0 1px 2px rgba(0,0,0,0.15)\">"
|
"<style>.copybtn:hover{background:rgba(255,255,255,0.22) !important;border-color:rgba(255,255,255,0.28) !important;color:#ffffff !important;}"
|
||||||
"<table width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\" style=\"margin-bottom:6px\">"
|
".copybtn:active{background:rgba(255,255,255,0.30) !important;}</style>"
|
||||||
"<tr>"
|
"<div style=\"background:%1;border-radius:14px;padding:12px 14px 12px 14px;margin:12px 0;max-width:88%%;box-shadow:0 1px 2px rgba(0,0,0,0.18)\">"
|
||||||
"<td style=\"text-align:left;color:#8a9ba8;font-size:10px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;opacity:0.9\">%2</td>"
|
"<div style=\"text-align:right;margin-bottom:8px\">%2</div>"
|
||||||
"<td style=\"text-align:right\">%3</td>"
|
"<div style=\"background:rgba(0,0,0,0.22);border-radius:9px;padding:12px 14px\">"
|
||||||
"</tr></table>"
|
"<pre style=\"margin:0;font-family:'JetBrains Mono','Fira Code','Menlo',Consolas,monospace;font-size:13px;line-height:1.5;tab-size:4;white-space:pre-wrap;word-wrap:break-word;color:#ffffff\">"
|
||||||
"<div style=\"background:rgba(0,0,0,0.18);border-radius:8px;padding:10px 12px;margin:6px 0 8px 0\">"
|
"<code%4>%3</code></pre>"
|
||||||
"<pre style=\"margin:0;font-family:'JetBrains Mono','Fira Code','Menlo',Consolas,monospace;font-size:13px;line-height:1.45;tab-size:4;color:%4;white-space:pre-wrap;word-wrap:break-word\">"
|
|
||||||
"<code%6>%5</code></pre>"
|
|
||||||
"</div>"
|
"</div>"
|
||||||
"<div style=\"text-align:right;color:#8a9ba8;font-size:11px;margin-top:2px;opacity:0.95\">%7 <span style=\"color:#5eb1f6\">✓✓</span></div>"
|
|
||||||
"</div>"
|
"</div>"
|
||||||
).arg(bubbleBg, langDisplay, copyLink, codeColor, highlighted, cls, timeStr);
|
).arg(bubbleBg, copyLink, highlighted, cls);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString inlineAll(cmark_node *n)
|
QString inlineAll(cmark_node *n)
|
||||||
|
|||||||
Reference in New Issue
Block a user