From bba3615440bd1ffe7c8c995480cc8ef691046a42 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 21 Mar 2026 22:49:35 +0000 Subject: [PATCH 1/6] Initial plan From 86eface1f9d00e7d7d6945dbea5f4acfdab7c8a9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 21 Mar 2026 22:59:14 +0000 Subject: [PATCH 2/6] Add Timeline widget Co-authored-by: AlexHedley <1573469+AlexHedley@users.noreply.github.com> Agent-Logs-Url: https://github.com/AlexHedley/blashing/sessions/2c65fc14-314f-4d0a-9971-4b92359a5424 --- .../Stories/TimelineWidget.stories.razor | 27 +++++++ .../TimelineWidgetTest.cs | 64 +++++++++++++++ src/Blashing.Widgets/Timeline/TimelineItem.cs | 3 + .../Timeline/TimelineWidget.razor | 21 +++++ .../Timeline/TimelineWidget.razor.cs | 24 ++++++ .../Timeline/TimelineWidget.razor.css | 62 +++++++++++++++ .../Timeline/TimelineWidget.razor.scss | 79 +++++++++++++++++++ .../Timeline/_/timeline.coffee | 26 ++++++ src/Blashing.Widgets/Timeline/_/timeline.html | 3 + src/Blashing.Widgets/Timeline/_/timeline.scss | 34 ++++++++ 10 files changed, 343 insertions(+) create mode 100644 src/Blashing.Stories/Stories/TimelineWidget.stories.razor create mode 100644 src/Blashing.Widgets.Tests/TimelineWidgetTest.cs create mode 100644 src/Blashing.Widgets/Timeline/TimelineItem.cs create mode 100644 src/Blashing.Widgets/Timeline/TimelineWidget.razor create mode 100644 src/Blashing.Widgets/Timeline/TimelineWidget.razor.cs create mode 100644 src/Blashing.Widgets/Timeline/TimelineWidget.razor.css create mode 100644 src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss create mode 100644 src/Blashing.Widgets/Timeline/_/timeline.coffee create mode 100644 src/Blashing.Widgets/Timeline/_/timeline.html create mode 100644 src/Blashing.Widgets/Timeline/_/timeline.scss diff --git a/src/Blashing.Stories/Stories/TimelineWidget.stories.razor b/src/Blashing.Stories/Stories/TimelineWidget.stories.razor new file mode 100644 index 0000000..b8a0049 --- /dev/null +++ b/src/Blashing.Stories/Stories/TimelineWidget.stories.razor @@ -0,0 +1,27 @@ +@using Blashing.Widgets.Timeline + +@attribute [Stories("Example/Timeline")] + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Blashing.Widgets.Tests/TimelineWidgetTest.cs b/src/Blashing.Widgets.Tests/TimelineWidgetTest.cs new file mode 100644 index 0000000..2fdc973 --- /dev/null +++ b/src/Blashing.Widgets.Tests/TimelineWidgetTest.cs @@ -0,0 +1,64 @@ +using Bunit; +using Xunit; + +using Blashing.Widgets.Timeline; + +namespace Blashing.Widgets.Tests; + +public class TimelineWidgetTest : BunitContext +{ + [Fact] + public void TimelineWidgetMarkupShouldContainPassedInValues() + { + var title = "Timeline Title"; + var moreInfo = "More Info"; + var updatedAtMessage = "Updated At Message"; + var items = new List() + { + new TimelineItem("10:00", "Event One"), + new TimelineItem("11:30", "Event Two") + }; + + var cut = Render(parameters => parameters + .Add(p => p.Title, title) + .Add(p => p.MoreInfo, moreInfo) + .Add(p => p.UpdatedAtMessage, updatedAtMessage) + .Add(p => p.Items, items) + ); + + var expectedTitleMarkup = $"

{title}

"; + cut.FindAll("h1")[0].MarkupMatches(expectedTitleMarkup); + + var expectedMoreInfoMarkup = $"

{moreInfo}

"; + cut.FindAll("p")[0].MarkupMatches(expectedMoreInfoMarkup); + + var expectedUpdatedAtMessageMarkup = $"

{updatedAtMessage}

