doing 2.1.60 → 2.1.61

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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +1 -1
  5. data/docs/doc/Array.html +1 -1
  6. data/docs/doc/BooleanTermParser/Clause.html +1 -1
  7. data/docs/doc/BooleanTermParser/Operator.html +1 -1
  8. data/docs/doc/BooleanTermParser/Query.html +1 -1
  9. data/docs/doc/BooleanTermParser/QueryParser.html +1 -1
  10. data/docs/doc/BooleanTermParser/QueryTransformer.html +1 -1
  11. data/docs/doc/BooleanTermParser.html +1 -1
  12. data/docs/doc/Doing/ArrayCleanup.html +1 -1
  13. data/docs/doc/Doing/ArrayNestedHash.html +1 -1
  14. data/docs/doc/Doing/ArrayTags.html +1 -1
  15. data/docs/doc/Doing/CSVExport.html +1 -1
  16. data/docs/doc/Doing/CalendarImport.html +1 -1
  17. data/docs/doc/Doing/Change.html +1 -1
  18. data/docs/doc/Doing/Changes.html +1 -1
  19. data/docs/doc/Doing/ChronifyArray.html +1 -1
  20. data/docs/doc/Doing/ChronifyNumeric.html +1 -1
  21. data/docs/doc/Doing/ChronifyString.html +1 -1
  22. data/docs/doc/Doing/Color.html +1 -1
  23. data/docs/doc/Doing/Completion/BashCompletions.html +1 -1
  24. data/docs/doc/Doing/Completion/FigCompletions.html +1 -1
  25. data/docs/doc/Doing/Completion/FishCompletions.html +1 -1
  26. data/docs/doc/Doing/Completion/StringUtils.html +1 -1
  27. data/docs/doc/Doing/Completion/ZshCompletions.html +1 -1
  28. data/docs/doc/Doing/Completion.html +1 -1
  29. data/docs/doc/Doing/Configuration.html +1 -1
  30. data/docs/doc/Doing/DayOneRenderer.html +1 -1
  31. data/docs/doc/Doing/DayoneExport.html +1 -1
  32. data/docs/doc/Doing/DoingExport.html +1 -1
  33. data/docs/doc/Doing/DoingImport.html +1 -1
  34. data/docs/doc/Doing/Entry.html +1 -1
  35. data/docs/doc/Doing/Errors/DoingNoTraceError.html +1 -1
  36. data/docs/doc/Doing/Errors/DoingRuntimeError.html +1 -1
  37. data/docs/doc/Doing/Errors/DoingStandardError.html +1 -1
  38. data/docs/doc/Doing/Errors/EmptyInput.html +1 -1
  39. data/docs/doc/Doing/Errors/HistoryLimitError.html +1 -1
  40. data/docs/doc/Doing/Errors/InvalidPlugin.html +1 -1
  41. data/docs/doc/Doing/Errors/MissingBackupFile.html +1 -1
  42. data/docs/doc/Doing/Errors/NoResults.html +1 -1
  43. data/docs/doc/Doing/Errors/PluginException.html +1 -1
  44. data/docs/doc/Doing/Errors/UserCancelled.html +1 -1
  45. data/docs/doc/Doing/Errors/WrongCommand.html +1 -1
  46. data/docs/doc/Doing/Errors.html +1 -1
  47. data/docs/doc/Doing/HTMLExport.html +1 -1
  48. data/docs/doc/Doing/Hooks.html +1 -1
  49. data/docs/doc/Doing/Item.html +1 -1
  50. data/docs/doc/Doing/ItemDates.html +1 -1
  51. data/docs/doc/Doing/ItemQuery.html +1 -1
  52. data/docs/doc/Doing/ItemState.html +1 -1
  53. data/docs/doc/Doing/ItemTags.html +1 -1
  54. data/docs/doc/Doing/Items.html +1 -1
  55. data/docs/doc/Doing/JSONExport.html +1 -1
  56. data/docs/doc/Doing/JSONImport.html +1 -1
  57. data/docs/doc/Doing/Logger.html +1 -1
  58. data/docs/doc/Doing/MarkdownExport.html +1 -1
  59. data/docs/doc/Doing/Note.html +1 -1
  60. data/docs/doc/Doing/Pager.html +1 -1
  61. data/docs/doc/Doing/Plugins.html +1 -1
  62. data/docs/doc/Doing/Prompt.html +1 -1
  63. data/docs/doc/Doing/PromptChoose.html +1 -1
  64. data/docs/doc/Doing/PromptFZF.html +1 -1
  65. data/docs/doc/Doing/PromptInput.html +1 -1
  66. data/docs/doc/Doing/PromptSTD.html +1 -1
  67. data/docs/doc/Doing/PromptYN.html +1 -1
  68. data/docs/doc/Doing/Section.html +1 -1
  69. data/docs/doc/Doing/StringHighlight.html +1 -1
  70. data/docs/doc/Doing/StringNormalize.html +1 -1
  71. data/docs/doc/Doing/StringQuery.html +1 -1
  72. data/docs/doc/Doing/StringTags.html +1 -1
  73. data/docs/doc/Doing/StringTransform.html +1 -1
  74. data/docs/doc/Doing/StringTruncate.html +1 -1
  75. data/docs/doc/Doing/StringURL.html +1 -1
  76. data/docs/doc/Doing/SymbolNormalize.html +1 -1
  77. data/docs/doc/Doing/TaskPaperExport.html +1 -1
  78. data/docs/doc/Doing/TemplateExport.html +1 -1
  79. data/docs/doc/Doing/TemplateString.html +1 -1
  80. data/docs/doc/Doing/TimingImport.html +1 -1
  81. data/docs/doc/Doing/Types.html +1 -1
  82. data/docs/doc/Doing/Util/Backup.html +1 -1
  83. data/docs/doc/Doing/Util.html +1 -1
  84. data/docs/doc/Doing/Version.html +1 -1
  85. data/docs/doc/Doing/WWID.html +1 -1
  86. data/docs/doc/Doing.html +2 -2
  87. data/docs/doc/FalseClass.html +1 -1
  88. data/docs/doc/GLI/Commands/Help.html +1 -1
  89. data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +1 -1
  90. data/docs/doc/GLI/Commands.html +1 -1
  91. data/docs/doc/GLI.html +1 -1
  92. data/docs/doc/Hash.html +1 -1
  93. data/docs/doc/Numeric.html +1 -1
  94. data/docs/doc/Object.html +1 -1
  95. data/docs/doc/PhraseParser/Operator.html +1 -1
  96. data/docs/doc/PhraseParser/PhraseClause.html +1 -1
  97. data/docs/doc/PhraseParser/Query.html +1 -1
  98. data/docs/doc/PhraseParser/QueryParser.html +1 -1
  99. data/docs/doc/PhraseParser/QueryTransformer.html +1 -1
  100. data/docs/doc/PhraseParser/TermClause.html +1 -1
  101. data/docs/doc/PhraseParser.html +1 -1
  102. data/docs/doc/Status.html +1 -1
  103. data/docs/doc/String.html +1 -1
  104. data/docs/doc/Symbol.html +1 -1
  105. data/docs/doc/Time.html +1 -1
  106. data/docs/doc/TrueClass.html +1 -1
  107. data/docs/doc/_index.html +1 -1
  108. data/docs/doc/file.README.html +2 -2
  109. data/docs/doc/index.html +2 -2
  110. data/docs/doc/top-level-namespace.html +1 -1
  111. data/doing.rdoc +1 -1
  112. data/lib/doing/version.rb +1 -1
  113. data/lib/doing/wwid/timers.rb +1 -156
  114. data/lib/templates/doing.css +2 -2
  115. metadata +1 -1
