Don't show save dialog for an empty/not changed document (#548)

* Don't show save dialog for an empty document

* Fix blank document was always encoded as LF
This commit is contained in:
Felix Häusler 2018-11-07 14:50:10 +01:00 committed by Ran Luo
parent 2e133e21e0
commit 72ef20edd8
3 changed files with 25 additions and 3 deletions

View File

@ -1,9 +1,10 @@
### 0.13.58 ### 0.13.61
**:butterfly:Optimization** **:butterfly:Optimization**
- Show tab bar when opening a new tab - Show tab bar when opening a new tab
- Use default bold (`CmdOrCtrl+B`) and italics (`CmdOrCtrl+I`) key binding (#346) - Use default bold (`CmdOrCtrl+B`) and italics (`CmdOrCtrl+I`) key binding (#346)
- Don't show save dialog for an empty document (#422)
**:beetle:Bug fix** **:beetle:Bug fix**
@ -14,6 +15,7 @@
- fix: #535 Application menu is not updated when switching windows - fix: #535 Application menu is not updated when switching windows
- fix #216 and #311 key binding issues on Linux and Windows - fix #216 and #311 key binding issues on Linux and Windows
- fix #546 paste issue in table - fix #546 paste issue in table
- fix: Blank document was always encoded as `LF`
### 0.13.50 ### 0.13.50

View File

@ -241,7 +241,7 @@ const actions = {
LISTEN_FOR_CLOSE ({ commit, state }) { LISTEN_FOR_CLOSE ({ commit, state }) {
ipcRenderer.on('AGANI::ask-for-close', e => { ipcRenderer.on('AGANI::ask-for-close', e => {
const unSavedFiles = state.tabs.filter(file => !(file.isSaved && /[^\n]/.test(file.markdown))) const unSavedFiles = state.tabs.filter(file => !file.isSaved)
.map(file => { .map(file => {
const { id, filename, pathname, markdown } = file const { id, filename, pathname, markdown } = file
const options = getOptionsFromState(file) const options = getOptionsFromState(file)
@ -421,12 +421,19 @@ const actions = {
const { pathname, markdown: oldMarkdown, id } = state.currentFile const { pathname, markdown: oldMarkdown, id } = state.currentFile
const options = getOptionsFromState(state.currentFile) const options = getOptionsFromState(state.currentFile)
commit('SET_MARKDOWN', markdown) commit('SET_MARKDOWN', markdown)
// ignore new line which is added if the editor text is empty (#422)
if (oldMarkdown.length === 0 && markdown.length === 1 && markdown[0] === '\n') {
return
}
// set word count // set word count
if (wordCount) commit('SET_WORD_COUNT', wordCount) if (wordCount) commit('SET_WORD_COUNT', wordCount)
// set cursor // set cursor
if (cursor) commit('SET_CURSOR', cursor) if (cursor) commit('SET_CURSOR', cursor)
// set history // set history
if (history) commit('SET_HISTORY', history) if (history) commit('SET_HISTORY', history)
// change save status/save to file only when the markdown changed! // change save status/save to file only when the markdown changed!
if (markdown !== oldMarkdown) { if (markdown !== oldMarkdown) {
if (projectTree) { if (projectTree) {

View File

@ -7,7 +7,7 @@ export const defaultFileState = {
markdown: '', markdown: '',
isUtf8BomEncoded: false, isUtf8BomEncoded: false,
lineEnding: 'lf', // lf or crlf lineEnding: 'lf', // lf or crlf
adjustLineEndingOnSave: false, adjustLineEndingOnSave: false, // convert editor buffer (LF) to CRLF when saving
textDirection: 'ltr', textDirection: 'ltr',
history: { history: {
stack: [], stack: [],
@ -45,6 +45,8 @@ export const getFileStateFromData = data => {
} = data } = data
const id = getUniqueId() const id = getUniqueId()
assertLineEnding(adjustLineEndingOnSave, lineEnding)
return Object.assign(fileState, { return Object.assign(fileState, {
id, id,
markdown, markdown,
@ -71,6 +73,7 @@ export const getBlankFileState = (tabs, lineEnding = 'lf', markdown = '') => {
return Object.assign(fileState, { return Object.assign(fileState, {
lineEnding, lineEnding,
adjustLineEndingOnSave: lineEnding.toLowerCase() === 'crlf',
id, id,
filename: `Untitled-${++untitleId}`, filename: `Untitled-${++untitleId}`,
markdown markdown
@ -81,6 +84,8 @@ export const getSingleFileState = ({ id = getUniqueId(), markdown, filename, pat
const fileState = JSON.parse(JSON.stringify(defaultFileState)) const fileState = JSON.parse(JSON.stringify(defaultFileState))
const { isUtf8BomEncoded, lineEnding, adjustLineEndingOnSave } = options const { isUtf8BomEncoded, lineEnding, adjustLineEndingOnSave } = options
assertLineEnding(adjustLineEndingOnSave, lineEnding)
return Object.assign(fileState, { return Object.assign(fileState, {
id, id,
markdown, markdown,
@ -91,3 +96,11 @@ export const getSingleFileState = ({ id = getUniqueId(), markdown, filename, pat
adjustLineEndingOnSave adjustLineEndingOnSave
}) })
} }
const assertLineEnding = (adjustLineEndingOnSave, lineEnding) => {
lineEnding = lineEnding.toLowerCase()
if ((adjustLineEndingOnSave && lineEnding !== 'crlf') ||
(!adjustLineEndingOnSave && lineEnding === 'crlf')) {
console.error('Assertion failed: Line ending is "CRLF" but document is saved as "LF".')
}
}