"; + cut.FindAll("p")[1].MarkupMatches(expectedUpdatedAtMessageMarkup); + } + + [Fact] + public void TimelineWidgetShouldContainPassedInValues() + { + var title = "Timeline Title"; + var moreInfo = "More Info"; + var updatedAtMessage = "Updated At Message"; + var items = new List() + { + new TimelineItem("10:00", "Event One"), + new TimelineItem("11:30", "Event Two") + }; + + var cut = Render(parameters => parameters + .Add(p => p.Title, title) + .Add(p => p.MoreInfo, moreInfo) + .Add(p => p.UpdatedAtMessage, updatedAtMessage) + .Add(p => p.Items, items) + ); + + var timelineWidget = cut.Instance; + Assert.Equal(timelineWidget.Title, title); + Assert.Equal(timelineWidget.MoreInfo, moreInfo); + Assert.Equal(timelineWidget.UpdatedAtMessage, updatedAtMessage); + Assert.Equal(timelineWidget.Items, items); + } +} diff --git a/src/Blashing.Widgets/Timeline/TimelineItem.cs b/src/Blashing.Widgets/Timeline/TimelineItem.cs new file mode 100644 index 0000000..43e25e3 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/TimelineItem.cs @@ -0,0 +1,3 @@ +namespace Blashing.Widgets.Timeline; + +public record TimelineItem(string Date, string Title); diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor b/src/Blashing.Widgets/Timeline/TimelineWidget.razor new file mode 100644 index 0000000..541092a --- /dev/null +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor @@ -0,0 +1,21 @@ +@inherits Blashing.Core.Components.BaseWidget; + +
+

@Title

+ +
    + @foreach (var item in Items ?? Enumerable.Empty()) + { +
  • +
    +
    + @item.Date + @item.Title +
    +
  • + } +
+ +

@MoreInfo

+

@UpdatedAtMessage