@@ -14,162 +14,7 @@ module Doing
14
14
  def tag_times(format: :text, sort_by: :time, sort_order: :asc)
15
15
  return '' if @timers.empty?
16
16
 
17
- max = @timers.keys.sort_by(&:length).reverse[0].length + 1
18
-
19
- total = @timers.delete('All')
20
-
21
- tags_data = @timers.delete_if { |_k, v| v.zero? }
22
- sorted_tags_data = if sort_by.normalize_tag_sort == :name
23
- tags_data.sort_by { |k, _v| k }
24
- else
25
- tags_data.sort_by { |_k, v| v }
26
- end
27
-
28
- sorted_tags_data.reverse! if sort_order.normalize_order == :asc
29
- case format
30
- when :html
31
-
32
- output = <<EOHEAD
33
- <table>
34
- <caption id="tagtotals">Tag Totals</caption>
35
- <colgroup>
36
- <col style="text-align:left;"/>
37
- <col style="text-align:left;"/>
38
- </colgroup>
39
- <thead>
40
- <tr>
41
- <th style="text-align:left;">project</th>
42
- <th style="text-align:left;">time</th>
43
- </tr>
44
- </thead>
45
- <tbody>
46
- EOHEAD
47
- sorted_tags_data.reverse.each do |k, v|
48
- if v.positive?
49
- output += "<tr><td style='text-align:left;'>#{k}</td><td style='text-align:left;'>#{v.time_string(format: :clock)}</td></tr>\n"
50
- end
51
- end
52
- tail = <<EOTAIL
53
- <tr>
54
- <td style="text-align:left;" colspan="2"></td>
55
- </tr>
56
- </tbody>
57
- <tfoot>
58
- <tr>
59
- <td style="text-align:left;"><strong>Total</strong></td>
60
- <td style="text-align:left;">#{total.time_string(format: :clock)}</td>
61
- </tr>
62
- </tfoot>
63
- </table>
64
- EOTAIL
65
- output + tail
66
- when :markdown
67
- pad = sorted_tags_data.map { |k, _| k }.group_by(&:size).max.last[0].length
68
- pad = 7 if pad < 7
69
- output = <<~EOHEADER
70
- | #{' ' * (pad - 7)}project | time |
71
- | #{'-' * (pad - 1)}: | :------- |
72
- EOHEADER
73
- sorted_tags_data.reverse.each do |k, v|
74
- if v.positive?
75
- output += "| #{' ' * (pad - k.length)}#{k} | #{v.time_string(format: :clock)} |\n"
76
- end
77
- end
78
- tail = '[Tag Totals]'
79
- output + tail
80
- when :json
81
- output = []
82
- sorted_tags_data.reverse.each do |k, v|
83
- output << {
84
- 'tag' => k,
85
- 'seconds' => v,
86
- 'formatted' => v.time_string(format: :clock)
87
- }
88
- end
89
- output
90
- when :human
91
- output = []
92
- sorted_tags_data.reverse.each do |k, v|
93
- spacer = ''
94
- (max - k.length).times do
95
- spacer += ' '
96
- end
97
- output.push("┃ #{spacer}#{k}:#{v.time_string(format: :hm)} ┃")
98
- end
99
-
100
- header = '┏━━ Tag Totals '
101
- (max - 2).times { header += '━' }
102
- header += '┓'
103
- footer = '┗'
104
- (max + 12).times { footer += '━' }
105
- footer += '┛'
106
- divider = '┣'
107
- (max + 12).times { divider += '━' }
108
- divider += '┫'
109
- output = output.empty? ? '' : "\n#{header}\n#{output.join("\n")}"
110
- output += "\n#{divider}"
111
- spacer = ''
112
- (max - 6).times do
113
- spacer += ' '
114
- end
115
- total_time = total.time_string(format: :hm)
116
- total = "┃ #{spacer}total: "
117
- total += total_time
118
- total += ' ┃'
119
- output += "\n#{total}"
120
- output += "\n#{footer}"
121
- output
122
- else
123
- output = []
124
- sorted_tags_data.reverse.each do |k, v|
125
- spacer = ''
126
- (max - k.length).times do
127
- spacer += ' '
128
- end
129
- output.push("#{k}:#{spacer}#{v.time_string(format: :clock)}")
130
- end
131
-
132
- output = output.empty? ? '' : "\n--- Tag Totals ---\n#{output.join("\n")}"
133
- output += "\n\nTotal tracked: #{total.time_string(format: :clock)}\n"
134
- output
135
- end
136
- end
137
-
138
- ##
139
- ## Gets the interval between entry's start
140
- ## date and @done date
141
- ##
142
- ## @param item [Item] The entry
143
- ## @param formatted [Boolean] Return human readable
144
- ## time (default seconds)
145
- ## @param record [Boolean] Add the interval to the
146
- ## total for each tag
147
- ##
148
- ## @return Interval in seconds, or [d, h, m] array if
149
- ## formatted is true. False if no end date or
150
- ## interval is 0
151
- ##
152
- def get_interval(item, formatted: true, record: true)
153
- if item.interval
154
- seconds = item.interval
155
- record_tag_times(item, seconds) if record
156
- return seconds.positive? ? seconds : false unless formatted
157
-
158
- return seconds.positive? ? seconds.time_string(format: :clock) : false
159
- end
160
-
161
- false
162
- end##
163
- ## Get total elapsed time for all tags in
164
- ## selection
165
- ##
166
- ## @param format [String] return format (html,
167
- ## json, or text)
168
- ## @param sort_by [Symbol] Sort by :name or :time
169
- ## @param sort_order [Symbol] The sort order (:asc or :desc)
170
- ##
171
- def tag_times(format: :text, sort_by: :time, sort_order: :asc)
172
- return '' if @timers.empty?
17
+ @timers.delete('meanwhile')
173
18
 
174
19
  max = @timers.keys.sort_by(&:length).reverse[0].length + 1
175
20
 
@@ -50,7 +50,7 @@ article > ul > li:hover {
50
50
  .date {
51
51
  color: #7d9ca2;
52
52
  font-size: 17px;
53
- padding: 15px 1ch 0 0;
53
+ padding: 3px 1ch 0 0;
54
54
  text-align: right;
55
55
  white-space: nowrap;
56
56
  transition: color .2s ease-in-out;
@@ -59,7 +59,7 @@ article > ul > li:hover {
59
59
  .entry {
60
60
  border-left: solid 1px #ccc;
61
61
  line-height: 1.2;
62
- padding: 10px 10px 10px 3ch;
62
+ padding: 2px 10px 2px 3ch;
63
63
  text-indent: -2ch;
64
64
  }
65
65
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doing
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.60
4
+ version: 2.1.61
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra