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.
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjmanual.css +52 -0
- data/data/css/tjreport.css +195 -0
- data/data/icons/details.png +0 -0
- data/data/icons/flag-green.png +0 -0
- data/data/icons/flag-red.png +0 -0
- data/data/icons/flag-yellow.png +0 -0
- data/data/icons/resource.png +0 -0
- data/data/icons/resourcegroup.png +0 -0
- data/data/icons/task.png +0 -0
- data/data/icons/taskgroup.png +0 -0
- data/data/icons/trend-down.png +0 -0
- data/data/icons/trend-flat.png +0 -0
- data/data/icons/trend-up.png +0 -0
- data/data/scripts/wz_tooltip.js +1301 -0
- data/doc/classes/AppConfig.html +298 -230
- data/doc/classes/Arguments.html +8 -8
- data/doc/classes/Object.html +7 -7
- data/doc/classes/String.html +89 -89
- data/doc/classes/TaskJuggler.html +396 -264
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +30 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
- data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
- data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
- data/doc/classes/TaskJuggler/Booking.html +18 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
- data/doc/classes/TaskJuggler/CSVFile.html +24 -24
- data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
- data/doc/classes/TaskJuggler/Charge.html +18 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
- data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
- data/doc/classes/TaskJuggler/GanttChart.html +48 -48
- data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
- data/doc/classes/TaskJuggler/GanttLine.html +24 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
- data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +57 -57
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/JobInfo.html +68 -12
- data/doc/classes/TaskJuggler/Journal.html +266 -20
- data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
- data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
- data/doc/classes/TaskJuggler/Limits.html +36 -36
- data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
- data/doc/classes/TaskJuggler/Log.html +145 -107
- data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
- data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
- data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
- data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
- data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
- data/doc/classes/TaskJuggler/Macro.html +6 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +37 -37
- data/doc/classes/TaskJuggler/Message.html +12 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
- data/doc/classes/TaskJuggler/Navigator.html +110 -46
- data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
- data/doc/classes/TaskJuggler/Project.html +1158 -893
- data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
- data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
- data/doc/classes/TaskJuggler/PropertyList.html +225 -155
- data/doc/classes/TaskJuggler/PropertySet.html +375 -332
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
- data/doc/classes/TaskJuggler/Query.html +404 -139
- data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
- data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
- data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
- data/doc/classes/TaskJuggler/RealFormat.html +18 -18
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
- data/doc/classes/TaskJuggler/Report.html +66 -64
- data/doc/classes/TaskJuggler/ReportBase.html +112 -123
- data/doc/classes/TaskJuggler/ReportContext.html +43 -38
- data/doc/classes/TaskJuggler/ReportServer.html +320 -0
- data/doc/classes/TaskJuggler/ReportTable.html +42 -42
- data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
- data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
- data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
- data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
- data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
- data/doc/classes/TaskJuggler/RichText.html +64 -248
- data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
- data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
- data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
- data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
- data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
- data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
- data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
- data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
- data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
- data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
- data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
- data/doc/classes/TaskJuggler/TableReport.html +447 -468
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
- data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
- data/doc/classes/TaskJuggler/TextParser.html +215 -194
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
- data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
- data/doc/classes/TaskJuggler/TextReport.html +77 -74
- data/doc/classes/TaskJuggler/TextScanner.html +294 -281
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
- data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +522 -513
- data/doc/classes/TaskJuggler/TjpExample.html +25 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
- data/doc/classes/TaskJuggler/UserManual.html +212 -213
- data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
- data/doc/classes/TaskJuggler/XMLElement.html +86 -50
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +3 -2
- data/doc/files/lib/Account_rb.html +3 -2
- data/doc/files/lib/Allocation_rb.html +3 -2
- data/doc/files/lib/AppConfig_rb.html +5 -2
- data/doc/files/lib/AttributeBase_rb.html +3 -2
- data/doc/files/lib/AttributeDefinition_rb.html +3 -2
- data/doc/files/lib/Attributes_rb.html +3 -2
- data/doc/files/lib/BatchProcessor_rb.html +4 -3
- data/doc/files/lib/Booking_rb.html +3 -2
- data/doc/files/lib/ChargeSet_rb.html +3 -2
- data/doc/files/lib/Charge_rb.html +3 -2
- data/doc/files/lib/HTMLDocument_rb.html +3 -2
- data/doc/files/lib/Interval_rb.html +3 -2
- data/doc/files/lib/Journal_rb.html +4 -3
- data/doc/files/lib/KeywordArray_rb.html +3 -2
- data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
- data/doc/files/lib/Limits_rb.html +3 -2
- data/doc/files/lib/Log_rb.html +3 -2
- data/doc/files/lib/LogicalExpression_rb.html +3 -2
- data/doc/files/lib/LogicalFunction_rb.html +3 -2
- data/doc/files/lib/LogicalOperation_rb.html +3 -2
- data/doc/files/lib/MacroParser_rb.html +3 -2
- data/doc/files/lib/MacroTable_rb.html +3 -2
- data/doc/files/lib/MessageHandler_rb.html +3 -2
- data/doc/files/lib/Message_rb.html +3 -2
- data/doc/files/lib/ProjectFileParser_rb.html +7 -4
- data/doc/files/lib/Project_rb.html +3 -2
- data/doc/files/lib/PropertyList_rb.html +3 -2
- data/doc/files/lib/PropertySet_rb.html +3 -2
- data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
- data/doc/files/lib/Query_rb.html +3 -2
- data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
- data/doc/files/lib/RTFQuery_rb.html +121 -0
- data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
- data/doc/files/lib/RealFormat_rb.html +3 -2
- data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
- data/doc/files/lib/ReportServer_rb.html +107 -0
- data/doc/files/lib/ResourceScenario_rb.html +3 -2
- data/doc/files/lib/Resource_rb.html +3 -2
- data/doc/files/lib/RichTextDocument_rb.html +4 -3
- data/doc/files/lib/RichTextElement_rb.html +3 -2
- data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
- data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
- data/doc/files/lib/RichTextParser_rb.html +3 -2
- data/doc/files/lib/RichTextScanner_rb.html +3 -2
- data/doc/files/lib/RichTextSnip_rb.html +3 -2
- data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
- data/doc/files/lib/RichText_rb.html +3 -2
- data/doc/files/lib/ScenarioData_rb.html +3 -2
- data/doc/files/lib/Scenario_rb.html +3 -2
- data/doc/files/lib/Scoreboard_rb.html +3 -2
- data/doc/files/lib/ShiftAssignments_rb.html +3 -2
- data/doc/files/lib/ShiftScenario_rb.html +3 -2
- data/doc/files/lib/Shift_rb.html +3 -2
- data/doc/files/lib/SourceFileInfo_rb.html +3 -2
- data/doc/files/lib/SyntaxReference_rb.html +3 -2
- data/doc/files/lib/TOCEntry_rb.html +3 -2
- data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
- data/doc/files/lib/TableOfContents_rb.html +3 -2
- data/doc/files/lib/TaskDependency_rb.html +3 -2
- data/doc/files/lib/TaskJuggler_rb.html +7 -2
- data/doc/files/lib/TaskScenario_rb.html +3 -2
- data/doc/files/lib/Task_rb.html +3 -2
- data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
- data/doc/files/lib/TextParser/Rule_rb.html +4 -3
- data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
- data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
- data/doc/files/lib/TextParser_rb.html +3 -2
- data/doc/files/lib/TextScanner_rb.html +3 -2
- data/doc/files/lib/Tj3Config_rb.html +3 -2
- data/doc/files/lib/TjException_rb.html +3 -2
- data/doc/files/lib/TjTime_rb.html +3 -2
- data/doc/files/lib/TjpExample_rb.html +3 -2
- data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
- data/doc/files/lib/UTF8String_rb.html +14 -6
- data/doc/files/lib/UserManual_rb.html +6 -3
- data/doc/files/lib/WorkingHours_rb.html +3 -2
- data/doc/files/lib/XMLDocument_rb.html +3 -2
- data/doc/files/lib/XMLElement_rb.html +3 -2
- data/doc/files/lib/deep_copy_rb.html +3 -2
- data/doc/files/lib/reports/CSVFile_rb.html +3 -2
- data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
- data/doc/files/lib/reports/GanttChart_rb.html +3 -2
- data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
- data/doc/files/lib/reports/GanttLine_rb.html +3 -2
- data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
- data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
- data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
- data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
- data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
- data/doc/files/lib/reports/Navigator_rb.html +3 -2
- data/doc/files/lib/reports/ReportBase_rb.html +3 -2
- data/doc/files/lib/reports/ReportContext_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
- data/doc/files/lib/reports/ReportTable_rb.html +3 -2
- data/doc/files/lib/reports/Report_rb.html +7 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
- data/doc/files/lib/reports/TableReport_rb.html +3 -2
- data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
- data/doc/files/lib/reports/TextReport_rb.html +4 -3
- data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
- data/doc/files/lib/taskjuggler3_rb.html +94 -77
- data/doc/files/lib/tj3client_rb.html +280 -0
- data/doc/files/lib/tj3man_rb.html +10 -9
- data/doc/fr_class_index.html +27 -5
- data/doc/fr_file_index.html +15 -7
- data/doc/fr_method_index.html +1312 -1020
- data/examples/tutorial.tjp +113 -14
- data/gem_spec.rb +2 -1
- data/lib/Account.rb +1 -1
- data/lib/AccountScenario.rb +1 -1
- data/lib/Allocation.rb +1 -1
- data/lib/AppConfig.rb +23 -10
- data/lib/AttributeBase.rb +34 -6
- data/lib/AttributeDefinition.rb +1 -1
- data/lib/Attributes.rb +51 -16
- data/lib/BatchProcessor.rb +204 -77
- data/lib/Booking.rb +1 -1
- data/lib/Charge.rb +1 -1
- data/lib/ChargeSet.rb +1 -1
- data/lib/HTMLDocument.rb +2 -2
- data/lib/Interval.rb +1 -1
- data/lib/Journal.rb +231 -9
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +6 -4
- data/lib/Limits.rb +1 -1
- data/lib/Log.rb +8 -1
- data/lib/LogicalExpression.rb +14 -13
- data/lib/LogicalFunction.rb +88 -14
- data/lib/LogicalOperation.rb +124 -53
- data/lib/MacroParser.rb +1 -1
- data/lib/MacroTable.rb +2 -2
- data/lib/Message.rb +1 -1
- data/lib/MessageHandler.rb +7 -3
- data/lib/Project.rb +93 -14
- data/lib/ProjectFileParser.rb +30 -15
- data/lib/PropertyList.rb +103 -36
- data/lib/PropertySet.rb +22 -10
- data/lib/PropertyTreeNode.rb +120 -15
- data/lib/Query.rb +119 -48
- data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
- data/lib/RTFQuery.rb +166 -0
- data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
- data/lib/RealFormat.rb +1 -1
- data/lib/RemoteServiceManager.rb +80 -0
- data/lib/ReportServer.rb +66 -0
- data/lib/Resource.rb +1 -1
- data/lib/ResourceScenario.rb +48 -19
- data/lib/RichText.rb +98 -41
- data/lib/RichTextDocument.rb +10 -8
- data/lib/RichTextElement.rb +72 -28
- data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
- data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
- data/lib/RichTextParser.rb +6 -3
- data/lib/RichTextScanner.rb +91 -19
- data/lib/RichTextSnip.rb +8 -3
- data/lib/RichTextSyntaxRules.rb +103 -45
- data/lib/Scenario.rb +1 -1
- data/lib/ScenarioData.rb +2 -2
- data/lib/Scoreboard.rb +1 -1
- data/lib/Shift.rb +1 -1
- data/lib/ShiftAssignments.rb +1 -1
- data/lib/ShiftScenario.rb +1 -1
- data/lib/SourceFileInfo.rb +1 -1
- data/lib/SyntaxReference.rb +2 -2
- data/lib/TOCEntry.rb +1 -1
- data/lib/TableColumnDefinition.rb +59 -16
- data/lib/TableOfContents.rb +1 -1
- data/lib/Task.rb +1 -1
- data/lib/TaskDependency.rb +1 -1
- data/lib/TaskJuggler.rb +31 -8
- data/lib/TaskScenario.rb +165 -16
- data/lib/TextParser.rb +36 -22
- data/lib/TextParser/Pattern.rb +3 -3
- data/lib/TextParser/Rule.rb +2 -2
- data/lib/TextParser/StackElement.rb +4 -3
- data/lib/TextParser/TokenDoc.rb +2 -2
- data/lib/TextScanner.rb +52 -37
- data/lib/Tj3Config.rb +6 -5
- data/lib/TjException.rb +1 -1
- data/lib/TjTime.rb +12 -3
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +1044 -150
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +18 -70
- data/lib/WorkingHours.rb +3 -3
- data/lib/XMLDocument.rb +3 -2
- data/lib/XMLElement.rb +6 -1
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/CSVFile.rb +1 -1
- data/lib/reports/ColumnTable.rb +9 -9
- data/lib/reports/GanttChart.rb +1 -1
- data/lib/reports/GanttContainer.rb +1 -1
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/reports/GanttLine.rb +40 -40
- data/lib/reports/GanttLoadStack.rb +1 -1
- data/lib/reports/GanttMilestone.rb +1 -1
- data/lib/reports/GanttRouter.rb +1 -1
- data/lib/reports/GanttTaskBar.rb +1 -1
- data/lib/reports/HTMLGraphics.rb +1 -1
- data/lib/reports/Navigator.rb +149 -22
- data/lib/reports/Report.rb +115 -172
- data/lib/reports/ReportBase.rb +22 -27
- data/lib/reports/ReportContext.rb +29 -15
- data/lib/reports/ReportTable.rb +1 -1
- data/lib/reports/ReportTableCell.rb +120 -27
- data/lib/reports/ReportTableColumn.rb +3 -3
- data/lib/reports/ReportTableLegend.rb +1 -1
- data/lib/reports/ReportTableLine.rb +10 -2
- data/lib/reports/ResourceListRE.rb +5 -1
- data/lib/reports/TableReport.rb +237 -287
- data/lib/reports/TaskListRE.rb +5 -1
- data/lib/reports/TextReport.rb +7 -4
- data/lib/reports/TimeSheetReport.rb +233 -0
- data/lib/reports/TjpExportRE.rb +2 -2
- data/lib/taskjuggler3.rb +27 -11
- data/lib/tj3client.rb +110 -0
- data/lib/tj3man.rb +4 -4
- data/manual/Getting_Started +0 -50
- data/manual/How_To_Contribute +6 -13
- data/manual/Installation +102 -28
- data/manual/Intro +11 -1
- data/manual/Reporting_Bugs +23 -7
- data/manual/Rich_Text_Attributes +59 -6
- data/manual/TaskJuggler_2x_Migration +27 -0
- data/manual/The_TaskJuggler_Syntax +104 -0
- data/manual/Tutorial +10 -9
- data/prj_cfg.rb +8 -2
- data/tasks/csts.rake +1 -1
- data/tasks/manual.rake +5 -3
- data/test/MessageChecker.rb +1 -1
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
- data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
- data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
- data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
- data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
- data/test/all.rb +2 -2
- data/test/test_BatchProcessor.rb +42 -13
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_Journal.rb +176 -0
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +14 -5
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_RichText.rb +30 -20
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextScanner.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +2 -2
- metadata +610 -532
- data/doc/files/lib/ms_test_rb.html +0 -90
- data/examples/ContactList.html +0 -1467
- data/examples/Deliveries.html +0 -485
- data/examples/Development.html +0 -2525
- data/examples/Overview.html +0 -747
- data/examples/Resource Graph.html +0 -616
- data/lib/ms_test.rb +0 -27
- 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
|
data/lib/reports/GanttRouter.rb
CHANGED
|
@@ -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
|
data/lib/reports/GanttTaskBar.rb
CHANGED
|
@@ -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
|
data/lib/reports/HTMLGraphics.rb
CHANGED
|
@@ -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
|
data/lib/reports/Navigator.rb
CHANGED
|
@@ -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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
133
|
+
hasURL = report.get('formats').include?(:html)
|
|
134
|
+
next if (report.parent != reportRoot) ||
|
|
135
|
+
(report.leaf? && !hasURL)
|
|
37
136
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
data/lib/reports/Report.rb
CHANGED
|
@@ -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 :
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
318
|
-
def
|
|
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
|