taskjuggler 0.0.3 → 0.0.4

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 (495) hide show
  1. data/benchmarks/UTF-8-Strings.rb +58 -0
  2. data/data/css/tjmanual.css +52 -0
  3. data/data/css/tjreport.css +195 -0
  4. data/data/icons/details.png +0 -0
  5. data/data/icons/flag-green.png +0 -0
  6. data/data/icons/flag-red.png +0 -0
  7. data/data/icons/flag-yellow.png +0 -0
  8. data/data/icons/resource.png +0 -0
  9. data/data/icons/resourcegroup.png +0 -0
  10. data/data/icons/task.png +0 -0
  11. data/data/icons/taskgroup.png +0 -0
  12. data/data/icons/trend-down.png +0 -0
  13. data/data/icons/trend-flat.png +0 -0
  14. data/data/icons/trend-up.png +0 -0
  15. data/data/scripts/wz_tooltip.js +1301 -0
  16. data/doc/classes/AppConfig.html +298 -230
  17. data/doc/classes/Arguments.html +8 -8
  18. data/doc/classes/Object.html +7 -7
  19. data/doc/classes/String.html +89 -89
  20. data/doc/classes/TaskJuggler.html +396 -264
  21. data/doc/classes/TaskJuggler/Account.html +18 -18
  22. data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
  23. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  24. data/doc/classes/TaskJuggler/Allocation.html +30 -30
  25. data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
  26. data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
  27. data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
  28. data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
  29. data/doc/classes/TaskJuggler/Booking.html +18 -18
  30. data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
  31. data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
  32. data/doc/classes/TaskJuggler/CSVFile.html +24 -24
  33. data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
  34. data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
  35. data/doc/classes/TaskJuggler/Charge.html +18 -18
  36. data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
  37. data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
  38. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
  39. data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
  40. data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
  41. data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
  42. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
  43. data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
  44. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  45. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  46. data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
  47. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  48. data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
  49. data/doc/classes/TaskJuggler/GanttChart.html +48 -48
  50. data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
  51. data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
  52. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
  53. data/doc/classes/TaskJuggler/GanttLine.html +24 -24
  54. data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
  55. data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
  56. data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
  57. data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
  58. data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
  59. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  60. data/doc/classes/TaskJuggler/Interval.html +57 -57
  61. data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
  62. data/doc/classes/TaskJuggler/JobInfo.html +68 -12
  63. data/doc/classes/TaskJuggler/Journal.html +266 -20
  64. data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
  65. data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
  66. data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
  67. data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
  68. data/doc/classes/TaskJuggler/Limits.html +36 -36
  69. data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
  70. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  71. data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
  72. data/doc/classes/TaskJuggler/Log.html +145 -107
  73. data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
  74. data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
  75. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
  76. data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
  77. data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
  78. data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
  79. data/doc/classes/TaskJuggler/Macro.html +6 -6
  80. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  81. data/doc/classes/TaskJuggler/MacroTable.html +37 -37
  82. data/doc/classes/TaskJuggler/Message.html +12 -12
  83. data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
  84. data/doc/classes/TaskJuggler/Navigator.html +110 -46
  85. data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
  86. data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
  87. data/doc/classes/TaskJuggler/Project.html +1158 -893
  88. data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
  89. data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
  90. data/doc/classes/TaskJuggler/PropertyList.html +225 -155
  91. data/doc/classes/TaskJuggler/PropertySet.html +375 -332
  92. data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
  93. data/doc/classes/TaskJuggler/Query.html +404 -139
  94. data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
  95. data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
  96. data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
  97. data/doc/classes/TaskJuggler/RealFormat.html +18 -18
  98. data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
  99. data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
  100. data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
  101. data/doc/classes/TaskJuggler/Report.html +66 -64
  102. data/doc/classes/TaskJuggler/ReportBase.html +112 -123
  103. data/doc/classes/TaskJuggler/ReportContext.html +43 -38
  104. data/doc/classes/TaskJuggler/ReportServer.html +320 -0
  105. data/doc/classes/TaskJuggler/ReportTable.html +42 -42
  106. data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
  107. data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
  108. data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
  109. data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
  110. data/doc/classes/TaskJuggler/Resource.html +12 -12
  111. data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
  112. data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
  113. data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
  114. data/doc/classes/TaskJuggler/RichText.html +64 -248
  115. data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
  116. data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
  117. data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
  118. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  119. data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
  120. data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
  121. data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
  122. data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
  123. data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
  124. data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
  125. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
  126. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  127. data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
  128. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
  129. data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
  130. data/doc/classes/TaskJuggler/Shift.html +18 -18
  131. data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
  132. data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
  133. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  134. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  135. data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
  136. data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
  137. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  138. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  139. data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
  140. data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
  141. data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
  142. data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
  143. data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
  144. data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
  145. data/doc/classes/TaskJuggler/TableReport.html +447 -468
  146. data/doc/classes/TaskJuggler/Task.html +12 -12
  147. data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
  148. data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
  149. data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
  150. data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
  151. data/doc/classes/TaskJuggler/TextParser.html +215 -194
  152. data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
  153. data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
  154. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
  155. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  156. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
  157. data/doc/classes/TaskJuggler/TextReport.html +77 -74
  158. data/doc/classes/TaskJuggler/TextScanner.html +294 -281
  159. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  160. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
  161. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
  162. data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
  163. data/doc/classes/TaskJuggler/TjException.html +6 -6
  164. data/doc/classes/TaskJuggler/TjTime.html +522 -513
  165. data/doc/classes/TaskJuggler/TjpExample.html +25 -25
  166. data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
  167. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
  168. data/doc/classes/TaskJuggler/UserManual.html +212 -213
  169. data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
  170. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
  171. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  172. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  173. data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
  174. data/doc/classes/TaskJuggler/XMLElement.html +86 -50
  175. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  176. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  177. data/doc/files/COPYING.html +1 -1
  178. data/doc/files/README.html +1 -1
  179. data/doc/files/lib/AccountScenario_rb.html +3 -2
  180. data/doc/files/lib/Account_rb.html +3 -2
  181. data/doc/files/lib/Allocation_rb.html +3 -2
  182. data/doc/files/lib/AppConfig_rb.html +5 -2
  183. data/doc/files/lib/AttributeBase_rb.html +3 -2
  184. data/doc/files/lib/AttributeDefinition_rb.html +3 -2
  185. data/doc/files/lib/Attributes_rb.html +3 -2
  186. data/doc/files/lib/BatchProcessor_rb.html +4 -3
  187. data/doc/files/lib/Booking_rb.html +3 -2
  188. data/doc/files/lib/ChargeSet_rb.html +3 -2
  189. data/doc/files/lib/Charge_rb.html +3 -2
  190. data/doc/files/lib/HTMLDocument_rb.html +3 -2
  191. data/doc/files/lib/Interval_rb.html +3 -2
  192. data/doc/files/lib/Journal_rb.html +4 -3
  193. data/doc/files/lib/KeywordArray_rb.html +3 -2
  194. data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
  195. data/doc/files/lib/Limits_rb.html +3 -2
  196. data/doc/files/lib/Log_rb.html +3 -2
  197. data/doc/files/lib/LogicalExpression_rb.html +3 -2
  198. data/doc/files/lib/LogicalFunction_rb.html +3 -2
  199. data/doc/files/lib/LogicalOperation_rb.html +3 -2
  200. data/doc/files/lib/MacroParser_rb.html +3 -2
  201. data/doc/files/lib/MacroTable_rb.html +3 -2
  202. data/doc/files/lib/MessageHandler_rb.html +3 -2
  203. data/doc/files/lib/Message_rb.html +3 -2
  204. data/doc/files/lib/ProjectFileParser_rb.html +7 -4
  205. data/doc/files/lib/Project_rb.html +3 -2
  206. data/doc/files/lib/PropertyList_rb.html +3 -2
  207. data/doc/files/lib/PropertySet_rb.html +3 -2
  208. data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
  209. data/doc/files/lib/Query_rb.html +3 -2
  210. data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
  211. data/doc/files/lib/RTFQuery_rb.html +121 -0
  212. data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
  213. data/doc/files/lib/RealFormat_rb.html +3 -2
  214. data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
  215. data/doc/files/lib/ReportServer_rb.html +107 -0
  216. data/doc/files/lib/ResourceScenario_rb.html +3 -2
  217. data/doc/files/lib/Resource_rb.html +3 -2
  218. data/doc/files/lib/RichTextDocument_rb.html +4 -3
  219. data/doc/files/lib/RichTextElement_rb.html +3 -2
  220. data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
  221. data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
  222. data/doc/files/lib/RichTextParser_rb.html +3 -2
  223. data/doc/files/lib/RichTextScanner_rb.html +3 -2
  224. data/doc/files/lib/RichTextSnip_rb.html +3 -2
  225. data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
  226. data/doc/files/lib/RichText_rb.html +3 -2
  227. data/doc/files/lib/ScenarioData_rb.html +3 -2
  228. data/doc/files/lib/Scenario_rb.html +3 -2
  229. data/doc/files/lib/Scoreboard_rb.html +3 -2
  230. data/doc/files/lib/ShiftAssignments_rb.html +3 -2
  231. data/doc/files/lib/ShiftScenario_rb.html +3 -2
  232. data/doc/files/lib/Shift_rb.html +3 -2
  233. data/doc/files/lib/SourceFileInfo_rb.html +3 -2
  234. data/doc/files/lib/SyntaxReference_rb.html +3 -2
  235. data/doc/files/lib/TOCEntry_rb.html +3 -2
  236. data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
  237. data/doc/files/lib/TableOfContents_rb.html +3 -2
  238. data/doc/files/lib/TaskDependency_rb.html +3 -2
  239. data/doc/files/lib/TaskJuggler_rb.html +7 -2
  240. data/doc/files/lib/TaskScenario_rb.html +3 -2
  241. data/doc/files/lib/Task_rb.html +3 -2
  242. data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
  243. data/doc/files/lib/TextParser/Rule_rb.html +4 -3
  244. data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
  245. data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
  246. data/doc/files/lib/TextParser_rb.html +3 -2
  247. data/doc/files/lib/TextScanner_rb.html +3 -2
  248. data/doc/files/lib/Tj3Config_rb.html +3 -2
  249. data/doc/files/lib/TjException_rb.html +3 -2
  250. data/doc/files/lib/TjTime_rb.html +3 -2
  251. data/doc/files/lib/TjpExample_rb.html +3 -2
  252. data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
  253. data/doc/files/lib/UTF8String_rb.html +14 -6
  254. data/doc/files/lib/UserManual_rb.html +6 -3
  255. data/doc/files/lib/WorkingHours_rb.html +3 -2
  256. data/doc/files/lib/XMLDocument_rb.html +3 -2
  257. data/doc/files/lib/XMLElement_rb.html +3 -2
  258. data/doc/files/lib/deep_copy_rb.html +3 -2
  259. data/doc/files/lib/reports/CSVFile_rb.html +3 -2
  260. data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
  261. data/doc/files/lib/reports/GanttChart_rb.html +3 -2
  262. data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
  263. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
  264. data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
  265. data/doc/files/lib/reports/GanttLine_rb.html +3 -2
  266. data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
  267. data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
  268. data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
  269. data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
  270. data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
  271. data/doc/files/lib/reports/Navigator_rb.html +3 -2
  272. data/doc/files/lib/reports/ReportBase_rb.html +3 -2
  273. data/doc/files/lib/reports/ReportContext_rb.html +3 -2
  274. data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
  275. data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
  276. data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
  277. data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
  278. data/doc/files/lib/reports/ReportTable_rb.html +3 -2
  279. data/doc/files/lib/reports/Report_rb.html +7 -2
  280. data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
  281. data/doc/files/lib/reports/TableReport_rb.html +3 -2
  282. data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
  283. data/doc/files/lib/reports/TextReport_rb.html +4 -3
  284. data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
  285. data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
  286. data/doc/files/lib/taskjuggler3_rb.html +94 -77
  287. data/doc/files/lib/tj3client_rb.html +280 -0
  288. data/doc/files/lib/tj3man_rb.html +10 -9
  289. data/doc/fr_class_index.html +27 -5
  290. data/doc/fr_file_index.html +15 -7
  291. data/doc/fr_method_index.html +1312 -1020
  292. data/examples/tutorial.tjp +113 -14
  293. data/gem_spec.rb +2 -1
  294. data/lib/Account.rb +1 -1
  295. data/lib/AccountScenario.rb +1 -1
  296. data/lib/Allocation.rb +1 -1
  297. data/lib/AppConfig.rb +23 -10
  298. data/lib/AttributeBase.rb +34 -6
  299. data/lib/AttributeDefinition.rb +1 -1
  300. data/lib/Attributes.rb +51 -16
  301. data/lib/BatchProcessor.rb +204 -77
  302. data/lib/Booking.rb +1 -1
  303. data/lib/Charge.rb +1 -1
  304. data/lib/ChargeSet.rb +1 -1
  305. data/lib/HTMLDocument.rb +2 -2
  306. data/lib/Interval.rb +1 -1
  307. data/lib/Journal.rb +231 -9
  308. data/lib/KeywordArray.rb +1 -1
  309. data/lib/KeywordDocumentation.rb +6 -4
  310. data/lib/Limits.rb +1 -1
  311. data/lib/Log.rb +8 -1
  312. data/lib/LogicalExpression.rb +14 -13
  313. data/lib/LogicalFunction.rb +88 -14
  314. data/lib/LogicalOperation.rb +124 -53
  315. data/lib/MacroParser.rb +1 -1
  316. data/lib/MacroTable.rb +2 -2
  317. data/lib/Message.rb +1 -1
  318. data/lib/MessageHandler.rb +7 -3
  319. data/lib/Project.rb +93 -14
  320. data/lib/ProjectFileParser.rb +30 -15
  321. data/lib/PropertyList.rb +103 -36
  322. data/lib/PropertySet.rb +22 -10
  323. data/lib/PropertyTreeNode.rb +120 -15
  324. data/lib/Query.rb +119 -48
  325. data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
  326. data/lib/RTFQuery.rb +166 -0
  327. data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
  328. data/lib/RealFormat.rb +1 -1
  329. data/lib/RemoteServiceManager.rb +80 -0
  330. data/lib/ReportServer.rb +66 -0
  331. data/lib/Resource.rb +1 -1
  332. data/lib/ResourceScenario.rb +48 -19
  333. data/lib/RichText.rb +98 -41
  334. data/lib/RichTextDocument.rb +10 -8
  335. data/lib/RichTextElement.rb +72 -28
  336. data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
  337. data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
  338. data/lib/RichTextParser.rb +6 -3
  339. data/lib/RichTextScanner.rb +91 -19
  340. data/lib/RichTextSnip.rb +8 -3
  341. data/lib/RichTextSyntaxRules.rb +103 -45
  342. data/lib/Scenario.rb +1 -1
  343. data/lib/ScenarioData.rb +2 -2
  344. data/lib/Scoreboard.rb +1 -1
  345. data/lib/Shift.rb +1 -1
  346. data/lib/ShiftAssignments.rb +1 -1
  347. data/lib/ShiftScenario.rb +1 -1
  348. data/lib/SourceFileInfo.rb +1 -1
  349. data/lib/SyntaxReference.rb +2 -2
  350. data/lib/TOCEntry.rb +1 -1
  351. data/lib/TableColumnDefinition.rb +59 -16
  352. data/lib/TableOfContents.rb +1 -1
  353. data/lib/Task.rb +1 -1
  354. data/lib/TaskDependency.rb +1 -1
  355. data/lib/TaskJuggler.rb +31 -8
  356. data/lib/TaskScenario.rb +165 -16
  357. data/lib/TextParser.rb +36 -22
  358. data/lib/TextParser/Pattern.rb +3 -3
  359. data/lib/TextParser/Rule.rb +2 -2
  360. data/lib/TextParser/StackElement.rb +4 -3
  361. data/lib/TextParser/TokenDoc.rb +2 -2
  362. data/lib/TextScanner.rb +52 -37
  363. data/lib/Tj3Config.rb +6 -5
  364. data/lib/TjException.rb +1 -1
  365. data/lib/TjTime.rb +12 -3
  366. data/lib/TjpExample.rb +1 -1
  367. data/lib/TjpSyntaxRules.rb +1044 -150
  368. data/lib/UTF8String.rb +2 -1
  369. data/lib/UserManual.rb +18 -70
  370. data/lib/WorkingHours.rb +3 -3
  371. data/lib/XMLDocument.rb +3 -2
  372. data/lib/XMLElement.rb +6 -1
  373. data/lib/deep_copy.rb +1 -1
  374. data/lib/reports/CSVFile.rb +1 -1
  375. data/lib/reports/ColumnTable.rb +9 -9
  376. data/lib/reports/GanttChart.rb +1 -1
  377. data/lib/reports/GanttContainer.rb +1 -1
  378. data/lib/reports/GanttHeader.rb +1 -1
  379. data/lib/reports/GanttHeaderScaleItem.rb +1 -1
  380. data/lib/reports/GanttLine.rb +40 -40
  381. data/lib/reports/GanttLoadStack.rb +1 -1
  382. data/lib/reports/GanttMilestone.rb +1 -1
  383. data/lib/reports/GanttRouter.rb +1 -1
  384. data/lib/reports/GanttTaskBar.rb +1 -1
  385. data/lib/reports/HTMLGraphics.rb +1 -1
  386. data/lib/reports/Navigator.rb +149 -22
  387. data/lib/reports/Report.rb +115 -172
  388. data/lib/reports/ReportBase.rb +22 -27
  389. data/lib/reports/ReportContext.rb +29 -15
  390. data/lib/reports/ReportTable.rb +1 -1
  391. data/lib/reports/ReportTableCell.rb +120 -27
  392. data/lib/reports/ReportTableColumn.rb +3 -3
  393. data/lib/reports/ReportTableLegend.rb +1 -1
  394. data/lib/reports/ReportTableLine.rb +10 -2
  395. data/lib/reports/ResourceListRE.rb +5 -1
  396. data/lib/reports/TableReport.rb +237 -287
  397. data/lib/reports/TaskListRE.rb +5 -1
  398. data/lib/reports/TextReport.rb +7 -4
  399. data/lib/reports/TimeSheetReport.rb +233 -0
  400. data/lib/reports/TjpExportRE.rb +2 -2
  401. data/lib/taskjuggler3.rb +27 -11
  402. data/lib/tj3client.rb +110 -0
  403. data/lib/tj3man.rb +4 -4
  404. data/manual/Getting_Started +0 -50
  405. data/manual/How_To_Contribute +6 -13
  406. data/manual/Installation +102 -28
  407. data/manual/Intro +11 -1
  408. data/manual/Reporting_Bugs +23 -7
  409. data/manual/Rich_Text_Attributes +59 -6
  410. data/manual/TaskJuggler_2x_Migration +27 -0
  411. data/manual/The_TaskJuggler_Syntax +104 -0
  412. data/manual/Tutorial +10 -9
  413. data/prj_cfg.rb +8 -2
  414. data/tasks/csts.rake +1 -1
  415. data/tasks/manual.rake +5 -3
  416. data/test/MessageChecker.rb +1 -1
  417. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  418. data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
  419. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  420. data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
  421. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  422. data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
  423. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  424. data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
  425. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
  426. data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
  427. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  428. data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
  429. data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
  430. data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
  431. data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
  432. data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
  433. data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
  434. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  435. data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
  436. data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
  437. data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
  438. data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
  439. data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
  440. data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
  441. data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
  442. data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
  443. data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
  444. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  445. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
  446. data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
  447. data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
  448. data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
  449. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
  450. data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
  451. data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
  452. data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
  453. data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
  454. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  455. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  456. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  457. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  458. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  459. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  460. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  461. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  462. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  463. data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
  464. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
  465. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
  466. data/test/all.rb +2 -2
  467. data/test/test_BatchProcessor.rb +42 -13
  468. data/test/test_CSV-Reports.rb +1 -1
  469. data/test/test_Journal.rb +176 -0
  470. data/test/test_Limits.rb +1 -1
  471. data/test/test_LogicalExpression.rb +14 -5
  472. data/test/test_MacroTable.rb +1 -1
  473. data/test/test_Project.rb +1 -1
  474. data/test/test_PropertySet.rb +1 -1
  475. data/test/test_Query.rb +1 -1
  476. data/test/test_RealFormat.rb +1 -1
  477. data/test/test_RichText.rb +30 -20
  478. data/test/test_Scheduler.rb +1 -1
  479. data/test/test_ShiftAssignments.rb +2 -2
  480. data/test/test_Syntax.rb +1 -1
  481. data/test/test_TextScanner.rb +1 -1
  482. data/test/test_TjTime.rb +1 -1
  483. data/test/test_TjpExample.rb +1 -1
  484. data/test/test_UTF8String.rb +1 -1
  485. data/test/test_WorkingHours.rb +1 -1
  486. data/test/test_deep_copy.rb +2 -2
  487. metadata +610 -532
  488. data/doc/files/lib/ms_test_rb.html +0 -90
  489. data/examples/ContactList.html +0 -1467
  490. data/examples/Deliveries.html +0 -485
  491. data/examples/Development.html +0 -2525
  492. data/examples/Overview.html +0 -747
  493. data/examples/Resource Graph.html +0 -616
  494. data/lib/ms_test.rb +0 -27
  495. data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = GanttLoadStack.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = GanttMilestone.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = GanttRouter.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = GanttTaskBar.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = HTMLGraphics.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Navigator.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -14,43 +14,155 @@ require 'reports/ReportContext'
