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.
@@ -1,11 +1,20 @@
1
1
  const moment = require('moment');
2
- module.exports = {
3
- getIsoDateWithOffset: function ({date, config}) {
4
- const momentDate = moment(date);
5
- if (momentDate.isDST() && config && config.noDST) {
6
- const offset = momentDate.utcOffset();
7
- momentDate.utcOffset(offset - 60);
8
- }
9
- return momentDate.format();
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
  }
@@ -0,0 +1,10 @@
1
+ const chrono = require('chrono-node')
2
+
3
+ module.exports = {
4
+ replaceDateLanguage(text, asDate) {
5
+ return text.replace(/\(?\${(.*?)}\)?/g, (match, p1) => {
6
+ const date = chrono.parseDate(p1)
7
+ return date ? date.toISOString() : p1
8
+ })
9
+ }
10
+ }
@@ -0,0 +1,6 @@
1
+ YAML = require('js-yaml'),
2
+
3
+ module.exports = {
4
+ dumpYAML: YAML.dump,
5
+ loadYAML: YAML.load,
6
+ }
package/lib/card.js CHANGED
@@ -117,7 +117,7 @@ module.exports = function newCard(task, _project, dontParse) {
117
117
 
118
118
  get defaultData() {
119
119
  return {
120
- timestamp: getIsoDateWithOffset({config: project.config}),
120
+ timestamp: getIsoDateWithOffset(),
121
121
  ..._pick(
122
122
  this,
123
123
  ...['beforeText',
@@ -1,5 +1,5 @@
1
1
  const DefaultApplicationContext = require('./adapters/ApplicationContext')
2
- const { loadYAML, dumpYAML } = require('../tools')
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
@@ -94,10 +94,6 @@ class Config {
94
94
  return _get(this, 'settings.cards.addCompletedMeta', false)
95
95
  }
96
96
 
97
- get noDST() {
98
- return _get(this, 'settings.noDST', false)
99
- }
100
-
101
97
  get markdownOnly() {
102
98
  return this.settings.markdownOnly
103
99
  }
@@ -1,13 +1,11 @@
1
- const { loadYAML } = require("./tools")
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({ config })
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({date: due, config})
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
- // DOING This should be split out by type (code, markdown, etc)
791
+ // TODO This should be split out by type (code, markdown, etc)
792
792
  // #urgent
793
- // <!-- order:-10 -->
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 = tools.dumpYAML(data)
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 = tools.loadYAML(configData.toString())
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
- resolve(file)
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
- file.setContent(`${fileContent}${sep}${appendContent}${"\n".repeat(2)}`)
1119
- this.writeAndExtract(file, true, cb)
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 = tools.replaceDateLanguage(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 = tools.replaceDateLanguage(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
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imdone-core",
3
- "version": "1.41.0",
3
+ "version": "1.42.0",
4
4
  "description": "imdone-core",
5
5
  "main": "index.js",
6
6
  "bin": {