MarkdownViewWindow: fix EditPreview

This commit is contained in:
Le Tan 2021-11-11 08:25:34 +08:00
parent 6b1f00880e
commit e2fda18dbd
7 changed files with 67 additions and 19 deletions

View File

@ -293,7 +293,7 @@ class MarkdownIt extends VxWorker {
}
// Add 1x1 transparent GIF image at the end to monitor the load process.
return '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" onload="'
+ p_cbStr + ' this.parentNode.removeChild(this);">';
+ p_cbStr + ' try { this.parentNode.removeChild(this); } catch(error) { console.log(error); }">';
}
addLangsToSkipHighlight(p_langs) {

View File

@ -201,6 +201,8 @@ class NodeLineMapper {
let lineNumber = -1;
if (idx > -1) {
lineNumber = parseInt(this.nodesWithSourceLine[idx].getAttribute(this.sourceLineAttributeName));
} else if (document.documentElement.scrollTop < 30) {
lineNumber = 0;
}
this.adapter.setTopLineNumber(lineNumber);

View File

@ -16,6 +16,7 @@
#include <core/configmgr.h>
#include <core/editorconfig.h>
#include "../widgetsfactory.h"
#include "../viewwindow.h"
using namespace vnotex;
@ -30,8 +31,18 @@ MarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter,
const QColor &p_background,
qreal p_zoomFactor,
QWidget *p_parent)
: MarkdownViewer(p_adapter, nullptr, p_background, p_zoomFactor, p_parent)
{
}
MarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter,
const ViewWindow *p_viewWindow,
const QColor &p_background,
qreal p_zoomFactor,
QWidget *p_parent)
: WebViewer(p_background, p_zoomFactor, p_parent),
m_adapter(p_adapter)
m_adapter(p_adapter),
m_viewWindow(p_viewWindow)
{
m_adapter->setParent(this);
@ -115,7 +126,7 @@ void MarkdownViewer::contextMenuEvent(QContextMenuEvent *p_event)
}
#endif
if (!hasSelection()) {
if (!hasSelection() && m_viewWindow && m_viewWindow->getMode() == ViewWindowMode::Read) {
auto firstAct = actions.isEmpty() ? nullptr : actions[0];
auto editAct = new QAction(tr("&Edit"), menu.data());
WidgetUtils::addActionShortcutText(editAct,

View File

@ -9,6 +9,7 @@ namespace vnotex
{
class MarkdownViewerAdapter;
class PreviewHelper;
class ViewWindow;
class MarkdownViewer : public WebViewer
{
@ -20,6 +21,12 @@ namespace vnotex
qreal p_zoomFactor,
QWidget *p_parent = nullptr);
MarkdownViewer(MarkdownViewerAdapter *p_adapter,
const ViewWindow *p_viewWindow,
const QColor &p_background,
qreal p_zoomFactor,
QWidget *p_parent = nullptr);
MarkdownViewerAdapter *adapter() const;
void setPreviewHelper(PreviewHelper *p_previewHelper);
@ -62,6 +69,9 @@ namespace vnotex
// Managed by QObject.
MarkdownViewerAdapter *m_adapter = nullptr;
// Nullable.
const ViewWindow *m_viewWindow = nullptr;
// Whether this view has hooked the Copy Image Url action.
bool m_copyImageUrlActionHooked = false;

View File

@ -11,6 +11,7 @@
#include <QProgressDialog>
#include <QMenu>
#include <QActionGroup>
#include <QTimer>
#include <core/fileopenparameters.h>
#include <core/editorconfig.h>
@ -147,14 +148,16 @@ void MarkdownViewWindow::setModeInternal(ViewWindowMode p_mode, bool p_syncBuffe
if (p_syncBuffer) {
syncTextEditorFromBuffer(true);
}
m_editor->show();
setEditViewMode(ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getEditViewMode());
}
// Avoid focus glitch.
m_editor->show();
m_editor->setFocus();
setEditViewMode(m_editViewMode);
getMainStatusWidget()->setCurrentWidget(m_textEditorStatusWidget.get());
break;
}
@ -320,7 +323,7 @@ void MarkdownViewWindow::setupToolBar()
auto act = addAction(toolBar, ViewWindowToolBarHelper::Debug);
connect(this, &ViewWindow::modeChanged,
this, [this, act]() {
act->setEnabled(m_mode != ViewWindowMode::Edit);
act->setEnabled(m_mode == ViewWindowMode::Read || m_editViewMode != MarkdownEditorConfig::EditViewMode::EditOnly);
});
}
}
@ -334,8 +337,6 @@ void MarkdownViewWindow::setupTextEditor()
updateConfigRevision();
m_editViewMode = markdownEditorConfig.getEditViewMode();
m_editor = new MarkdownEditor(markdownEditorConfig,
createMarkdownEditorConfig(editorConfig, markdownEditorConfig),
createMarkdownEditorParameters(editorConfig, markdownEditorConfig),
@ -432,6 +433,7 @@ void MarkdownViewWindow::setupViewer()
auto adapter = new EditorMarkdownViewerAdapter(nullptr, this);
m_viewer = new MarkdownViewer(adapter,
this,
VNoteX::getInst().getThemeMgr().getBaseBackground(),
markdownEditorConfig.getZoomFactorInReadMode(),
this);
@ -1298,7 +1300,11 @@ void MarkdownViewWindow::setEditViewMode(MarkdownEditorConfig::EditViewMode p_mo
{
Q_ASSERT(m_mode == ViewWindowMode::Edit);
m_editViewMode = p_mode;
bool modeChanged = false;
if (m_editViewMode != p_mode) {
m_editViewMode = p_mode;
modeChanged = true;
}
switch (p_mode) {
case MarkdownEditorConfig::EditViewMode::EditOnly:
@ -1307,10 +1313,12 @@ void MarkdownViewWindow::setEditViewMode(MarkdownEditorConfig::EditViewMode p_mo
m_viewer->hide();
}
disconnect(m_editor->getTextEdit(), &vte::VTextEdit::contentsChanged,
this, &MarkdownViewWindow::syncEditorContentsToPreview);
disconnect(m_editor, &MarkdownEditor::topLineChanged,
this, &MarkdownViewWindow::syncEditorPositionToPreview);
if (modeChanged) {
disconnect(m_editor->getTextEdit(), &vte::VTextEdit::contentsChanged,
m_syncPreviewTimer, QOverload<>::of(&QTimer::start));
disconnect(m_editor, &MarkdownEditor::topLineChanged,
this, &MarkdownViewWindow::syncEditorPositionToPreview);
}
break;
}
@ -1319,17 +1327,25 @@ void MarkdownViewWindow::setEditViewMode(MarkdownEditorConfig::EditViewMode p_mo
m_viewer->show();
WidgetUtils::distributeWidgetsOfSplitter(m_splitter);
if (m_viewerReady) {
if (modeChanged) {
if (!m_syncPreviewTimer) {
m_syncPreviewTimer = new QTimer(this);
m_syncPreviewTimer->setSingleShot(true);
m_syncPreviewTimer->setInterval(300);
connect(m_syncPreviewTimer, &QTimer::timeout,
this, &MarkdownViewWindow::syncEditorContentsToPreview);
}
connect(m_editor->getTextEdit(), &vte::VTextEdit::contentsChanged,
this, &MarkdownViewWindow::syncEditorContentsToPreview,
m_syncPreviewTimer, QOverload<>::of(&QTimer::start),
Qt::UniqueConnection);
connect(m_editor, &MarkdownEditor::topLineChanged,
this, &MarkdownViewWindow::syncEditorPositionToPreview,
Qt::UniqueConnection);
syncEditorContentsToPreview();
}
syncEditorContentsToPreview();
break;
}
@ -1341,7 +1357,7 @@ void MarkdownViewWindow::setEditViewMode(MarkdownEditorConfig::EditViewMode p_mo
void MarkdownViewWindow::syncEditorContentsToPreview()
{
if (isReadMode() || m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {
if (!m_viewerReady || isReadMode() || m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {
return;
}
@ -1350,7 +1366,7 @@ void MarkdownViewWindow::syncEditorContentsToPreview()
void MarkdownViewWindow::syncEditorPositionToPreview()
{
if (isReadMode() || m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {
if (!m_viewerReady || isReadMode() || m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {
return;
}

View File

@ -11,6 +11,7 @@ class QSplitter;
class QStackedWidget;
class QWebEngineView;
class QActionGroup;
class QTimer;
namespace vte
{
@ -224,6 +225,8 @@ namespace vnotex
QActionGroup *m_viewModeActionGroup = nullptr;
MarkdownEditorConfig::EditViewMode m_editViewMode = MarkdownEditorConfig::EditViewMode::EditOnly;
QTimer *m_syncPreviewTimer = nullptr;
};
}

View File

@ -500,6 +500,12 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too
updater.exec();
});
menu->addAction(MainWindow::tr("Contributors"),
menu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/graphs/contributors"));
});
menu->addAction(MainWindow::tr("About"),
menu,
[p_win]() {