14
14
 
15
15
  class TaskJuggler
16
16
 
17
+ class NavigatorElement
18
+
19
+ attr_reader :parent, :label
20
+ attr_accessor :url, :elements, :current
21
+
22
+ def initialize(parent, label = nil, url = nil)
23
+ @parent = parent
24
+ @label = label
25
+ @url = url
26
+ @elements = []
27
+ # True if the current report is included in this NavigatorElement or any
28
+ # of its sub elements.
29
+ @current = false
30
+ end
31
+
32
+ def to_html
33
+ first = true
34
+ html = (div = XMLElement.new('div'))
35
+
36
+ @elements.each do |element|
37
+ next unless label
38
+
39
+ if first
40
+ first = false
41
+ else
42
+ div << XMLText.new('|')
43
+ end
44
+
45
+ url = element.url
46
+ if !url
47
+ nEl = element
48
+ while nEl.elements[0]
49
+ break if nEl.current
50
+
51
+ if nEl.elements[0].url
52
+ url = nEl.elements[0].url
53
+ break
54
+ end
55
+ nEl = nEl.elements[0]
56
+ end
57
+ end
58
+ if url && url != currentUrl
59
+ div << (span = XMLElement.new('span', 'class' => 'navbar_other'))
60
+ span << (a = XMLElement.new('a', 'href' => url))
61
+ a << XMLText.new(element.label)
62
+ else
63
+ div << (span = XMLElement.new('span',
64
+ 'class' => 'navbar_current'))
65
+ span << XMLText.new(element.label)
66
+ end
67
+ end
68
+ @elements.each do |element|
69
+ if element.current && !element.elements.empty?
70
+ html << XMLElement.new('hr') unless first
71
+ html << element.to_html
72
+ end
73
+ end
74
+ html
75
+ end
76
+
77
+ # Return a text version of the tree. Currently used for debugging only.
78
+ def to_s(indent = 0)
79
+ @elements.each do |element|
80
+ puts "#{' ' * indent}#{element.current ? '<' : ''}" +
81
+ "#{element.label}#{element.current ? '>' : ''}" +
82
+ " -> #{element.url}"
83
+ element.to_s(indent + 1)
84
+ end
85
+ end
86
+
87
+ # Store the URL for the current report. Since the URL entry in the root
88
+ # node of the NavigatorElement tree is never used, we use it to store the
89
+ # current URL there.
90
+ def currentUrl=(url)
91
+ root.url = url
92
+ end
93
+
94
+ # Get the URL of the current report from the root node.
95
+ def currentUrl
96
+ root.url
97
+ end
98
+
99
+ # Traverse the tree all the way to the top and return the root element.
100
+ def root
101
+ p = self
102
+ while p.parent
103
+ p = p.parent
104
+ end
105
+ p
106
+ end
107
+
108
+ end
109
+
110
+ # A Navigator is an automatically generated menu to navigate a list of
111
+ # reports. The hierarchical structure of the reports will be reused to
112
+ # group them. The actual structure of the Navigator depends on the output
113
+ # format.
17
114
  class Navigator
18
115
 
19
116
  attr_reader :id
20
- attr_accessor :hideReport
117
+ attr_accessor :hideReport, :reportRoot
21
118
 
22
119
  def initialize(id, project)
23
120
  @id = id
24
121
  @project = project
25
122
  @hideReport = LogicalExpression.new(LogicalOperation.new(0))
123
+ @reportRoot = nil
124
+ @elements = []
26
125
  end
27
126
 
28
- def to_html
29
- reports = filterReports
30
- return nil if reports.empty?
127
+ # Generate an output format independant version of the navigator. This is
128
+ # a tree of NavigatorElement objects.
129
+ def generate(reports, reportRoot, parentElement)
130
+ raise "Report context missing" unless @project.reportContext.report
31
131
 
32
- first = true
33
- html = []
34
- html << (div = XMLElement.new('div'))
35
132
  reports.each do |report|
36
- next unless report.get('formats').include?(:html)
133
+ hasURL = report.get('formats').include?(:html)
134
+ next if (report.parent != reportRoot) ||
135
+ (report.leaf? && !hasURL)
37
136
 
38
- if first
39
- first = false
40
- else
41
- div << XMLText.new('|')
137
+ label = report.get('title') || report.name
138
+ # Determine the URL for this element.
139
+ if hasURL
140
+ url = report.name + '.html'
141
+ url = normalizeURL(url, @project.reportContext.report.name)
42
142
  end
