doing 2.1.60 → 2.1.61

Sign up to get free protection for your applications and to get access to all the features.
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