+
diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.cs b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.cs new file mode 100644 index 0000000..898e381 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.cs @@ -0,0 +1,24 @@ +using Blashing.Core.Components; +using Microsoft.AspNetCore.Components; + +namespace Blashing.Widgets.Timeline; + +public partial class TimelineWidget : BaseWidget +{ + [Parameter] + public string? Title { get; set; } + + [Parameter] + public string? MoreInfo { get; set; } + + [Parameter] + public string? UpdatedAtMessage { get; set; } + + [Parameter] + public List? Items { get; set; } = new(); + + protected override void OnParametersSet() + { + BackgroundColor ??= "#4b4b4b"; + } +} diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css new file mode 100644 index 0000000..fcf7be7 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css @@ -0,0 +1,62 @@ +.widget-timeline { + background-color: #4b4b4b; + padding-bottom: 70px; + overflow-y: auto; +} + +.widget-timeline .title { + color: rgba(255, 255, 255, 0.7); +} + +.widget-timeline .more-info { + color: rgba(255, 255, 255, 0.7); +} + +.widget-timeline .updated-at { + color: rgba(0, 0, 0, 0.3); +} + +.widget-timeline .timeline-list { + list-style: none; + padding: 10px 20px 10px 40px; + margin: 0; + position: relative; +} + +.widget-timeline .timeline-list::before { + content: ''; + position: absolute; + left: 28px; + top: 0; + bottom: 0; + width: 2px; + background: #E8F770; +} + +.widget-timeline .timeline-event { + position: relative; + padding-left: 20px; + margin-bottom: 15px; +} + +.widget-timeline .timeline-event .timeline-dot { + position: absolute; + left: -8px; + top: 5px; + width: 14px; + height: 14px; + border-radius: 50%; + background: #E8F770; +} + +.widget-timeline .timeline-event .timeline-content .event-description-date { + color: rgba(255, 255, 255, 0.7); + font-size: 12px; + display: block; +} + +.widget-timeline .timeline-event .timeline-content .event-description { + color: white; + font-size: 14px; + display: block; +} diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss new file mode 100644 index 0000000..b664f25 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss @@ -0,0 +1,79 @@ +// ---------------------------------------------------------------------------- +// Sass declarations +// ---------------------------------------------------------------------------- +$background-color: #4b4b4b; +$timeline-color: #E8F770; +$dot-color: #E8F770; + +$title-color: rgba(255, 255, 255, 0.7); +$moreinfo-color: rgba(255, 255, 255, 0.7); + +// ---------------------------------------------------------------------------- +// Widget-timeline styles +// ---------------------------------------------------------------------------- +.widget-timeline { + + background-color: $background-color; + padding-bottom: 70px; + overflow-y: auto; + + .title { + color: $title-color; + } + + .more-info { + color: $moreinfo-color; + } + + .updated-at { + color: rgba(0, 0, 0, 0.3); + } + + .timeline-list { + list-style: none; + padding: 10px 20px 10px 40px; + margin: 0; + position: relative; + + &::before { + content: ''; + position: absolute; + left: 28px; + top: 0; + bottom: 0; + width: 2px; + background: $timeline-color; + } + } + + .timeline-event { + position: relative; + padding-left: 20px; + margin-bottom: 15px; + + .timeline-dot { + position: absolute; + left: -8px; + top: 5px; + width: 14px; + height: 14px; + border-radius: 50%; + background: $dot-color; + } + + .timeline-content { + .event-description-date { + color: rgba(255, 255, 255, 0.7); + font-size: 12px; + display: block; + } + + .event-description { + color: white; + font-size: 14px; + display: block; + } + } + } + +} diff --git a/src/Blashing.Widgets/Timeline/_/timeline.coffee b/src/Blashing.Widgets/Timeline/_/timeline.coffee new file mode 100644 index 0000000..9b2af42 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/_/timeline.coffee @@ -0,0 +1,26 @@ +class Dashing.Timeline extends Dashing.Widget + + ready: -> + @renderTimeline(@get('events')) + + onData: (data) -> + # Handle incoming data + # You can access the html node of this widget with `@node` E8F770 616161 + # Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in. + if data.events + @renderTimeline(data.events) + + renderTimeline: (events) -> + # Margins: zero if not set or the same as the opposite margin + # (you likely want this to keep the chart centered within the widget) + left = @get('leftMargin') || 0 + right = @get('rightMargin') || left + top = @get('topMargin') || 0 + bottom = @get('bottomMargin') || top + + container = $(@node).parent() + # Gross hacks. Let's fix this. + width = (Dashing.widget_base_dimensions[0] * container.data("sizex")) + Dashing.widget_margins[0] * 2 * (container.data("sizex") - 1) - left - right + height = (Dashing.widget_base_dimensions[1] * container.data("sizey")) - ($(@node).find("h1").outerHeight() + 12) - top - bottom + id = "." + @get('id') + TimeKnots.draw(id, events, {horizontalLayout: false, color: "#222222", height: height, width: width, showLabels: true, labelFormat:"%H:%M"}); diff --git a/src/Blashing.Widgets/Timeline/_/timeline.html b/src/Blashing.Widgets/Timeline/_/timeline.html new file mode 100644 index 0000000..4852ca5 --- /dev/null +++ b/src/Blashing.Widgets/Timeline/_/timeline.html @@ -0,0 +1,3 @@ +

+ +
diff --git a/src/Blashing.Widgets/Timeline/_/timeline.scss b/src/Blashing.Widgets/Timeline/_/timeline.scss new file mode 100644 index 0000000..669c4ba --- /dev/null +++ b/src/Blashing.Widgets/Timeline/_/timeline.scss @@ -0,0 +1,34 @@ +// ---------------------------------------------------------------------------- +// Sass declarations +// ---------------------------------------------------------------------------- +$background-color: #4b4b4b; + +$title-color: rgba(255, 255, 255, 0.7); +$moreinfo-color: rgba(255, 255, 255, 0.7); + +// ---------------------------------------------------------------------------- +// Widget-text styles +// ---------------------------------------------------------------------------- +.widget-timeline { + + background-color: $background-color; + padding-bottom: 70px; + + .title { + color: $title-color; + } + + .more-info { + color: $moreinfo-color; + } + + .event-description { + fill: white; + font-size: 14px; + } + + .event-description-date { + fill: white; + font-size: 12px; + } +} From 868e1dea0eb828456de2bedce190c76516e0e7ca Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 21 Mar 2026 23:11:14 +0000 Subject: [PATCH 3/6] Add TimelineWidget example to AdditionalWidgets.razor Co-authored-by: AlexHedley <1573469+AlexHedley@users.noreply.github.com> Agent-Logs-Url: https://github.com/AlexHedley/blashing/sessions/c0d7c59f-28bb-43f8-9d26-384ac4054e22 --- .../Pages/AdditionalWidgets.razor | 32 +++++++++++++++++++ src/Blashing.Shared/_Imports.razor | 1 + 2 files changed, 33 insertions(+) diff --git a/src/Blashing.Shared/Pages/AdditionalWidgets.razor b/src/Blashing.Shared/Pages/AdditionalWidgets.razor index 519e1ed..6f125fb 100644 --- a/src/Blashing.Shared/Pages/AdditionalWidgets.razor +++ b/src/Blashing.Shared/Pages/AdditionalWidgets.razor @@ -16,6 +16,25 @@ +
+
+ +

Timeline

+ + + +
+
+
@@ -65,5 +84,18 @@ BackgroundColor="#8fb347"> + + + + \ No newline at end of file diff --git a/src/Blashing.Shared/_Imports.razor b/src/Blashing.Shared/_Imports.razor index 584fc30..8b155df 100644 --- a/src/Blashing.Shared/_Imports.razor +++ b/src/Blashing.Shared/_Imports.razor @@ -19,3 +19,4 @@ @using Blashing.Widgets; @using Blashing.Widgets.ServerStatusSquares; @using Blashing.Widgets.CircleCIBuildStatus; +@using Blashing.Widgets.Timeline; From 17e1768f4136c4c2c977c338514763c70fdfbe93 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:14:36 +0000 Subject: [PATCH 4/6] Restyle TimelineWidget to match original dashing-timeline layout Co-authored-by: AlexHedley <1573469+AlexHedley@users.noreply.github.com> Agent-Logs-Url: https://github.com/AlexHedley/blashing/sessions/8ac1a905-5d06-4e7a-a9d3-f502e0fcbba5 --- .../Timeline/TimelineWidget.razor | 6 +-- .../Timeline/TimelineWidget.razor.css | 42 ++++++++++------ .../Timeline/TimelineWidget.razor.scss | 48 +++++++++++-------- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor b/src/Blashing.Widgets/Timeline/TimelineWidget.razor index 541092a..d8d9fef 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor @@ -7,11 +7,9 @@ @foreach (var item in Items ?? Enumerable.Empty()) {
  • + @item.Date
    -
    - @item.Date - @item.Title -
    + @item.Title
  • } diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css index fcf7be7..a9d7f68 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css @@ -18,45 +18,57 @@ .widget-timeline .timeline-list { list-style: none; - padding: 10px 20px 10px 40px; + padding: 10px 20px; margin: 0; position: relative; } +/* vertical line through the centre of the dots */ .widget-timeline .timeline-list::before { content: ''; position: absolute; - left: 28px; + left: 50%; top: 0; bottom: 0; width: 2px; + transform: translateX(-50%); background: #E8F770; } .widget-timeline .timeline-event { + display: flex; + align-items: center; + margin-bottom: 18px; position: relative; - padding-left: 20px; - margin-bottom: 15px; } +/* left column: date */ +.widget-timeline .timeline-event .event-description-date { + flex: 1; + text-align: right; + padding-right: 14px; + color: rgba(255, 255, 255, 0.7); + font-size: 12px; + white-space: nowrap; +} + +/* centre: dot */ .widget-timeline .timeline-event .timeline-dot { - position: absolute; - left: -8px; - top: 5px; + flex-shrink: 0; width: 14px; height: 14px; border-radius: 50%; background: #E8F770; + z-index: 1; } -.widget-timeline .timeline-event .timeline-content .event-description-date { - color: rgba(255, 255, 255, 0.7); - font-size: 12px; - display: block; -} - -.widget-timeline .timeline-event .timeline-content .event-description { +/* right column: title */ +.widget-timeline .timeline-event .event-description { + flex: 1; + padding-left: 14px; color: white; font-size: 14px; - display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss index b664f25..b152c23 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss @@ -31,48 +31,58 @@ $moreinfo-color: rgba(255, 255, 255, 0.7); .timeline-list { list-style: none; - padding: 10px 20px 10px 40px; + padding: 10px 20px; margin: 0; position: relative; + // vertical line through the centre of the dots &::before { content: ''; position: absolute; - left: 28px; + left: 50%; top: 0; bottom: 0; width: 2px; + transform: translateX(-50%); background: $timeline-color; } } .timeline-event { + display: flex; + align-items: center; + margin-bottom: 18px; position: relative; - padding-left: 20px; - margin-bottom: 15px; + // left column: date + .event-description-date { + flex: 1; + text-align: right; + padding-right: 14px; + color: rgba(255, 255, 255, 0.7); + font-size: 12px; + white-space: nowrap; + } + + // centre: dot .timeline-dot { - position: absolute; - left: -8px; - top: 5px; + flex-shrink: 0; width: 14px; height: 14px; border-radius: 50%; background: $dot-color; + z-index: 1; } - .timeline-content { - .event-description-date { - color: rgba(255, 255, 255, 0.7); - font-size: 12px; - display: block; - } - - .event-description { - color: white; - font-size: 14px; - display: block; - } + // right column: title + .event-description { + flex: 1; + padding-left: 14px; + color: white; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } } From 08b6c4d8bccd138c5811489ecee88c7c8cbadcdc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:31:32 +0000 Subject: [PATCH 5/6] Add per-item dot colour and border ring to TimelineWidget Co-authored-by: AlexHedley <1573469+AlexHedley@users.noreply.github.com> Agent-Logs-Url: https://github.com/AlexHedley/blashing/sessions/3fcaea2e-a675-4f95-a5f6-d3f160650967 --- nohup.out | 0 .../Pages/AdditionalWidgets.razor | 16 ++++++++-------- src/Blashing.Widgets/Timeline/TimelineItem.cs | 2 +- .../Timeline/TimelineWidget.razor | 2 +- .../Timeline/TimelineWidget.razor.css | 1 + .../Timeline/TimelineWidget.razor.scss | 1 + 6 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 nohup.out diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000..e69de29 diff --git a/src/Blashing.Shared/Pages/AdditionalWidgets.razor b/src/Blashing.Shared/Pages/AdditionalWidgets.razor index 6f125fb..7b0c583 100644 --- a/src/Blashing.Shared/Pages/AdditionalWidgets.razor +++ b/src/Blashing.Shared/Pages/AdditionalWidgets.razor @@ -23,10 +23,10 @@ @@ -88,10 +88,10 @@ diff --git a/src/Blashing.Widgets/Timeline/TimelineItem.cs b/src/Blashing.Widgets/Timeline/TimelineItem.cs index 43e25e3..e1207c7 100644 --- a/src/Blashing.Widgets/Timeline/TimelineItem.cs +++ b/src/Blashing.Widgets/Timeline/TimelineItem.cs @@ -1,3 +1,3 @@ namespace Blashing.Widgets.Timeline; -public record TimelineItem(string Date, string Title); +public record TimelineItem(string Date, string Title, string? Color = null); diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor b/src/Blashing.Widgets/Timeline/TimelineWidget.razor index d8d9fef..606f7bb 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor @@ -8,7 +8,7 @@ {
  • @item.Date -
    +
    @item.Title
  • } diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css index a9d7f68..747b028 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.css @@ -60,6 +60,7 @@ border-radius: 50%; background: #E8F770; z-index: 1; + box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.5); } /* right column: title */ diff --git a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss index b152c23..6f84833 100644 --- a/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss +++ b/src/Blashing.Widgets/Timeline/TimelineWidget.razor.scss @@ -72,6 +72,7 @@ $moreinfo-color: rgba(255, 255, 255, 0.7); border-radius: 50%; background: $dot-color; z-index: 1; + box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.5); } // right column: title From f016b7e55cb6800868dfac197860022a786eb2f5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:31:44 +0000 Subject: [PATCH 6/6] Remove nohup.out from repo Co-authored-by: AlexHedley <1573469+AlexHedley@users.noreply.github.com> Agent-Logs-Url: https://github.com/AlexHedley/blashing/sessions/3fcaea2e-a675-4f95-a5f6-d3f160650967 --- .gitignore | 1 + nohup.out | 0 2 files changed, 1 insertion(+) delete mode 100644 nohup.out diff --git a/.gitignore b/.gitignore index 7086f64..8423c65 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ release/ **/coveragereport/**/** src/**/coverage.json +nohup.out diff --git a/nohup.out b/nohup.out deleted file mode 100644 index e69de29..0000000