143
+ parentElement.elements <<
144
+ (element = NavigatorElement.new(parentElement, label, url))
145
+
43
146
  if report == @project.reportContext.report
44
- div << (span = XMLElement.new('span',
45
- 'style' => 'class:navbar_current'))
46
- span << XMLText.new(report.name)
47
- else
48
- div << (span = XMLElement.new('span', 'style' => 'class:navbar_other'))
49
- span << (a = XMLElement.new('a', 'href' => report.name + '.html'))
50
- a << XMLText.new(report.name)
147
+ element.currentUrl = url
148
+ # Mark this element and all its parents as current.
149
+ nEl = element
150
+ while nEl
151
+ nEl.current = true
152
+ nEl = nEl.parent
153
+ end
51
154
  end
155
+
156
+ generate(reports, report, element)
52
157
  end
53
- html
158
+ end
159
+
160
+ def to_html
161
+ reports = filterReports
162
+ return nil if reports.empty?
163
+
164
+ generate(reports, nil, content = NavigatorElement.new(nil))
165
+ content.to_html
54
166
  end
55
167
 
56
168
  private
@@ -60,12 +172,27 @@ class TaskJuggler
60
172
  list.setSorting([[ 'seqno', true, -1 ]])
61
173
  list.sort!
62
174
  # Remove all reports that the user doesn't want to have include.
