diff --git a/src/data/extra/web/js/markdownit.js b/src/data/extra/web/js/markdownit.js
index c24d3993..a323ea64 100644
--- a/src/data/extra/web/js/markdownit.js
+++ b/src/data/extra/web/js/markdownit.js
@@ -293,7 +293,7 @@ class MarkdownIt extends VxWorker {
}
// Add 1x1 transparent GIF image at the end to monitor the load process.
return '
';
+ + p_cbStr + ' try { this.parentNode.removeChild(this); } catch(error) { console.log(error); }">';
}
addLangsToSkipHighlight(p_langs) {
diff --git a/src/data/extra/web/js/nodelinemapper.js b/src/data/extra/web/js/nodelinemapper.js
index 026a6bae..abfb1334 100644
--- a/src/data/extra/web/js/nodelinemapper.js
+++ b/src/data/extra/web/js/nodelinemapper.js
@@ -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);
diff --git a/src/widgets/editors/markdownviewer.cpp b/src/widgets/editors/markdownviewer.cpp
index 2fdb0ff0..b6143abc 100644
--- a/src/widgets/editors/markdownviewer.cpp
+++ b/src/widgets/editors/markdownviewer.cpp
@@ -16,6 +16,7 @@
#include
#include
#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,
diff --git a/src/widgets/editors/markdownviewer.h b/src/widgets/editors/markdownviewer.h
index 259507dd..ed7ca96f 100644
--- a/src/widgets/editors/markdownviewer.h
+++ b/src/widgets/editors/markdownviewer.h
@@ -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;
diff --git a/src/widgets/markdownviewwindow.cpp b/src/widgets/markdownviewwindow.cpp
index a9287163..9564cc27 100644
--- a/src/widgets/markdownviewwindow.cpp
+++ b/src/widgets/markdownviewwindow.cpp
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
#include
@@ -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;
}
diff --git a/src/widgets/markdownviewwindow.h b/src/widgets/markdownviewwindow.h
index b832147f..830a522d 100644
--- a/src/widgets/markdownviewwindow.h
+++ b/src/widgets/markdownviewwindow.h
@@ -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;
};
}
diff --git a/src/widgets/toolbarhelper.cpp b/src/widgets/toolbarhelper.cpp
index be3fa3e9..c84ebcfb 100644
--- a/src/widgets/toolbarhelper.cpp
+++ b/src/widgets/toolbarhelper.cpp
@@ -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]() {