imdone-core 1.41.0 → 1.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/adapters/date-time.js +17 -8
- package/lib/adapters/parsers/DateLanguageParser.js +10 -0
- package/lib/adapters/yaml.js +6 -0
- package/lib/card.js +1 -1
- package/lib/cli/ProjectConfigFactory.js +1 -1
- package/lib/config.js +0 -4
- package/lib/default-settings.js +1 -4
- package/lib/file.js +4 -4
- package/lib/mixins/repo-fs-store.js +5 -3
- package/lib/project.js +11 -18
- package/lib/repository.js +11 -5
- package/lib/tools.js +0 -10
- package/package.json +1 -1
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
const moment = require('moment');
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
let innerNoDST = false;
|
|
3
|
+
|
|
4
|
+
function setNoDST(noDST) {
|
|
5
|
+
innerNoDST = noDST;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function getIsoDateWithOffset (date) {
|
|
9
|
+
const momentDate = moment(date);
|
|
10
|
+
if (momentDate.isDST() && innerNoDST) {
|
|
11
|
+
const offset = momentDate.utcOffset();
|
|
12
|
+
momentDate.utcOffset(offset - 60);
|
|
10
13
|
}
|
|
14
|
+
return momentDate.format();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = {
|
|
18
|
+
setNoDST,
|
|
19
|
+
getIsoDateWithOffset
|
|
11
20
|
}
|
package/lib/card.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const DefaultApplicationContext = require('./adapters/ApplicationContext')
|
|
2
|
-
const { loadYAML, dumpYAML } = require('../
|
|
2
|
+
const { loadYAML, dumpYAML } = require('../adapters/yaml')
|
|
3
3
|
const Config = require('../config')
|
|
4
4
|
const { readFile, mkdir, cp, rm, writeFile, access } = require('fs').promises
|
|
5
5
|
const { resolve } = path = require('path')
|
package/lib/config.js
CHANGED
package/lib/default-settings.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
const { loadYAML } = require(
|
|
1
|
+
const { loadYAML } = require('./adapters/yaml')
|
|
2
2
|
|
|
3
3
|
const defaultSettingsString = `openIn: default #override
|
|
4
|
-
editorTheme: blackboard
|
|
5
4
|
journalType: New File
|
|
6
5
|
journalPath: imdone-tasks #override
|
|
7
6
|
appendNewCardsTo: imdone-tasks.md
|
|
8
7
|
newCardSyntax: HASHTAG #override
|
|
9
8
|
replaceSpacesWith: '-' #override
|
|
10
|
-
noDST: false
|
|
11
9
|
plugins:
|
|
12
10
|
devMode: false
|
|
13
11
|
cards:
|
|
@@ -31,7 +29,6 @@ cards:
|
|
|
31
29
|
addNewCardsToTop: true #override
|
|
32
30
|
showTagsAndMeta: true #override
|
|
33
31
|
journalTemplate: #override
|
|
34
|
-
theme: 'dark'
|
|
35
32
|
markdownOnly: false #override
|
|
36
33
|
`
|
|
37
34
|
module.exports = loadYAML(defaultSettingsString)
|
package/lib/file.js
CHANGED
|
@@ -149,7 +149,7 @@ File.addCompleted = function ({ task, content, config }) {
|
|
|
149
149
|
if (task.list !== doneList) return content
|
|
150
150
|
if (task.completed || task.meta.completed) return content
|
|
151
151
|
if (content.includes(`completed${config.getMetaSep()}`)) return content
|
|
152
|
-
const now = getIsoDateWithOffset(
|
|
152
|
+
const now = getIsoDateWithOffset()
|
|
153
153
|
content = task.addToLastCommentInContent(
|
|
154
154
|
content,
|
|
155
155
|
`completed${config.getMetaSep()}${now}`,
|
|
@@ -167,7 +167,7 @@ File.parseDueDate = function (config, text) {
|
|
|
167
167
|
try {
|
|
168
168
|
const due = chrono.parseDate(dueMatch, new Date(), {forwardDate: true})
|
|
169
169
|
if (!due) return dueMatch
|
|
170
|
-
dueString = getIsoDateWithOffset(
|
|
170
|
+
dueString = getIsoDateWithOffset(due)
|
|
171
171
|
return `${p1.toLowerCase()}${config.getMetaSep()}${dueString}`
|
|
172
172
|
} catch (e) {
|
|
173
173
|
console.log(`Unable to parse due date for ${text}`)
|
|
@@ -788,9 +788,9 @@ const trimBlankLines = File.trimBlankLines = function (content, isCodeFile) {
|
|
|
788
788
|
}
|
|
789
789
|
|
|
790
790
|
File.prototype.modifyDescription = function (task, config) {
|
|
791
|
-
//
|
|
791
|
+
// TODO This should be split out by type (code, markdown, etc)
|
|
792
792
|
// #urgent
|
|
793
|
-
// <!-- order:-
|
|
793
|
+
// <!-- order:-70 -->
|
|
794
794
|
const taskStart = this.getLinePos(task.line)
|
|
795
795
|
const descStart = this.getLinePos(task.line + 1)
|
|
796
796
|
const contentWithTask = this.getContent().substring(taskStart)
|
|
@@ -22,7 +22,9 @@ var _path = require('path'),
|
|
|
22
22
|
_ignore = require('ignore'),
|
|
23
23
|
fastSort = require('fast-sort/dist/sort.js'),
|
|
24
24
|
Repository = require('../repository'),
|
|
25
|
-
buildMigrateConfig = require('../migrate-config')
|
|
25
|
+
buildMigrateConfig = require('../migrate-config'),
|
|
26
|
+
{ loadYAML, dumpYAML } = require('../adapters/yaml')
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
module.exports = mixin
|
|
28
30
|
|
|
@@ -196,7 +198,7 @@ function mixin(repo, fs = require('fs')) {
|
|
|
196
198
|
delete data.cardPropertiesFunction
|
|
197
199
|
delete data.path
|
|
198
200
|
if (data.lists) data.lists.forEach((list) => delete list.tasks)
|
|
199
|
-
var yaml =
|
|
201
|
+
var yaml = dumpYAML(data)
|
|
200
202
|
if (exists) {
|
|
201
203
|
fs.writeFile(file, yaml, _cb)
|
|
202
204
|
} else {
|
|
@@ -277,7 +279,7 @@ function mixin(repo, fs = require('fs')) {
|
|
|
277
279
|
const configData = fs.readFileSync(filePath, 'utf-8')
|
|
278
280
|
let configLike = {}
|
|
279
281
|
try {
|
|
280
|
-
configLike =
|
|
282
|
+
configLike = loadYAML(configData.toString())
|
|
281
283
|
Repository.trimFunctionsInSettings(configLike)
|
|
282
284
|
if (configLike.exclude) delete configLike.exclude
|
|
283
285
|
if (configLike.watcher) delete configLike.watcher
|
package/lib/project.js
CHANGED
|
@@ -443,34 +443,27 @@ module.exports = class WorkerProject extends Project {
|
|
|
443
443
|
const filePath = cardData.path
|
|
444
444
|
if (addTemplate) content += cardData.template
|
|
445
445
|
|
|
446
|
-
content = this.addOrderMetaToContent(content, list)
|
|
447
446
|
content = this.addTagsToContent(tags, content)
|
|
448
447
|
content = this.addContextsToContent(contexts, content)
|
|
449
448
|
content = this.addMetaToContent(meta, content)
|
|
450
449
|
|
|
451
450
|
return new Promise((resolve, reject) => {
|
|
452
|
-
this.repo.addTaskToFile(filePath, list, content, (err, file) => {
|
|
451
|
+
this.repo.addTaskToFile(filePath, list, content, (err, file, task) => {
|
|
453
452
|
if (err) return reject(err)
|
|
454
|
-
|
|
453
|
+
|
|
454
|
+
const newList = task.list
|
|
455
|
+
const list = this.lists.find(l => l.name === newList)
|
|
456
|
+
const newPos = this.config.isAddNewCardsToTop() ? 0 : list.tasks.length - 1
|
|
457
|
+
|
|
458
|
+
this.repo.moveTask({ task, newList, newPos }, (err) => {
|
|
459
|
+
if (err) return reject(err)
|
|
460
|
+
|
|
461
|
+
resolve({ file, task })
|
|
462
|
+
})
|
|
455
463
|
})
|
|
456
464
|
})
|
|
457
465
|
}
|
|
458
466
|
|
|
459
|
-
addOrderMetaToContent(content, _list) {
|
|
460
|
-
const list = this.lists.find(l => l.name === _list)
|
|
461
|
-
let order
|
|
462
|
-
if (this.config.isAddNewCardsToTop()) {
|
|
463
|
-
order = list.tasks.length
|
|
464
|
-
? list.tasks[0].order - 1
|
|
465
|
-
: 0
|
|
466
|
-
} else {
|
|
467
|
-
order = list.tasks.length
|
|
468
|
-
? list.tasks[list.tasks.length - 1].order + 1
|
|
469
|
-
: 0
|
|
470
|
-
}
|
|
471
|
-
return Task.addToLastCommentInContent(content, `order${this.config.getMetaSep()}${order}`, this.config.isMetaNewLine())
|
|
472
|
-
}
|
|
473
|
-
|
|
474
467
|
addMetaToContent(meta, content) {
|
|
475
468
|
if (meta && meta.length > 0) {
|
|
476
469
|
let metaContent = ''
|
package/lib/repository.js
CHANGED
|
@@ -36,7 +36,8 @@ var _get = require('lodash.get'),
|
|
|
36
36
|
JSONfns = require('json-fns'),
|
|
37
37
|
functionRegex = require('function-regex'),
|
|
38
38
|
Task = require('./task'),
|
|
39
|
-
newCard = require('./card')
|
|
39
|
+
newCard = require('./card'),
|
|
40
|
+
{ replaceDateLanguage } = require('./adapters/parsers/DateLanguageParser')
|
|
40
41
|
|
|
41
42
|
const appContext = require('./context/ApplicationContext')
|
|
42
43
|
|
|
@@ -1115,8 +1116,13 @@ Repository.prototype.appendTask = function({file, content, list}, cb) {
|
|
|
1115
1116
|
appendContent = `${taskPrefix}#${list}${inLineOrder} ${text}${eol.lf}${taskContent}`
|
|
1116
1117
|
}
|
|
1117
1118
|
appendContent = File.trimBlankLines(appendContent)
|
|
1118
|
-
|
|
1119
|
-
|
|
1119
|
+
fileContent = `${fileContent}${sep}`
|
|
1120
|
+
file.setContent(`${fileContent}${appendContent}${"\n".repeat(2)}`)
|
|
1121
|
+
this.writeAndExtract(file, true, (err, file) => {
|
|
1122
|
+
if (err) return cb(err)
|
|
1123
|
+
const task = file.getTasks().find(task => task.text === text && task.list === list)
|
|
1124
|
+
cb(null, file, task)
|
|
1125
|
+
})
|
|
1120
1126
|
}
|
|
1121
1127
|
|
|
1122
1128
|
Repository.prototype.addTaskToFile = function (filePath, list, content, cb) {
|
|
@@ -1610,7 +1616,7 @@ Repository.parseSortFromMongoQuery = function (mongoQuery) {
|
|
|
1610
1616
|
}
|
|
1611
1617
|
|
|
1612
1618
|
Repository.sortByQuery = function (tasks, queryString = '') {
|
|
1613
|
-
queryString =
|
|
1619
|
+
queryString = replaceDateLanguage(queryString)
|
|
1614
1620
|
let { sort } = Repository.parseSortFromQueryString(queryString)
|
|
1615
1621
|
if (!sort || sort.length === 0) sort = DEFAULT_SORT
|
|
1616
1622
|
fastSort(tasks).by(sort)
|
|
@@ -1619,7 +1625,7 @@ Repository.sortByQuery = function (tasks, queryString = '') {
|
|
|
1619
1625
|
Repository.query = function (tasks, queryString = '') {
|
|
1620
1626
|
let query
|
|
1621
1627
|
let sort
|
|
1622
|
-
queryString =
|
|
1628
|
+
queryString = replaceDateLanguage(queryString)
|
|
1623
1629
|
const resp = Repository.parseSortFromQueryString(queryString)
|
|
1624
1630
|
try {
|
|
1625
1631
|
query = monquery(resp.queryString)
|
package/lib/tools.js
CHANGED
|
@@ -5,11 +5,9 @@ var _isFunction = require('lodash.isfunction'),
|
|
|
5
5
|
crypto = require('crypto'),
|
|
6
6
|
_path = require('path'),
|
|
7
7
|
markdown = require('markdown-it')().use(require('markdown-it-checkbox')),
|
|
8
|
-
YAML = require('js-yaml'),
|
|
9
8
|
fastSort = require('fast-sort/dist/sort.js'),
|
|
10
9
|
eol = require('eol'),
|
|
11
10
|
max_bytes = 512
|
|
12
|
-
const chrono = require('chrono-node')
|
|
13
11
|
|
|
14
12
|
function mkdirp(fs, path, mode, cb, position) {
|
|
15
13
|
if (_isFunction(mode)) {
|
|
@@ -255,15 +253,7 @@ module.exports = {
|
|
|
255
253
|
}
|
|
256
254
|
}
|
|
257
255
|
},
|
|
258
|
-
replaceDateLanguage(text, asDate) {
|
|
259
|
-
return text.replace(/\(?\${(.*?)}\)?/g, (match, p1) => {
|
|
260
|
-
const date = chrono.parseDate(p1)
|
|
261
|
-
return date ? date.toISOString() : p1
|
|
262
|
-
})
|
|
263
|
-
},
|
|
264
256
|
mkdirp: mkdirp,
|
|
265
|
-
dumpYAML: YAML.dump,
|
|
266
|
-
loadYAML: YAML.load,
|
|
267
257
|
sortTasks(tasks) {
|
|
268
258
|
return fastSort(tasks).asc([u => u.order, u => u.text])
|
|
269
259
|
},
|