175
+ query = @project.reportContext.query.dup
176
+ query.scopeProperty = nil
63
177
  list.delete_if do |property|
64
- @hideReport.eval(property, nil)
178
+ query.property = property
179
+ @hideReport.eval(query)
65
180
  end
66
181
  list
67
182
  end
68
183
 
184
+ # Remove the URL or directory path from _url1_ that is identical to
185
+ # _url2_.
186
+ def normalizeURL(url1, url2)
187
+ cut = 0
188
+ 0.upto(url1.length - 1) do |i|
189
+ return url1[cut, url1.length - cut] if url1[i] != url2[i]
190
+ cut = i + 1 if url1[i] == ?/
191
+ end
192
+
193
+ url1
194
+ end
195
+
69
196
  end
70
197
 
71
198
  end
@@ -3,18 +3,20 @@
3
3
  #
4
4
  # = Report.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
10
10
  # published by the Free Software Foundation.
11
11
  #
12
12
 
13
+ require 'fileutils'
13
14
  require 'PropertyTreeNode'
14
15
  require 'reports/TextReport'
15
16
  require 'reports/TaskListRE'
16
17
  require 'reports/ResourceListRE'
17
18
  require 'reports/TjpExportRE'
19
+ require 'reports/TimeSheetReport'
18
20
  require 'reports/CSVFile'
