Skip to content

Commit 918a862

Browse files
Merge upstream into master
2 parents 090b5c3 + 606be43 commit 918a862

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+489
-217
lines changed

browser/components/CodeEditor.js

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export default class CodeEditor extends React.Component {
5353
this.focusHandler = () => {
5454
ipcRenderer.send('editor:focused', true)
5555
}
56+
const debouncedDeletionOfAttachments = _.debounce(attachmentManagement.deleteAttachmentsNotPresentInNote, 30000)
5657
this.blurHandler = (editor, e) => {
5758
ipcRenderer.send('editor:focused', false)
5859
if (e == null) return null
@@ -64,16 +65,11 @@ export default class CodeEditor extends React.Component {
6465
el = el.parentNode
6566
}
6667
this.props.onBlur != null && this.props.onBlur(e)
67-
6868
const {
6969
storageKey,
7070
noteKey
7171
} = this.props
72-
attachmentManagement.deleteAttachmentsNotPresentInNote(
73-
this.editor.getValue(),
74-
storageKey,
75-
noteKey
76-
)
72+
debouncedDeletionOfAttachments(this.editor.getValue(), storageKey, noteKey)
7773
}
7874
this.pasteHandler = (editor, e) => {
7975
e.preventDefault()
@@ -205,23 +201,11 @@ export default class CodeEditor extends React.Component {
205201
'Cmd-T': function (cm) {
206202
// Do nothing
207203
},
208-
'Ctrl-/': function (cm) {
209-
if (global.process.platform === 'darwin') { return }
210-
const dateNow = new Date()
211-
cm.replaceSelection(dateNow.toLocaleDateString())
212-
},
213-
'Cmd-/': function (cm) {
214-
if (global.process.platform !== 'darwin') { return }
204+
[translateHotkey(hotkey.insertDate)]: function (cm) {
215205
const dateNow = new Date()
216206
cm.replaceSelection(dateNow.toLocaleDateString())
217207
},
218-
'Shift-Ctrl-/': function (cm) {
219-
if (global.process.platform === 'darwin') { return }
220-
const dateNow = new Date()
221-
cm.replaceSelection(dateNow.toLocaleString())
222-
},
223-
'Shift-Cmd-/': function (cm) {
224-
if (global.process.platform !== 'darwin') { return }
208+
[translateHotkey(hotkey.insertDateTime)]: function (cm) {
225209
const dateNow = new Date()
226210
cm.replaceSelection(dateNow.toLocaleString())
227211
},
@@ -267,7 +251,7 @@ export default class CodeEditor extends React.Component {
267251
value: this.props.value,
268252
linesHighlighted: this.props.linesHighlighted,
269253
lineNumbers: this.props.displayLineNumbers,
270-
lineWrapping: true,
254+
lineWrapping: this.props.lineWrapping,
271255
theme: this.props.theme,
272256
indentUnit: this.props.indentSize,
273257
tabSize: this.props.indentSize,
@@ -566,6 +550,10 @@ export default class CodeEditor extends React.Component {
566550
this.editor.setOption('lineNumbers', this.props.displayLineNumbers)
567551
}
568552

553+
if (prevProps.lineWrapping !== this.props.lineWrapping) {
554+
this.editor.setOption('lineWrapping', this.props.lineWrapping)
555+
}
556+
569557
if (prevProps.scrollPastEnd !== this.props.scrollPastEnd) {
570558
this.editor.setOption('scrollPastEnd', this.props.scrollPastEnd)
571559
}

browser/components/MarkdownEditor.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ class MarkdownEditor extends React.Component {
304304
enableRulers={config.editor.enableRulers}
305305
rulers={config.editor.rulers}
306306
displayLineNumbers={config.editor.displayLineNumbers}
307+
lineWrapping
307308
matchingPairs={config.editor.matchingPairs}
308309
matchingTriples={config.editor.matchingTriples}
309310
explodingPairs={config.editor.explodingPairs}
@@ -340,6 +341,7 @@ class MarkdownEditor extends React.Component {
340341
smartArrows={config.preview.smartArrows}
341342
breaks={config.preview.breaks}
342343
sanitize={config.preview.sanitize}
344+
mermaidHTMLLabel={config.preview.mermaidHTMLLabel}
343345
ref='preview'
344346
onContextMenu={(e) => this.handleContextMenu(e)}
345347
onDoubleClick={(e) => this.handleDoubleClick(e)}

browser/components/MarkdownPreview.js

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const CSS_FILES = [
4141
`${appPath}/node_modules/codemirror/lib/codemirror.css`,
4242
`${appPath}/node_modules/react-image-carousel/lib/css/main.min.css`
4343
]
44+
const win = global.process.platform === 'win32'
4445

4546
function buildStyle (
4647
fontFamily,
@@ -247,7 +248,11 @@ export default class MarkdownPreview extends React.Component {
247248
handleContextMenu (event) {
248249
const menu = buildMarkdownPreviewContextMenu(this, event)
249250
if (menu != null) {
251+
<<<<<<< HEAD
250252
setTimeout(() => menu.popup(remote.getCurrentWindow()), 30)
253+
=======
254+
menu.popup(remote.getCurrentWindow())
255+
>>>>>>> upstream/master
251256
}
252257
}
253258

@@ -320,7 +325,11 @@ export default class MarkdownPreview extends React.Component {
320325
customCSS
321326
)
322327
let body = this.markdown.render(noteContent)
323-
const files = [this.GetCodeThemeLink(codeBlockTheme), ...CSS_FILES]
328+
body = attachmentManagement.fixLocalURLS(
329+
body,
330+
this.props.storagePath
331+
)
332+
const files = [this.getCodeThemeLink(codeBlockTheme), ...CSS_FILES]
324333
files.forEach(file => {
325334
if (global.process.platform === 'win32') {
326335
file = file.replace('file:///', '')
@@ -555,6 +564,7 @@ export default class MarkdownPreview extends React.Component {
555564
if (
556565
prevProps.smartQuotes !== this.props.smartQuotes ||
557566
prevProps.sanitize !== this.props.sanitize ||
567+
prevProps.mermaidHTMLLabel !== this.props.mermaidHTMLLabel ||
558568
prevProps.smartArrows !== this.props.smartArrows ||
559569
prevProps.breaks !== this.props.breaks ||
560570
prevProps.lineThroughCheckbox !== this.props.lineThroughCheckbox
@@ -632,7 +642,7 @@ export default class MarkdownPreview extends React.Component {
632642

633643
this.getWindow().document.getElementById(
634644
'codeTheme'
635-
).href = this.GetCodeThemeLink(codeBlockTheme)
645+
).href = this.getCodeThemeLink(codeBlockTheme)
636646
this.getWindow().document.getElementById('style').innerHTML = buildStyle(
637647
fontFamily,
638648
fontSize,
@@ -645,14 +655,12 @@ export default class MarkdownPreview extends React.Component {
645655
)
646656
}
647657

648-
GetCodeThemeLink (name) {
658+
getCodeThemeLink (name) {
649659
const theme = consts.THEMES.find(theme => theme.name === name)
650660

651-
if (theme) {
652-
return `${appPath}/${theme.path}`
653-
} else {
654-
return `${appPath}/node_modules/codemirror/theme/elegant.css`
655-
}
661+
return theme != null
662+
? theme.path
663+
: `${appPath}/node_modules/codemirror/theme/elegant.css`
656664
}
657665

658666
rewriteIframe () {
@@ -678,7 +686,8 @@ export default class MarkdownPreview extends React.Component {
678686
showCopyNotification,
679687
storagePath,
680688
noteKey,
681-
sanitize
689+
sanitize,
690+
mermaidHTMLLabel
682691
} = this.props
683692
let { value, codeBlockTheme } = this.props
684693

@@ -820,7 +829,7 @@ export default class MarkdownPreview extends React.Component {
820829
_.forEach(
821830
this.refs.root.contentWindow.document.querySelectorAll('.mermaid'),
822831
el => {
823-
mermaidRender(el, htmlTextHelper.decodeEntities(el.innerHTML), theme)
832+
mermaidRender(el, htmlTextHelper.decodeEntities(el.innerHTML), theme, mermaidHTMLLabel)
824833
}
825834
)
826835

@@ -870,6 +879,12 @@ export default class MarkdownPreview extends React.Component {
870879
this.setImgOnClickEventHelper(img, rect)
871880
imgObserver.observe(parentEl, config)
872881
}
882+
883+
const aList = markdownPreviewIframe.contentWindow.document.body.querySelectorAll('a')
884+
for (const a of aList) {
885+
a.removeEventListener('click', this.linkClickHandler)
886+
a.addEventListener('click', this.linkClickHandler)
887+
}
873888
}
874889

875890
setImgOnClickEventHelper (img, rect) {
@@ -998,11 +1013,11 @@ export default class MarkdownPreview extends React.Component {
9981013

9991014
if (!rawHref) return // not checked href because parser will create file://... string for [empty link]()
10001015

1001-
const regexNoteInternalLink = /.*[main.\w]*.html#/
1002-
1003-
if (regexNoteInternalLink.test(href)) {
1004-
const targetId = mdurl.encode(linkHash)
1005-
const targetElement = this.refs.root.contentWindow.document.querySelector(
1016+
const extractId = /(main.html)?#/
1017+
const regexNoteInternalLink = new RegExp(`${extractId.source}(.+)`)
1018+
if (regexNoteInternalLink.test(linkHash)) {
1019+
const targetId = mdurl.encode(linkHash.replace(extractId, ''))
1020+
const targetElement = this.refs.root.contentWindow.document.getElementById(
10061021
targetId
10071022
)
10081023

browser/components/MarkdownSplitEditor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ class MarkdownSplitEditor extends React.Component {
150150
onMouseMove={e => this.handleMouseMove(e)}
151151
onMouseUp={e => this.handleMouseUp(e)}>
152152
<CodeEditor
153-
styleName='codeEditor'
154153
ref='code'
155154
width={this.state.codeEditorWidthInPercent + '%'}
156155
mode='Boost Flavored Markdown'
@@ -160,6 +159,7 @@ class MarkdownSplitEditor extends React.Component {
160159
fontFamily={config.editor.fontFamily}
161160
fontSize={editorFontSize}
162161
displayLineNumbers={config.editor.displayLineNumbers}
162+
lineWrapping
163163
matchingPairs={config.editor.matchingPairs}
164164
matchingTriples={config.editor.matchingTriples}
165165
explodingPairs={config.editor.explodingPairs}
@@ -187,7 +187,6 @@ class MarkdownSplitEditor extends React.Component {
187187
</div>
188188
<MarkdownPreview
189189
style={previewStyle}
190-
styleName='preview'
191190
theme={config.ui.theme}
192191
keyMap={config.editor.keyMap}
193192
fontSize={config.preview.fontSize}
@@ -200,6 +199,7 @@ class MarkdownSplitEditor extends React.Component {
200199
smartArrows={config.preview.smartArrows}
201200
breaks={config.preview.breaks}
202201
sanitize={config.preview.sanitize}
202+
mermaidHTMLLabel={config.preview.mermaidHTMLLabel}
203203
ref='preview'
204204
tabInde='0'
205205
value={value}

browser/components/MarkdownSplitEditor.styl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,30 @@
88
top -2px
99
width 0
1010
z-index 0
11+
border-left 1px solid $ui-borderColor
1112
.slider-hitbox
1213
absolute top bottom left right
1314
width 7px
1415
left -3px
1516
z-index 10
1617
cursor col-resize
18+
19+
body[data-theme="dark"]
20+
.root
21+
.slider
22+
border-left 1px solid $ui-dark-borderColor
23+
24+
body[data-theme="solarized-dark"]
25+
.root
26+
.slider
27+
border-left 1px solid $ui-solarized-dark-borderColor
28+
29+
body[data-theme="monokai"]
30+
.root
31+
.slider
32+
border-left 1px solid $ui-monokai-borderColor
33+
34+
body[data-theme="dracula"]
35+
.root
36+
.slider
37+
border-left 1px solid $ui-dracula-borderColor

browser/components/ModalEscButton.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const ModalEscButton = ({
88
}) => (
99
<button styleName='escButton' onClick={handleEscButtonClick}>
1010
<div styleName='esc-mark'>×</div>
11-
<div styleName='esc-text'>esc</div>
11+
<div>esc</div>
1212
</button>
1313
)
1414

browser/components/NoteItem.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,14 @@ NoteItem.propTypes = {
148148
tags: PropTypes.array,
149149
isStarred: PropTypes.bool.isRequired,
150150
isTrashed: PropTypes.bool.isRequired,
151-
blog: {
151+
blog: PropTypes.shape({
152152
blogLink: PropTypes.string,
153153
blogId: PropTypes.number
154-
}
154+
})
155155
}),
156156
handleNoteClick: PropTypes.func.isRequired,
157157
handleNoteContextMenu: PropTypes.func.isRequired,
158-
handleDragStart: PropTypes.func.isRequired,
159-
handleDragEnd: PropTypes.func.isRequired
158+
handleDragStart: PropTypes.func.isRequired
160159
}
161160

162161
export default CSSModules(NoteItem, styles)

browser/components/SideNavFilter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ SideNavFilter.propTypes = {
7474
isStarredActive: PropTypes.bool.isRequired,
7575
isTrashedActive: PropTypes.bool.isRequired,
7676
handleStarredButtonClick: PropTypes.func.isRequired,
77-
handleTrashdButtonClick: PropTypes.func.isRequired
77+
handleTrashedButtonClick: PropTypes.func.isRequired
7878
}
7979

8080
export default CSSModules(SideNavFilter, styles)

browser/components/SnippetTab.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class SnippetTab extends React.Component {
114114
>
115115
{snippet.name.trim().length > 0
116116
? snippet.name
117-
: <span styleName='button-unnamed'>
117+
: <span>
118118
{i18n.__('Unnamed')}
119119
</span>
120120
}

browser/components/TodoProcess.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ const TodoProcess = ({
2525
)
2626

2727
TodoProcess.propTypes = {
28-
todoStatus: {
28+
todoStatus: PropTypes.exact({
2929
total: PropTypes.number.isRequired,
3030
completed: PropTypes.number.isRequired
31-
}
31+
})
3232
}
3333

3434
export default CSSModules(TodoProcess, styles)

0 commit comments

Comments
 (0)