19
21
  require 'reports/Navigator'
20
22
  require 'reports/ReportContext'
@@ -46,14 +48,16 @@ class TaskJuggler
46
48
  begin
47
49
  @content = nil
48
50
  case @typeSpec
49
- when :export
50
- # Does not have an intermediate representation. Nothing to do here.
51
51
  when :resourcereport
52
52
  @content = ResourceListRE.new(self)
53
53
  when :textreport
54
54
  @content = TextReport.new(self)
55
55
  when :taskreport
56
56
  @content = TaskListRE.new(self)
57
+ when :export
58
+ @content = TjpExportRE.new(self)
59
+ when :timeSheet
60
+ @content = TimeSheetReport.new(self)
57
61
  else
58
62
  raise "Unknown report type"
59
63
  end
@@ -67,19 +71,19 @@ class TaskJuggler
67
71
  case format
68
72
  when :html
69
73
  generateHTML
74
+ copyAuxiliaryFiles
70
75
  when :csv
71
76
  generateCSV
72
- when :export
73
- generateExport
77
+ when :tjp
78
+ generateTJP
74
79
  else
75
80
  raise 'Unknown report output format.'
76
81
  end
77
82
  end
78
83
  rescue TjException
79
- @project.messageHandler.send(Message.new('reporting_failed', 'error',
80
- $!.message, nil, nil,
81
- @sourceFileInfo))
84
+ error('reporting_failed', $!.message)
82
85
  end
86
+ 0
83
87
  end
84
88
 
85
89
  # Render the content of the report as HTML (without the framing).
@@ -99,176 +103,68 @@ class TaskJuggler
99
103
  html = HTMLDocument.new(:transitional)
100
104
  html << (head = XMLElement.new('head'))
101
105
  head << XMLNamedText.new("TaskJuggler Report - #{@name}", 'title')
102
- head << XMLElement.new('meta', 'http-equiv' => 'Content-Style-Type',
103
- 'content' => 'text/css; charset=utf-8')
104
- head << (style = XMLElement.new('style', 'type' => 'text/css'))
105
- style << XMLBlob.new(<<'EOT'
106
- body {
107
- font-family:Bitstream Vera Sans, Tahoma, sans-serif;
108
- font-size:15px;
109
- }
110
- h1, h2, table, tr, td, div, span {
111
- font-family: Bitstream Vera Sans, Tahoma, sans-serif;
112
- }
113
- table {
114
- font-size:13px;
115
- }
116
- td, div { white-space:nowrap; padding:0px; margin:0px; }
117
- h1 { font-size:22px; }
118
- h2 { font-size:18px; }
119
- h3 { font-size:16px; }
120
-
121
- .tabback { background-color:#9a9a9a; }
122
- .tabfront { background-color:#d4dde6; }
123
- .tabhead {
124
- white-space:nowrap;
125
- background-color:#7a7a7a;
126
- color:#ffffff;
127
- text-align:center;
128
- }
129
- .tabhead_offduty {
130
- white-space:nowrap;
131
- background-color:#dde375;
132
- color:#000000;
133
- }
134
- .tabfooter {
135
- white-space:nowrap;
136
- background-color:#9a9a9a;
137
- color:#ffffff;
138
- text-align:center;
139
- }
140
- .headercelldiv {
141
- padding-top:1px;
142
- padding-right:3px;
143
- padding-left:3px;
144
- padding-bottom:0px;
145
- white-space:nowrap;
146
- overflow:auto;
147
- }
148
- .celldiv {
149
- padding-top:3px;
150
- padding-right:3px;
151
- padding-left:3px;
152
- padding-bottom:0px;
153
- white-space:nowrap;
154
- overflow:auto;
155
- }
156
- .tabline { color:#000000 }
157
- .tabcell {
158
- white-space:nowrap;
159
- overflow:hidden;
160
- padding:0px;
161
- }
162
- .taskcell1 {
163
- background-color:#ebf2ff;
164
- white-space:nowrap;
165
- padding:0px;
166
- }
167
- .taskcell2 {
168
- background-color:#d9dfeb;
169
- white-space:nowrap;
170
- padding:0px;
171
- }
172
- .resourcecell1 {
173
- background-color:#fff2eb;
174
- white-space:nowrap;
175
- padding:0px;
176
- }
177
- .resourcecell2 {
178
- background-color:#ebdfd9;
179
- white-space:nowrap;
180
- padding:0px;
181
- }
182
- .busy1 { background-color:#ff3b3b; }
183
- .busy2 { background-color:#eb4545; }
184
- .loaded1 { background-color:#ff9b9b; }
185
- .loaded2 { background-color:#eb8f8f; }
186
- .free1 { background-color:#a5ffb4; }
187
- .free2 { background-color:#98eba6; }
188
- .offduty1 { background-color:#f3f990; }
189
- .offduty2 { background-color:#dde375; }
190
- .calconttask1 { background-color:#abbeae; }
191
- .calconttask2 { background-color:#99aa9c; }
192
- .caltask1 { background-color:#2050e5; }
193
- .caltask2 { background-color:#2f57ea; }
194
- .todo1 { background-color:#beabab; }
195
- .todo2 { background-color:#aa9999; }
196
-
197
- .tabvline {
198
- background-color:#9a9a9a;
199
- position:absolute;
200
- }
201
- .containerbar {
202
- background-color:#09090a;
203
- position:absolute;
204
- }
205
- .taskbarframe {
206
- background-color:#09090a;
207
- position:absolute;
208
- }
209
- .taskbar {
210
- background-color:#2f57ea;
211
- position:absolute;
212
- }
213
- .progressbar {
214
- background-color:#36363f;
215
- position:absolute;
216
- }
217
- .milestone {
218
- background-color:#09090a;
219
- position:absolute;
220
- }
221
- .loadstackframe {
222
- background-color:#452a2a;
223
- position:absolute;
224
- }
225
- .free {
226
- background-color:#a5ffb5;
227
- position:absolute;
228
- }
229
- .busy {
230
- background-color:#ff9b9b;
231
- position:absolute;
232
- }
233
- .assigned {
234
- background-color:#ff3b3b;
235
- position:absolute;
236
- }
237
- .offduty {
238
- background-color:#f3f990;
239
- white-space:nowrap;
240
- position:absolute;
241
- }
242
- .depline {
243
- background-color:#000000;
244
- position:absolute;
245
- }
246
- .nowline {
247
- background-color:#EE0000;
248
- position:absolute;
249
- }
250
- .white {
251
- background-color:#FFFFFF;
252
- position:absolute;
253
- }
254
-
255
- .legendback { background-color:#d4dde6; }
256
- .caption {
257
- padding: 5px 13px 5px 13px;
258
- background-color:#ebf2ff;
259
- white-space:normal;
260
- font-size:13px
261
- }
106
+ if a('selfcontained')
107
+ auxSrcDir = AppConfig.dataDirs('data/css')[0]
108
+ cssFileName = auxSrcDir + '/tjreport.css'
109
+ if auxSrcDir.nil? || !File.exists?(cssFileName)
110
+ raise TjException.new, <<"EOT"
111
+ Cannot find '#{cssFileName}'. This is usually the result of an improper
112
+ TaskJuggler installation. If you know where to find the data directory, you
113
+ can use the TASKJUGGLER_DATA_PATH environment variable to specify the
114
+ location.
262
115
  EOT
263
- )
116
+ end
117
+ cssFile = IO.read(cssFileName)
118
+ if cssFile.empty?
119
+ raise TjException.new, <<"EOT"
120
+ Cannot read '#{cssFileName}'. Make sure the file is not empty and you have
121
+ read access permission.
122
+ EOT
123
+ end
124
+ head << XMLElement.new('meta', 'http-equiv' => 'Content-Style-Type',
125
+ 'content' => 'text/css; charset=utf-8')
126
+ head << (style = XMLElement.new('style', 'type' => 'text/css'))
127
+ style << XMLBlob.new("\n" + cssFile)
128
+ else
129
+ head << XMLElement.new('link', 'rel' => 'stylesheet',
130
+ 'type' => 'text/css',
131
+ 'href' => 'css/tjreport.css')
132
+ end
264
133
  html << (body = XMLElement.new('body'))
265
134
 
135
+ unless a('selfcontained')
136
+ body << (script = XMLElement.new('script', 'type' => 'text/javascript',
137
+ 'src' => 'scripts/wz_tooltip.js'))
138
+ script.mayNotBeEmpty = true
139
+ body << (noscript = XMLElement.new('noscript'))
140
+ noscript << (nsdiv = XMLElement.new('div',
141
+ 'style' => 'text-align:center; ' +
142
+ 'color:#FF0000'))
143
+ nsdiv << XMLText.new(<<'EOT'
144
+ This page requires Javascript for full functionality. Please enable it
145
+ in your browser settings!
146
+ EOT
147
+ )
148
+ end
149
+
150
+
266
151
  # Make sure we have some margins around the report.
267
152
  body << (frame = XMLElement.new('div',
268
153
  'style' => 'margin: 35px 5% 25px 5%; '))
269
154
 
270
155
  frame << @content.to_html if @content
271
156
 
157
+ # The footer with some administrative information.
158
+ frame << (div = XMLElement.new('div', 'class' => 'copyright'))
159
+ div << XMLText.new(@project['copyright'] + " - ") if @project['copyright']
160
+ div << XMLText.new("Project: #{@project['name']} " +
161
+ "Version: #{@project['version']} - " +
162
+ "Created on #{TjTime.now.to_s("%Y-%m-%d %H:%M:%S")} " +
163
+ "with ")
164
+ div << XMLNamedText.new("#{AppConfig.softwareName}", 'a',
165
+ 'href' => "#{AppConfig.contact}")
166
+ div << XMLText.new(" v#{AppConfig.version}")
167
+
272
168
  html.write((@name[0] == '/' ? '' : @project.outputDir) +
273
169
  @name + (@name == '.' ? '' : '.html'))
274
170
  end
@@ -314,15 +210,62 @@ EOT
314
210
  @name + (@name == '.' ? '' : '.csv'))
315
211
  end
316
212
 
317
- # Generate an export report
318
- def generateExport
319
- @content = TjpExportRE.new(self)
213
+ # Generate time sheet drafts.
214
+ def generateTJP
320
215
  f = @name == '.' ? $stdout :
321
216
  File.new((@name[0] == '/' ? '' : @project.outputDir) +
322
217
  @name, 'w')
323
218
  f.puts "#{@content.to_tjp}"
324
219
  end
325
220
 
221
+ def copyAuxiliaryFiles
222
+ return if @name == '.' # Don't copy files if output is stdout.
223
+
224
+ copyDirectory('css')
225
+ copyDirectory('icons')
226
+ copyDirectory('scripts')
227
+ end
228
+
229
+ def copyDirectory(dirName)
230
+ # The directory needs to be in the same directory as the HTML report.
231
+ auxDstDir = File.dirname((@name[0] == '/' ? '' : @project.outputDir) +
232
+ @name) + '/'
233
+ # Find the data directory that came with the TaskJuggler installation.
234
+ auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0]
235
+ if auxSrcDir.nil? || !File.exists?(auxSrcDir)
236
+ raise TjException.new, <<"EOT"
237
+ Cannot find the #{dirName} directory. This is usually
238
+ the result of an improper TaskJuggler installation. If you know the directory,
239
+ you can use the TASKJUGGLER_DATA_PATH environment variable to specify the
240
+ location.
241
+ EOT
242
+ end
243
+ # Don't copy directory if all files are up-to-date.
244
+ return if directoryUpToDate?(auxSrcDir, auxDstDir + dirName)
245
+
246
+ # Recursively copy the directory and all content.
247
+ FileUtils.cp_r(auxSrcDir, auxDstDir)
248
+ end
249
+
250
+ def directoryUpToDate?(auxSrcDir, auxDstDir)
251
+ return false unless File.exists?(auxDstDir.untaint)
252
+
253
+ Dir.entries(auxSrcDir).each do |file|
254
+ next if file == '.' || file == '..'
255
+
256
+ srcFile = (auxSrcDir + '/' + file).untaint
257
+ dstFile = (auxDstDir + '/' + file).untaint
258
+ return false if !File.exist?(dstFile) ||
259
+ File.mtime(srcFile) > File.mtime(dstFile)
260
+ end
261
+ true
262
+ end
263
+
264
+ def error(id, message)
265
+ @project.messageHandler.send(Message.new(id, 'error', message, nil, nil,
266
+ @sourceFileInfo))
267
+ end
268
+
326
269
  end
327
270
 
328
271
  end